1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tìm hiểu các quan hệ hình học 2d, 3d và xây dựng ứng dụng (2014)

76 156 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 76
Dung lượng 4,22 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ý 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 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

LỜ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 3

LỜ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 4

MỤ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 5

2.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 6

DANH 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 7

Hì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 8

MỞ ĐẦ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 9

ngạ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 10

hiệ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 11

CHƯƠ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|=a1b1a2b2/ (a12a22)(b12b22)

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 13

Hì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 15

3: 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 16

Phươ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 18

và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 21

Duyệ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 22

Giả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 24

mặ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 25

CHƯƠ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 26

nhau? 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 28

0001),,(

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 29

phép quay quanh 3 trục Ox, Oy, Oz lần lƣợt là R(x,), R(y,), R(z,) với 

Trang 30

0cossin

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 33

Trong đó:

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 cossin - y sinsin + z cos

z0 = -x coscos - y sincos - 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 -coscos 0 cos -sin sin -sincos 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 35

Phươ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 36

Khoả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 37

Nế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 38

Tì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

Ngày đăng: 16/04/2018, 15:16

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w