Ý nghĩa khoa học và thực tiễn Khóa luận “TÌM HIỂU CÁC QUAN HỆ HÌNH HỌC 2D, 3D VÀ XÂY DỰNG ỨNG DỤNG” được nghiên cứu có ý nghĩa trong lĩnh vực đồ họa máy tính với hướng mô phỏng đối tư
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN
Trang 2LỜI CẢM ƠN
Để hoàn thành được khóa luận này, trước hết em xin gửi lời cảm ơn
sâu sắc nhất tới TS Trịnh Đình Vinh đã tận tình hướng dẫn, chỉ bảo, định
hướng, đóng góp những ý kiến quý báu cho em trong suốt quá trình thực hiện
Em xin chân thành cảm ơn các thầy, cô giáo trong khoa Công nghệ Thông tin, trường Đại học Sư phạm Hà Nội 2 đã quan tâm giảng dạy và giúp
đỡ em trong suốt bốn năm học vừa qua cũng như trong thời gian em làm bài khóa luận này Là sinh viên khoa Công nghệ Thông tin, em rất tự hào về khoa mình học, về thầy cô giáo của mình Em xin kính chúc các thầy, các cô luôn mạnh khỏe, hạnh phúc và thành công Chúc khoa Công nghệ Thông tin
sẽ ngày một khang trang, vững mạnh, góp phần to lớn trong sự nghiệp đào tạo chuyên nghiệp của trường Đại học Sư phạm Hà Nội 2
Lần đầu nghiên cứu khoa học, chắc chắn đề tài của em không tránh khỏi những thiếu sót, hạn chế Vì vậy, em rất mong sự đóng góp ý kiến của các thầy cô giáo và các bạn để đề tài của em được hoàn thiện
Cuối cùng, em xin cảm ơn tới đại gia đình của em, đã luôn luôn động viên, khích lệ tinh thần và tạo điều kiện tốt nhất cho em hoàn thành khóa luận này
Hà Nội, tháng 05 năm 2014
Sinh viên
Lê Thị Thu Hương
Trang 3LỜI CAM ĐOAN
Tên em là: Lê Thị Thu Hương
Sinh viên: K36 – CNTT, trường Đại học Sư phạm Hà Nội 2
Em xin cam đoan:
1 Đề tài “Tìm hiểu các quan hệ hình học 2D, 3D và xây dựng ứng dụng” là kết quả tìm hiểu và nghiên cứu của riêng em, dưới sự hướng dẫn
của TS Trịnh Đình Vinh
2 Khóa luận hoàn toàn không sao chép từ các tài liệu có sẵn đã được công bố khác
3 Kết quả không trùng với các tác giả khác
Nếu sai em xin hoàn toàn chịu trách nhiệm
Hà Nội, tháng 05 năm 2014
Sinh viên
Lê Thị Thu Hương
Trang 4MỤC LỤC
MỞ ĐẦU.……….……….………1
CHƯƠNG 1:QUAN HỆ HÌNH HỌC TRONG KHÔNG GIAN 2D 4
1.1 Các đối tượng hình học 2D 4
1.2 Tương quan giữa các quan hệ hình học 2D 4
1.2.1 Góc giữa hai đường thẳng 4
1.2.2 Giao điểm giữa hai đoạn thẳng 5
1.2.3 Vẽ đa giác 8
1.2.4 Điểm bên trong / bên ngoài đa giác 9
1.2.5 Kiểm tra quan hệ giữa đoạn thẳng và đa giác 10
1.2.6 Kiểm tra quan hệ hai đa giác 13
1.2.7 Tính chu vi, diện tích đa giác 16
CHƯƠNG 2:QUAN HỆ HÌNH HỌC TRONG KHÔNG GIAN 3D 18
2.1 Các đối tượng hình học 3D 18
2.2 Tương quan giữa các quan hệ hình học 3D 19
2.2.1 Các phép biến hình 3D 19
2.2.2 Biểu diễn đối tượng 3D 24
2.2.3 Quan sát vật thể 3D qua hệ tọa độ quan sát 25
2.2.4 Kiểm tra quan hệ Điểm - Đường thẳng 27
2.2.5 Kiểm tra quan hệ Điểm - Mặt phẳng 29
2.2.6 Kiểm tra quan hệ Đường thẳng - Đường thẳng 31
Trang 52.2.7 Kiểm tra quan hệ Đường thẳng - Mặt phẳng 34
2.2.8 Kiểm tra quan hệ Mặt phẳng - Mặt phẳng 37
2.2.9 Tính thể tích hình lăng trụ, hình chóp, hình nón 40
CHƯƠNG 3:XÂY DỰNG ỨNG DỤNG 42
3.1 Phát biểu bài toán 42
3.2 Cách tổ chức các hàm trong 2D, 3D 42
3.3 Thiết kế giao diện 49
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 67
TÀI LIỆU THAM KHẢO 69
Trang 6DANH SÁCH CÁC HÌNH
Hình 1.1: Tam giác tạo bởi 2 vector a và b 5
Hình 1.2: Vị trí tương đối của 2 đường thẳng 6
Hình 1.3: Đa giác bất kì 13
Hình 1.4: Tiến trình duyệt điểm giao giữa các cạnh của đa giác 14
Hình 1.5: Đa giác đơn phẳng bất kì 16
Hình 2.1: Phép co dãn 21
Hình 2.2: Phép tịnh tiến 21
Hình 2.3: Phép quay quanh trục Oy 22
Hình 2.4: Phép quay quanh trục Ox 22
Hình 2.5: Phép quay quanh trục Oz 22
Hình 2.6: Xác định chiều quay dương 23
Hình 2.7: Phép chiếu phối cảnh 25
Hình 2.8: Xác định hình chiếu trên mặt phẳng màn hình 27
Hình 3.1: Form giao diện chính 49
Hình 3.2: Form Điểm 50
Hình 3.3: Form nhập tọa độ điểm 50
Hình 3.4: Tương quan giữa điểm và điểm 51
Hình 3.5: Tương quan giữa điểm và đường thẳng 51
Hình 3.6: Form đường thẳng 52
Hình 3.7: Form nhập đường thẳng (nhập 2 điểm) 52
Hình 3.8: Form nhập đường thẳng(nhập điểm và vector pháp tuyến) 53
Hình 3.9: Tương quan giữa đường thẳng và đường tròn 53
Hình 3.10: Tương quan giữa đường thẳng và đường thẳng 53
Hình 3.11: Form Hình tam giác 54
Hình 3.12: Form nhập tam giác 54
Hình 3.13: Thông tin tam giác được nhập 55
Trang 7Hình 3.14: Tương quan giữa điểm và tam giác 55
Hình 3.15: Form Hình tứ giác 56
Hình 3.16: Form nhập tứ giác 56
Hình 3.17: Form nhập hình tròn 57
Hình 3.18: Form đa giác đều 57
Hình 3.19: Đa giác bất kì được nhập 58
Hình 3.20: Form Mặt phẳng 58
Hình 3.21: Form nhập mặt phẳng 59
Hình 3.22: Mặt phẳng bất kì được nhập 59
Hình 3.23: Tương quan giữa điểm và mặt phẳng 59
Hình 3.24: Tương quan giữa mặt phẳng và đường thẳng 60
Hình 3.25: Form Nhập hình lập phương 60
Hình 3.26: Hình lập phương bất kì được nhập 61
Hình 3.27: Form Nhập hình hộp chữ nhật 61
Hình 3.28: Hình hộp chữ nhật bất kì được nhập 62
Hình 3.29: Form nhập hình nón 62
Hình 3.30: Hình nón bất kì được nhập 63
Hình 3.31: Form nhập hình trụ 63
Hình 3.32: Hình trụ bất kì được nhập 64
Hình 3.33: Form nhập hình cầu 64
Hình 3.34: Hình cầu bất kì được nhập 65
Hình 3.35: Form Mô phỏng 3D 65
Hình 3.36: Mô phỏng 3D hình lập phương 66
Trang 8MỞ ĐẦU
1 Lý do chọn đề tài
Hiện nay, công nghệ thông tin là một lĩnh vực tiềm năng và có những bước phát triển nhảy vọt, nó đã hỗ trợ đáng kể trong mọi lĩnh vực của cuộc sống xã hội Sản phẩm của công nghệ thông tin biến đổi hàng ngày, hàng giờ Trong lĩnh vực toán học, các sản phẩm của công nghệ thông tin cũng hỗ trợ đắc lực cho việc học tập và nghiên cứu
Sự phát triển của công nghệ thông tin và ứng dụng công nghệ thông tin trong các lĩnh vực của đời sống, kinh tế, xã hội trong nhiều năm qua cũng đồng nghĩa với việc nhu cầu ứng dụng công nghệ thông tin vào đời sống nhiều lên Hơn nữa, các công nghệ đồ họa, mô phỏng phát triển một cách nhanh chóng khiến việc sáng tạo ra các hệ thống mô phỏng đồ họa ngày càng quan trọng Mặt khác, trong môi trường cạnh tranh, người ta cần có nhiều hệ thống mô phỏng mới đơn giản, hữu ích hơn để giúp con người dễ dàng hình dung sự vật, đối tượng đa dạng và phong phú Với những lý do như vậy, các
mô hình truyền thống không đáp ứng được thực tế mà cần đến các hệ thống
áp dụng kiến thức về đồ họa máy tính để thiết kế và xây dựng Kỹ thuật đồ họa máy tính đã và đang được nghiên cứu, ứng dụng trong nhiều lĩnh vực khác nhau ở các nước trên thế giới Tại Việt Nam, kỹ thuật này còn tương đối mới mẻ Tuy nhiên, nó cũng đang được nghiên cứu và dần đưa vào ứng dụng trong những năm gần đây
Sự phát triển của khoa học, kĩ thuật, nghệ thuật, kinh doanh, và công nghệ luôn luôn phụ thuộc vào khả năng truyền đạt thông tin của chúng ta Câu châm ngôn từ xa xưa “một hình ảnh có giá trị hơn cả vạn lời" hay "trăm nghe không bằng một thấy" cho thấy ý nghĩa rất lớn của hình ảnh trong việc truyền tải thông tin Hình ảnh bao giờ cũng được cảm nhận nhanh và dễ dàng hơn, đặc biệt là trong trường hợp bất đồng về ngôn ngữ Do đó, không có gì
Trang 9ngạc nhiên khi mà ngay từ lúc xuất hiện máy tính, các nhà nghiên cứu đã cố gắng sử dụng nó để phát sinh các ảnh trên màn hình
Trong suốt gần 50 năm phát triển của máy tính, khả năng phát sinh hình ảnh bằng máy tính của chúng ta đã đạt tới mức mà bây giờ hầu như tất
cả các máy tính đều có khả năng đồ họa
Đồ họa máy tính là một trong những lĩnh vực lí thú nhất và phát triển nhanh nhất của tin học Ngay từ khi xuất hiện, đồ họa máy tính đã có sức lôi cuốn mãnh liệt, cuốn hút rất nhiều người ở nhiều lĩnh vực khác nhau như khoa học, nghệ thuật, kinh doanh, quản lí, Tính hấp dẫn và đa dạng của đồ họa máy tính có thể được minh họa rất trực quan thông qua việc khảo sát các ứng dụng của nó
Từ ý tưởng muốn áp dụng nhiều hơn nữa công nghệ thông tin vào giảng dạy môn hình học ở trường phổ thông, em đã chọn đề tài “TÌM HIỂU CÁC QUAN HỆ HÌNH HỌC 2D, 3D VÀ XÂY DỰNG ỨNG DỤNG” làm khóa luận tốt nghiệp
2 Mục đích nghiên cứu
- Tìm hiểu về các đối tượng hình học trong không gian 2D, 3D
- Tìm hiểu về quan hệ tương quan giữa các đối tượng hình học 2D, 3D
mô phỏng các đối tượng hình học 2D, 3D trong máy tính
4 Ý nghĩa khoa học và thực tiễn
Khóa luận “TÌM HIỂU CÁC QUAN HỆ HÌNH HỌC 2D, 3D VÀ XÂY DỰNG ỨNG DỤNG” được nghiên cứu có ý nghĩa trong lĩnh vực đồ họa máy tính với hướng mô phỏng đối tượng Đề tài được nghiên cứu sẽ đạt
Trang 10hiệu quả trong vấn đề mô phỏng đối tượng hình học nhanh hơn, giảm thời gian, công sức thực hiện mô phỏng trên giấy mà không thật chuẩn xác
5 Phương pháp nghiên cứu
a Phương pháp nghiên cứu lý luận
Nghiên cứu qua việc đọc sách, báo và các tài liệu liên quan nhằm xây dựng cơ sở lý thuyết của khóa luận và các biện pháp cần thiết để giải quyết các vấn đề của đề tài
b Phương pháp thực nghiệm
Thông qua quan sát thực tế, yêu cầu của cơ sở, những lý luận được nghiên cứu và kết quả đạt được qua những phương pháp trên
c Phương pháp chuyên gia
Tham khảo ý kiến của các chuyên gia để có thể thiết kế chương trình phù hợp với yêu cầu thực tiễn, nội dung xử lý nhanh đáp ứng yêu cầu ngày càng cao của người sử dụng
6 Cấu trúc khóa luận
Ngoài phần mở đầu, kết luận và hướng phát triển thì khóa luận gồm ba chương:
Chương 1: Quan hệ hình học trong không gian 2D
Chương 2: Quan hệ hình học trong không gian 3D
Chương 3: Xây dựng ứng dụng
Trang 11CHƯƠNG 1 QUAN HỆ HÌNH HỌC TRONG KHÔNG GIAN 2D
1.1 Các đối tượng hình học 2D
Hình học 2D gồm ba đối tượng cơ bản: điểm, đường thẳng và đa giác Các đối tượng hình học trong không gian 2D kể trên có quan hệ tương quan với nhau, cụ thể là sự tương quan giữa các đối tượng: Điểm – đường thẳng, điểm – đa giác, đường thẳng – đường thẳng, đường thẳng – đa giác và
đa giác – đa giác
Để kiểm tra sự tương quan giữa các đối tượng hình học 2D, ta cần thực hiện các yêu cầu sau:
+ Với sự tương quan giữa điểm - đường thẳng: Kiểm tra xem điểm có thuộc đường thẳng hay không? Nếu điểm không thuộc đường thẳng, ta thực hiện tính khoảng cách từ điểm đến đường thẳng
+ Với sự tương quan giữa điểm - đa giác: Kiểm tra xem điểm nằm trong hay nằm ngoài đa giác
+ Với sự tương quan giữa đường thẳng - đường thẳng: Kiểm tra xem hai đường thẳng là trùng nhau, cắt nhau hay song song, thực hiện tính góc giữa hai đường thẳng
+ Với sự tương quan giữa đường thẳng - đa giác: Kiểm tra xem đường thẳng nằm ngoài đa giác hay cắt đa giác
+ Với sự tương quan giữa đa giác – đa giác: Kiểm tra xem 2 đa giác là trùng nhau, lồng nhau hay cắt nhau và tính diện tích của đa giác
1.2 Tương quan giữa các quan hệ hình học 2D
1.2.1 Góc giữa hai đường thẳng
Cơ sở toán học:
Trang 12Đây là ứng dụng quan trọng của tích vô hướng Hình dưới cho thấy góc được tạo bởi hai vector a và b Chúng tạo thành hai cạnh của tam giác
Ta có cos() = a.b / |a||b|=a1b1a2b2/ (a12a22)(b12b22)
Cos() dương nếu || nhỏ hơn 90o, và âm nếu || lớn hơn 90o
Phương pháp:
- Tính vector chỉ phương a và b của 2 đoạn thẳng
- Tính vector vô hướng a.b
- Cos ()= a.b / |a| |b|
- Góc 2 đoạn thẳng alpha = arcos(cos())
1.2.2 Giao điểm giữa hai đoạn thẳng
Trang 13Hình 1.2: Vị trí tương đối của 2 đường thẳng
Phương trình tham số cho mỗi đường như sau:
x1 (to) = x2(uo) và y1(to) =y2(uo)
Từ đây, ta có các phương trình sau:
ax + (bx - ax)to = cx + (dx - cx)uo
ay + (by - ay)to = cy + (dy - cy)uo (1.3) Khử uo, ta được:
D to = (cx - ax) (dy - cy) - (cy - ay)(dx - cx) (1.4) với D = (bx - ax)(dy - cy) - (by - ay)(dx - cx) (1.5)
Có hai trường hợp cơ bản, D bằng hay khác 0
Trang 14- Nếu D ≠ 0, ta tính to từ phương trình (1.4) Nếu to nằm ngoài đoạn [0, 1] thì không có giao điểm giữa hai đoạn Ngược lại, thì có thể có giao điểm, thay to
vào (1.3) để tính uo Nếu uo nằm trong đoạn [0, 1] thì chắc chắn có giao điểm, dùng phương trình (1.1) và (1.2) để tính
- Nếu D = 0, từ phương trình (1.5) suy ra:
(dy - cy) / (dx - cx) = (by - ay) / (bx - ax) Nghĩa là các hệ số góc bằng nhau, nên các đường cha song song Nếu các đường cha trùng nhau thì các đoạn cũng có thể trùng nhau Để kiểm điều này, ta xem c có nằm trên đường cha đi qua a và b không Dựa vào phương trình của đường cha là:
(bx - ax)(y - ay) - (by - ay)(x - ax) = 0 Thay cx cho x và cy cho y và xem vế trái có đủ gần 0 không (nghĩa là: nhỏ hơn lượng nào đó, như 10 - 5) Nếu không, các đường cha không trùng nhau,
và không có giao điểm Nếu thỏa mãn thì phải thực hiện bước kiểm cuối cùng để xem các đoạn có trùng nhau không
Từ phương trình (1.1) tìm hai giá trị tc và td mà đường đạt tới vị trí c và d
Vì các đường cha trùng nhau, ta chỉ cần dùng thành phần x (nếu đường 1 thẳng đứng, thì dùng thành phần y) và thay cx và dx, ta có :
tc = (cx - ax) / (bx - ax)
td = (dx - ax) / (bx - ax) Đường 1 bắt đầu tại 0 và kết thúc tại 1, và xét thứ tự của bốn giá trị 0, 1,
tc và td, ta xác định được vị trí tương đối của hai đường Hai đường sẽ chồng nhau trừ khi cả hai tc và td nhỏ hơn 0 hay lớn hơn 1 Nếu có trùng nhau, ta dễ dàng xác định các điểm đầu trùng nhau từ tc và td
Giải thuật được xây dựng trong thủ tục Intersect (), gồm các tham số là bốn điểm đầu của các đường, giá trị trả về có thể có thể có các giá trị sau: 1: có một giao điểm
2: không giao nhau
(1.6)
(1.7)
(1.8)
Trang 153: các đoạn thẳng song song nhau
4: hai đoạn thẳng chồng nhau
5: hai đoạn thẳng cùng nằm trên 1 đường thẳng, không cắt nhau
Input: Hệ số a, b, c của phương trình 2 đoạn thẳng
Output: Kết luận về tương quan giữa 2 đoạn thẳng
- Ngược lại
Nếu c nằm trên đoạn AB
+ Tính tc, td;
+ Nếu không phải cả tc và td < 0 hoặc cả tc, td >1
Return 4; //2 đoạn thẳng chồng nhau + Ngược lại, Return 5; //2 đoạn thẳng nằm trên 1 đường thẳng và không cắt nhau
Ngược lại, Return 3; //2 đoạn thẳng song song
Trang 16Phương pháp:
- Xuất phát từ đỉnh đầu tiên
- Vẽ nối đến đỉnh kế tiếp theo thứ tự cùng chiều kim đồng hồ
- Vẽ nối từ đỉnh cuối cùng đến đỉnh đầu tiên
1.2.4 Điểm bên trong / bên ngoài đa giác
Cơ sở toán học:
Giải thuật này nhằm xác định một điểm cho trước có nằm bên trong một đa giác đơn phẳng hay không
Giải thuật xây dựng dựa trên định lý mang tên JORDAN sau đây:
Định lý JORDAN: “Mỗi đường cong, kín, đơn, phẳng, một chiều, phân hoạch mặt phẳng thành hai miền, một trong hai miền đó hoàn toàn chứa những đường thẳng nào đó, miền còn lại thì không có tính chất đó”
Trong định lý trên đây, một trong hai miền sẽ được gọi là miền trong (gồm bản thân đường cong và phần mặt phẳng giới nội bởi đường cong) không thuộc miền trong gọi là miền ngoài
Từ định lý này dẫn đến hệ quả sau:
Hệ quả: “Từ một điểm P bất kỳ, vẽ một tia chỉ cắt đa giác ở những điểm trong của các cạnh (nghĩa là: không đi qua đỉnh nào của đa giác); nếu số giao điểm là lẻ thì P là điểm trong, nếu số giao điểm là chẵn thì P là điểm ngoài”
Về mặt kỹ thuật, mọi đường cong đơn, phẳng, kín, liên thông, không tự cắt đều có thể tiếp cận tuyến tính bằng một đa giác bao gồm một số hữu hạn các cạnh liên tiếp Vì vậy cho phép xây dựng một giải thuật test quan hệ trong/ ngoài chỉ bằng cách xét số giao điểm của tia có gốc là điểm cần xét
Phương pháp:
- Chọn Px là nửa đường thẳng xuất phát từ P song song với trục Ox, hướng về phía x>0 Lấy P=(x,y)
- P là điểm cần xét
Trang 17- Nếu (P là một đỉnh) hoặc (P thuộc trong một cạnh) thì
Return (P điểm trong)
- Ngược lại, xác định giao điểm Px với các cạnh đa giác
{
Ci là cạnh Pi Pi+1 của đa giác
Nếu y = yi thì xét hai cạnh có một đầu là Pi
Nếu cả hai đầu kia ở một phía của Pi thì tính Px cắt cả hai cạnh
Nếu số giao điểm lẻ
Return P thuộc đa giác
1.2.5 Kiểm tra quan hệ giữa đường thẳng và đa giác
Các chương trình ứng dụng mô tả các hình ảnh bằng hệ tọa độ thế giới thực, có thể là bất kỳ hệ tọa độ Descartes nào mà người dùng cảm thấy thuận tiện nhất Các hình ảnh được mô tả trong hệ tọa độ thực sau đó sẽ được các
hệ độ họa ánh xạ vào các hệ tọa độ thiết bị Thông thường, các hệ đồ họa cho phép người dùng xác định một vùng nào đó của hình ảnh được hiển thị và nó
sẽ hiển thị ở đâu trên màn hình (viewport) Ta có thể chọn một vùng hay nhiều vùng để hiển thị, các vùng này có thể đặt ở các nơi khác nhau hay lồng
Trang 18vào nhau trên màn hình Quá trình này đòi hỏi nhiều thao tác như dịch chuyển, biến đổi tỷ lệ để đưa vào bên trong viewport hoặc đơn giản là loại
bỏ các phần hình ảnh nằm ngoài vùng đang được xét Thao tác cuối cùng và cũng được sử dụng nhiều nhất còn được gọi là clipping Trong thuật ngữ thông thường, Viewport được hiểu như một window – cửa sổ (hình chữ nhật), theo đó hình ảnh được “clipping” – sự cắt xén Tuy nhiên Viewport cũng có thể là một đa giác bất kỳ Bài toán clipping sau đây được xét cho trường hợp tổng quát hơn: clipping với đa giác đơn bất kì (cho cả hai trường
hợp đa giác lồi hoặc lõm)
Cơ sở toán học và giải thuật:
Các bước tiến hành clipping đoạn thẳng AB bằng một đa giác đơn, phẳng bất kì như sau:
Bước 1: Hoán đổi A, B để xA < xB
Nếu xA = xB Hoán đổi A, B để yA < yB
Bước 2: Kiểm tra tính trong ngoài của A và B đối với đa giác (Dùng giải
thuật kiểm tra điểm bên trong/ngoài đa giác)
Bước 3: Tìm giao điểm của AB với đa giác (Dùng giải thuật xác định
giao điểm của 2 đoạn đã có)
Nếu có giao điểm thì
{
- Đưa các tọa độ của các điểm cắt vào một danh sách
- Sắp xếp cho hoành độ các giao điểm tăng dần
(Nếu xA = xB sắp xếp theo tung độ)
}
Bước 4: Thực hiện clipping
- Nếu A và B đều nằm trong đa giác thì
Nếu số điểm cắt = 0, Return (AB nằm hoàn toàn trong đa giác)
Trang 19- Ngƣợc lại
{ Đoạn thẳng từ A đến điểm cắt thứ 1 thuộc đa giác
i = 1
Lặp lại
Tìm trung điểm của đoạn thẳng nối hai điểm cắt kế tiếp nhau Kiểm tra trong /ngoài đối với trung điểm
Nếu trung điểm nằm trong đa giác thì
Return (Đoạn thẳng thuộc đa giác) Ngƣợc lại, Return (Đoạn thẳng không thuộc đa giác)
Inc (i,1) Cho đến khi i = số điểm cắt }
- Ngƣợc lại, có điểm A hay B nằm ngoài đa giác
- Nếu số điểm cắt = 0, Return (Đoạn AB ngoài đa giác)
Nếu trung điểm nằm trong đa giác thì
Return (Đoạn thẳng thuộc đa giác)
Ngƣợc lại, Return (Đoạn thẳng không thuộc đa giác)
inc (i,1) cho đến khi hết danh sách
Trang 20}
-Ngược lại, Return (Đoạn thẳng không thuộc đa giác)
Bước 5: Vẽ lại các đoạn thẳng thuộc đa giác
Mở rộng: Giải thuật có thể được mở rộng cho việc clipping một đa giác
bằng cách thực hiện clipping tất cả các cạnh của đa giác
1.2.6 Kiểm tra quan hệ hai đa giác
Cho 2 đa giác đặt tên là SUBJ với đối tượng đa giác ban đầu và CLIP
là đa giác cắt xén được thể hiện bằng 2 danh sách (a,b,c,d) và (A,B,C,D) tương ứng Tất cả điểm giao của 2 danh sách sẽ được xác định và lưu vào danh sách (theo thứ tự sang phải của mỗi cạnh)
Trang 21Duyệt SUBJ theo hướng đi tới cho tới khi tìm được 1 điểm giao đi vào (entering intersection), là điểm giao mà SUBJ di chuyển từ ngoài vào trong
đa giác CLIP và đưa điểm này vào danh sách xuất đa giác được clip
Duyệt SUBJ tới khi gặp 1 điểm giao khác Nhảy ra khỏi SUBJ và di chuyển theo CLIP thay vì SUBJ Duyệt CLIP theo hướng đi tới Tới khi gặp một điểm giao, nhảy ra khỏi CLIP và duyệt SUBJ theo hướng đi tới, và cứ tiếp tục như vậy Mỗi đỉnh hoặc mỗi điểm giao gặp phải khi duyệt sẽ được đưa vào danh sách xuất đa giác được clip Lặp lại tiến trình trên giữa 2 đa giác, duyệt mỗi đa giác theo hướng đi tới cho tới khi đỉnh đầu tiên được gặp lại
Hình 1.4: Tiến trình duyệt điểm giao giữa các cạnh của đa giác
Bây giờ, ta kiểm tra một điểm giao “entering” khác của SUBJ Và sẽ tạo
ra danh sách xuất (3,4,5,6) Việc kiểm tra những điểm giao “entering” khác
t
Trang 22Giải thuật:
-Bước 1: Tạo danh sách SUBJ_LIST
Duyệt lần lượt mỗi cạnh đa giác SUBJ theo thứ tự cùng chiều kim
đồng hồ
{
- Tìm các điểm cắt của cạnh PiPi+1 với đa giác CLIP
- Sắp xếp danh sách điểm cắt theo hoành độ tăng dần Nếu hoành độ Pi.x
= Pi+1.x thì sắp xếp theo tung độ
- Đưa đỉnh Pi vào danh sách SUBJ_LIST
- Đưa các điểm cắt từ danh sách điểm cắt vào SUBJ_LIST theo hướng đi
từ Pi tới Pi+1
}
-Bước 2: Tạo danh sách CLIP_LIST
Duyệt lần lượt mỗi cạnh đa giác CLIP theo thứ tự cùng chiều kim đồng hồ
{
- Tìm các điểm cắt của cạnh PiPi+1 với đa giác SUBJ
- Sắp xếp danh sách điểm cắt theo hoành độ tăng dần Nếu hoành độ Pi.x
= Pi+1.x thì sắp xếp theo tung độ
- Đưa đỉnh Pi vào danh sách CLIP_LIST
- Đưa các điểm cắt từ danh sách điểm cắt vào CLIP_LIST theo hướng đi
- Tìm điểm giao “entering” chưa duyệt của SUBJ_LIST
- Duyệt trên SUBJ_LIST tới khi thấy điểm giao tiếp theo
Trang 23- Chuyển sang duyệt CLIP_LIST tới khi thấy điểm giao tiếp theo
Cho tới khi điểm đầu tiên (điểm “entering”) được gặp lại
- Xuất danh sách đa giác tìm được ở trên
Cho tới khi tất cả các điểm giao “entering” đã được duyệt
1.2.7 Tính chu vi, diện tích đa giác
Cơ sở toán học:
Việc tính một đa giác đơn phẳng bất kỳ xuất phát từ việc tính diện tích tam giác Diện tích tam giác được tính dựa vào tích hai vector như sau:
S =(1/2) |a x b|
Trong đó các vector a, b là các vector cạnh của tam giác
Với một đa giác n đỉnh, ta có thể phân thành n - 2 tam giác bằng cách từ một đỉnh nào đó của tam giác ta vẽ các cạnh nối đến tất cả các cạnh còn lại của đa giác Khi đó diện tích đa giác bằng tổng diện tích của các tam giác con này Lấy đỉnh P1 làm chốt, lập (n-1) vector chốt vector a1=P2 – P1, a2 =
P3 – P1, an-1=Pn – P1 Các vector này dùng để tính diện tích mỗi tam giác Hai cạnh của tam giác i được xác định bởi hai vector ai và ai+1
Hình 1.5: Đa giác đơn phẳng bất kì
Nhưng nếu đa giác là lõm, thì không phải mọi đa giác đều có diện tích dương Do đó để hình thành công thức tổng quát tính diện tích một đa giác bất kỳ ta phải biến đổi công thức tính diện tích tam giác một chút
Trong công thức tính diện tích tam giác trên, thay vì dùng trị tuyệt đối của tích hai vector, ta nhân nó với un, chuẩn hướng (độ dài đơn vị) ra của
Trang 24mặt chứa đa giác (nếu đa giác nằm trong mặt xy, un là k) Vector chuẩn hướng ra của mặt chứa đa giác được xác định bằng cách tính tích hữu hướng hai vector cạnh của tam giác Nhân với chuẩn hướng ra un là để lọc ra diện tích âm và diện tích dương, nó không ảnh hưởng đến bản thân từng diện tích tam giác Lúc này diện tích tam giác được tính theo công thức:
S = (ax.by-ay.bx)/ 2 trong đó a, b là hai vector cạnh của tam giác
Khi đó diện tích của đa giác là: S =
S
Trong đó Si là diện tích (có dấu) của tam giác thứ i
Tính diện tích tam giác có 3 đỉnh là : đỉnh 1, đỉnh i, đỉnh i+1
Diện tích đa giác = Diện tích đa giác + Diện tích tam giác
Trang 25CHƯƠNG 2 QUAN HỆ HÌNH HỌC TRONG KHÔNG GIAN 3D
Để kiểm tra sự tương quan giữa các đối tượng hình học 3D, ta cần thực hiện các yêu cầu sau:
+ Với sự tương quan giữa điểm - đường thẳng: Kiểm tra xem điểm có thuộc đường thẳng hay không? Nếu điểm không thuộc đường thẳng, ta tính khoảng cách từ điểm đến đường thẳng
+ Với sự tương quan giữa điểm – mặt phẳng: Kiểm tra xem điểm có thuộc mặt phẳng hay không? Nếu điểm không thuộc mặt phẳng, ta tính khoảng cách từ điểm đến mặt phẳng đó
+ Với sự tương quan giữa đường thẳng – đường thẳng: Kiểm tra xem hai đường thẳng đồng phẳng, cắt nhau, chéo nhau, song song hay vuông góc với nhau? Thực hiện tính góc giữa hai đường thẳng, tính khoảng cách giữa hai đường thẳng chéo nhau
+ Với sự tương quan giữa đường thẳng – mặt phẳng: Kiểm tra xem đường thẳng thuộc mặt phẳng hay không? Thực hiện tính góc giữa đường thẳng và mặt phẳng nếu chúng cắt nhau, tính khoảng cách từ đường thẳng đến mặt phẳng nếu chúng song song với nhau
+ Với sự tương quan giữa mặt phẳng – mặt phẳng: Kiểm tra xem hai mặt phẳng trùng nhau, cắt nhau, chéo nhau, song song hay vuông góc với
Trang 26nhau? Thực hiện tính góc giữa hai mặt phẳng nếu chúng cắt nhau, tính khoảng cách giữa hai mặt phẳng nếu chúng song song
2.2 Tương quan giữa các quan hệ hình học 3D
2.2.1 Các phép biến hình 3D
Cơ sở toán học:
Một trong những ưu điểm quan trọng của đồ họa là cho phép dễ dàng tác động lên các đối tượng đồ họa Tất cả các biến đổi trên đồ họa máy tính đều có thể thỏa mãn một cách tương đối dễ dàng vì các hình ảnh khi đưa vào
xử lý đã được số hoá, do đó, nó có thể thay đổi dễ dàng bằng các phép biến đổi toán học Phép biến đổi hình học thường được dùng là phép biến đổi Affine
Các phép biến đổi hình học cơ sở bao gồm:
+ Phép tịnh tiến /dời hình (translation)
+ Nhà thiết kế muốn quan sát, tách rời và chỉnh sửa từng chi tiết của mẫu thiết kế
Trang 27+ Biến đổi hệ tọa độ (coordinate transformation): tạo ra một hệ tọa độ mới, sau đó tất cả các điểm của đối tượng sẽ được chuyển về hệ tọa độ đó
*
),(
*
y x g y
y x f x
và f() và g() là hai hàm tuyến tính thì được gọi là phép biến hình Affine Ta chỉ khảo sát các phép biến hình loại này Phép biến hình affine có những tính chất sau:
+ Bảo toàn đường thẳng: Ảnh của đường thẳng qua phép biến hình affine là đường thẳng
+ Bảo toàn tính song song của các đường thẳng: Ảnh của các đường thẳng song song qua phép biến hình affine cũng là các đường thẳng song song + Bảo toàn tỷ lệ về khoảng cách: Giả sử C là điểm chia đoạn AB theo tỷ lệ x
và A’, B’, C’ lần lượt là ảnh của A, B, C qua một phép biến hình affine Khi
đó C’ cũng chia đoạn A’B’ theo tỷ lệ x
Phép biến đổi affine 3D biến đổi điểm P(Px,Py,Pz) thành điểm Q:
Q = PM Với P = (Px, Py, Pz), Q = (Qx, Qy, Qz) và M là ma trận biến hình 4x4
Một số phép biến đổi Affine cơ sở, đó là: Phép tịnh tiến, phép co dãn, phép quay
Trang 280001),,(
c b a
c b a T
00
0
000
000)
,,(
c b
a c b a S
trong đó a, b, c là hệ số tỷ lệ tương ứng theo các trục tọa độ Ox, Oy, Oz
Trang 29phép quay quanh 3 trục Ox, Oy, Oz lần lƣợt là R(x,), R(y,), R(z,) với
Trang 300cossin
0
0sincos
0
000
1),(1
00
0
0cos
0sin
001
0
0sin0
cos)
,
(
1000
0100
00cossin
00sincos
- Quay quanh trục Ox: chiều quay dương là chiều quay từ trục y đến trục z
- Quay quanh trục Oy: chiều quay dương là chiều quay từ trục z đến trục x
- Quay quanh trục Oz: chiều quay dương là chiều quay từ trục x đến trục y
Nói cách khác, nếu đặt mắt nhìn thẳng vào trục tọa độ đi tới thì chiều quay dương là ngược chiều kim đồng hồ Hoặc có thể dùng quy tắc bàn tay phải: Ngón cái chỉ chiều đi tới (vector pháp tuyến), bốn ngón khum lại chỉ chiều quay dương
Trang 31- Xác định các điểm mới của đối tượng qua phép biến hình
Mô hình khung dây (Wireframe) dùng biễu diễn các đối tượng 3D đơn giản như các khối đa diện, các mặt mà có thể đơn giản hóa cách thể hiện nó như gồm tập hợp gồm các đỉnh và các cạnh nối liền các đỉnh đó Để lưu trữ
mô hình khung dây cần phải có 2 danh sách:
+ Danh sách đỉnh chứa tọa độ các đỉnh
+ Danh sách cạnh chứa các cặp đỉnh nối cạnh đó
Để vẽ các đối tượng biểu diễn bằng mô hình khung dây chúng ta chỉ cần
vẽ các cạnh trong danh sách cạnh Tuy nhiên do các đỉnh và cạnh được định nghĩa trong 3D nên để vẽ ta phải chiếu lên mặt phẳng 2D bằng các phép chiếu thích hợp :
+ Chiếu mỗi điểm lên 2D
+ Vẽ đoạn thẳng giữa hai điểm chiếu này
Phương pháp:
+ Khởi tạo danh sách đỉnh
Đưa các đỉnh đa giác vào danh sách đỉnh
+ Khởi tạo danh sách các cạnh
Đưa các cặp đỉnh nối cạnh vào danh sách cạnh
+ Khởi tạo phép chiếu
Tìm các điểm chiếu của các đỉnh
Trang 32+ Vẽ các cạnh của đối tượng
2.2.3 Quan sát vật thể 3D qua hệ tọa độ quan sát
Một đối tượng 3D được xác định bởi các tọa độ x,y,z, nhưng màn hình thì đối tượng được biểu diễn chỉ với các tọa độ x và y Để có thể biểu diễn được một đối tượng 3D lên màn hình, có hai phương pháp để thực hiện vấn
đề trên là phép chiếu song song và phép chiếu phối cảnh
a Phép chiếu song song:
Loại hình đơn giản nhất của phép chiếu song song là phép chiếu trực giao nhưng lại có rất nhiều ứng dụng trong các bản vẽ kỹ thuật Với phép chiếu song song, một đối tượng 3D được thể hiện lên màn hình bằng cách bỏ qua các tọa độ z Kết quả là một hình 2D đơn giản Như vậy, với trường hợp khối vuông, hình ảnh thể hiện trên màn hình chỉ là một hình vuông
b Phép chiếu phối cảnh:
Khác với phép chiếu song song, phép chiếu phối cảnh được hình thành
từ các tia chiếu không song song với nhau mà hội tụ tại một điểm gọi là tâm chiếu Kích thước của vật qua phép chiếu sẽ được phóng to hay thu nhỏ phụ thuộc vào khoảng cách giữa tâm chiếu và mặt phẳng chiếu (mặt quan sát) Khoảng cách giữa mắt và mặt quan sát gọi là tầm nhìn
Trang 33Trong đó:
Ox’y’z’: Hệ trục tọa độ quan sát
D: Khoảng cách giữa mặt phẳng chiếu và hệ trục quan sát
R: Khoảng cách giữa 2 gốc tọa độ
: góc giữa hình chiếu OO’trên mặt phẳng xoy và trục ox
: góc giữa OO’và mặt phẳng xOy
Mắt đặt tại gốc hệ tọa độ quan sát đặt dọc với trục O’z’hướng vào gốc O Mặt phẳng quan sát vuông góc với OO’
Khi thay đổi góc và góc sẽ dẫn đến việc thay đổi góc quan sát vật thể từ
đó việc thể hiện đối tượng được quan sát sẽ linh động hơn
Để chuyển đổi điểm P(x,y,z) trong hệ tọa độ Oxyz ra tọa độ (x0,y0,z0) trong
hệ tọa độ thứ hai dựa trên x,y,z, chúng ta sử dụng công thức sau:
(x0,y0,z0,1) = (x,y,z,1) * T với T là ma trận biến hình
Và x0 = -x sin + y cos
y0 = -x cossin - y sinsin + z cos
z0 = -x coscos - y sincos - zsin + R
Hình chiếu P’(xc, yc) của điểm P(x0 , y0 , z0): Do mặt phẳng màn hình vuông góc với trục Oz’ và tâm chiếu là O’
-sin -cos sin -coscos 0 cos -sin sin -sincos 0
0 cos -sin 0
0 0 R 1
T =
Trang 34+ Giảm góc làm quay vật thể ngược chiều kim đồng hồ
+ Tăng góc sẽ đẩy hệ quan sát lên trên làm quay vật xuống dưới
+ Giảm góc làm quay vật lên trên
2.2.4 Kiểm tra quan hệ Điểm - Đường thẳng
Cho 3 điểm A(xa, ya , za), B(xb, yb, zb ) và C(xc, yc, zc), đường thẳng d đi qua A và B
Khi đó, tọa độ vector chỉ phương của đường thẳng d là:
Trang 35Phương trình tổng quát đường thẳng d qua hai điểm A, B là hệ phương trình tương đương với hệ sau:
Viết phương trình của mặt phẳng qua C(xc, yc, zc) vuông góc với đường thẳng d qua 2 điểm A, B và có vector chỉ phương AB
= (a1, a2, a3) Phương trình mặt phẳng có dạng:
+ a3 2
) Thay t vào phương trình tham số của đường thẳng d qua A, B tìm được điểm H
Tọa độ cuả điểm cắt H(Xh, Yh,Zh):
Xh = a1(a1xa - a2ya - a3za + a1xc + a2yc + a3zc)/(a1
2
+ a2 2
+ a3 2
) + xa
Yh = a2(a1xa - a2ya - a3za + a1xc + a2yc + a3zc)/(a1
2
+ a2 2
+ a3 2
) + ya
Zh = a3(a1xa - a2ya - a3za + a1xc + a2yc + a3zc)/(a12 + a22 + a32) + za
Trang 36Khoảng cách từ điểm C đến đường d qua 2 điểm A, B:
dch = | CH | = sqrt((xc - xh)2 + (yc - yh)2 + (zc - za)2)
2.2.5 Kiểm tra quan hệ Điểm - Mặt phẳng
Cho 4 điểm A(xa, ya, za), B(xb, yb, zb ), C(xc, yc, zc) và D(xd, yd, zd) với
3 điểm A, B, C không thẳng hàng xác định một mặt phẳng đi qua 3 điểm này
Xét điểm D(xd, yd, zd) có thuộc mp(ABC) không?
Tính tích hữu hướng của 2 vector AB
Hoặc có thể theo cách viết dưới đây:
AB
x AC
= ((yb - ya).(zc - za) - (yc - ya).(zb - za), (zb - za).(xc - xa) - (zc - za).(xb - xa),
Trang 37Nếu Dt = 0 thì “Điểm D thuộc mp(ABC)”
Nếu Dt <> 0 thì “Điểm D không thuộc mp(ABC)”
Nếu Dt <> 0 thì tìm khoảng cách từ điểm D đến mp(ABC)
Viết phương trình tổng quát của mp(ABC), có 2 vector:
Nếu chúng ta đặt các hệ số a, b, c, d của phương trình mặt phẳng mp(ABC) như sau:
=(a,b,c) là pháp vector của mp(ABC)
Và phương trình tổng quát của mặt phẳng mp(ABC) là:
ax + by + cz + d = 0 Khoảng cách từ D(xd, yd, zd) đến mp(ABC)
ddmp(ABC) = abs(axd + byd + czd + d) / sqrt (a2 + b2 + c2)
Trang 38Tìm giao điểm của đường thẳng d qua D(xd, yd, zd) và vuông góc với
mp(ABC), có vector chỉ phương là pháp vector n
= (a, b, c) Phương trình tham số của đường thẳng d:
2.2.6 Kiểm tra quan hệ Đường thẳng - Đường thẳng
Cho 4 điểm A(xa, ya, za) B(xb, yb, zb), C(xc, yc, zc) và D(xd, yd, zd),
trong đó A, B thuộc đường thẳng d và C, D thuộc đường thẳng d’
Vectơ chỉ phương AB của đường thẳng d:
AB
=(xb - xa, yb - ya, zb - za)
(hay có thể viết gọn hơn AB = (a1, a2, a3))
Tính véctơ chỉ phương CD của đường thẳng d’
CD
= (xd - xc, yd - yc, zd - zc)
(hay có thể viết gọn hơn CD = (b1, b2, b3))
Viết phương trình của đường thẳng d:
Phương trình chính tắc:
(x - xa)/ a1 = (y - ya)/ a2 = (z - za)/ a3