Tải bản đầy đủ (.pdf) (76 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.22 MB, 76 trang )

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

LÊ THỊ THU HƢƠNG

TÌM HIỂU CÁC QUAN HỆ HÌNH HỌC 2D, 3D
VÀ XÂY DỰNG ỨNG DỤNG

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành: Tin học

Ngƣời hƣớng dẫn khoa học:
TS. TRỊNH ĐÌNH VINH

HÀ NỘI - 2014


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


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


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


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


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


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


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


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.
3. Phạm vi nghiên cứu
Các quan hệ hình học 2D, 3D trong đồ họa máy tính là một vấn đề

rộng và tƣơng đối phức tạp. Vì vậy, trong khóa luận này, em chỉ đi tìm hiểu
về các đối tƣợng hình học cơ bản, cơ sở toán học của các quan hệ hình học
2D, 3D, sự tƣơng quan giữa các đối tƣợng hình học và xây dựng hệ thống
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
2


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.

3


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:

4


Đâ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

và cạnh thứ ba là a-b.
a


a-b

b

Hình 1.1: Tam giác tạo bởi 2 vector a và b
Từ định nghĩa tích vô hƣớng của vector a = (a1,a2) và b = (b1,b2) là

a.b= |a||b| cos (  ) với

 là góc giữa vector a và vector b.

Từ biểu thức giải tích của tích vô hƣớng:
a.b = a 1 b 1 + a 2 b 2
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
Cơ sở toán học:
Cho hai đoạn thẳng, xác định chúng có cắt nhau không, nếu có thì tìm
giao điểm. Giả sử đƣờng 1 từ a đến b và đƣờng 2 từ c đến d nhƣ trong hình
vẽ, hai đoạn thẳng có thể bố trí theo nhiều cách khác nhau: hoặc chéo nhau,
hoặc cắt nhau tại một điểm, hoặc song song, hoặc trùng nhau.
5


b

d

d

b


b
d

1

b

2

c

d

a

a
c

a

c

a
c

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 (t) = ax + (bx – ax)t
(1.1)


Y1 (t) = ay + (by – ay)t

x2 (u) = cx + (dx – cx)u

(1.2)

y2 (u) = cy + (dy – cy) u
Ta gọi các đƣờng thẳng chứa các đoạn thẳng ab và cd là các đƣờng
cha, đây là các đƣờng vô hạn. Trƣớc hết, ta xét hai đƣờng “cha” có giao nhau
không, sau đó xem giao điểm có thuộc cả hai đoạn thẳng không? Nếu các
đƣờng “cha’ giao nhau, ta có giá trị to và uo sao cho:
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:

với

D. to = (cx - ax) (dy - cy) - (cy - ay)(dx - cx)

(1.4)

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.

6


- 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 t o
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)

(1.6)

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

(1.7)

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)

(1.8)

Đƣờ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ừ t c 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.
7


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.
{
-Tính mẫu số D;
- Nếu D < > 0
Tính t0,u0;
Nếu t0 thuộc [0,1] và u0 thuộc [0,1]

+ Tính giao điểm M
+ Return 1;
Ngƣợc lại Return 2;

//2 đoạn thẳng cắt nhau tại M
//2 đoạn thẳng không cắt nhau

- 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
}
1.2.3. Vẽ đa giác
Cơ sở toán học:
Đa giác là tập hợp các đoạn thẳng liên tiếp cùng nằm trong mặt phẳng
khép kín. Một đa giác có ít nhất 3 cạnh. Nhƣ vậy, đa giác đơn giản nhất là
tam giác.
8


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.
9


- 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
Ngƣợc lại
Nếu y > Max(yi,yi+1) hay yThì Px không cắt cạnh Ci
Ngƣợc lại
Nếu x ≤ Min (xi,xi+1)
Thì Py cắt cạnh Ci
Ngƣợc lại
Xét tọa độ giao điểm (y0,x0) của Px với cạnh Ci
Nếu x ≥ x0 thì Px không cắt Ci
}
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
10


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)
11


- 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 số điểm cắt <> 0 thì
{
Thêm tọa độ điểm A vào đầu danh sách
Thêm tọa độ điểm B vào cuối danh sách
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 hết danh sách
12


}
-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
Cơ sở toán học:
Giải thuật này cho phép clip bất kỳ một đa giác vào 1 đa giác. Nó
cũng cho phép hình thành sự giao, hội của 2 đa giác. Chúng ta bắt đầu bằng
ví dụ minh họa trong hình sau. Ta liệt kê những đỉnh theo thứ tự từ trái sang
phải, theo chiều kim đồng hồ.
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).
a
C
A
5
d

c

6
3
4

B

1

2
b
D


Hình 1.3: Đa giác bất kì
Dựa vào hình vẽ trên, ta có:
SUBJ_LIST:

a, 1, b, 2, c, 3, 4, d, 5, 6

CLIP_LIST:

A, 6 ,3 , 2, B, C, D, 4, 5
13


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

SUBJ_LIST:

start
t

SUBJ_LIST:


A

a

restart
1

6

b

3

2

2

a

B

1

3

4

C

D


d

5

4

6

5

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
sẽ chỉ ra là tất cả chúng đã đƣợc duyệt, quá trình chấm dứt.
Cách thức để hiện thực quá trình xử lý này là xây dựng hai danh sách
SUBJ_LIST: a, 1, b, 2, c, 3, 4, d, 5, 6
CLIP_LIST : A, 6, 3, 2, B,1, C, D, 4 , 5
Trong đó, việc duyệt mỗi đa giác và liệt kê những đỉnh và điểm giao phải
theo thứ tự đƣợc gặp.
14


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ừ Pi tới Pi+1.
}
-Bước 3: Duyệt danh sách SUBJ_LIST và CLIP_LIST.
Vòng lặp

(1)

Vòng lặp (2)
- 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 .
15


- 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 a i và ai+1.
P2

P3

P4

P1
P6

P5

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
16



mặt chứa đa giác (nếu đa giác nằm trong mặt xy, u n 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 u n 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.
N 2

Khi đó diện tích của đa giác là: S =

S
i 1

i

Trong đó Si là diện tích (có dấu) của tam giác thứ i.
Phương pháp:
- i bắt đầu = 2
- Diện tích đa giác = 0
- Lặp lạ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
Inc (i,1)
}
Cho đến khi i= N-1
- Diện tích đa giác = Abs (diện tích đa giác)


17


CHƢƠNG 2
QUAN HỆ HÌNH HỌC TRONG KHÔNG GIAN 3D

2.1.

Các đối tƣợng hình học 3D
Hình học 3D gồm ba đối tƣợng hình học cơ bản: điểm, đƣờng thẳng,

mặt phẳng.
Các đối tƣợng hình học trong không gian 3D kể trên có sự 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 – mặt phẳng, đƣờng thẳng – đƣờng thẳng, đƣờng thẳng – mặt phẳng và
mặt phẳng – mặt phẳng.
Để 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
18


×