Xác định giao điểm giữa hai đoạn thẳng

Một phần của tài liệu Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D,3D (Trang 25 - 28)

III. CÁC THUẬT TỐN KIỂM TRA SỰ TƯƠNG QUAN GIỮA CÁC ĐỐI TƯỢNG HÌNH HỌC

3. Xác định giao điểm giữa hai đoạn thẳng

Cơ sở tốn học:

Cho hai đoạn thẳng, xác định chúng cĩ cắt nhau khơng, nếu cĩ 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.

Phương trình tham số cho mỗi đường như sau: x1 (t) = ax + (bx - ax) * t

y1 (t) = ay + (by - ay) * t và

x2 (u) = cx + (dx - cx) * u

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 Khử uo, ta được:

D* to = (cx - ax) * (dy - cy ) - (cy - ay) * (dx - cx) với D = (bx - ax) * (dy - cy) - ( by - ay) * (dx - cx)

Cĩ hai trường hợp cơ bản, D bằng hay khác 0. • D khác zero a b c d d c b a b a d c a b c d 1 2 (1) (2) (3) (4) (5)

Nếu D khác 0, ta tính to từ phương trình (4). Nếu to nằm ngồ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 (3) để tính uo. Nếu uo nằm trong đoạn [0, 1] thì chắc chắn cĩ giao điểm, và dùng phương trình (1) và (2) để tính.

• D bằng zero

Nếu D bằng 0, từ phương trình (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) 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. 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.

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

Thiết kế hệ thống kiểm tra các quan hệ hình học trang 27

(6)

(7)

Giải thuật:

-Tính Mẫu số D; -Nếu D < > 0

. Tính to,uo;

. Nếu to thuộc [0,1] và uo thuộc [0,1] + Tính giao điểm M

+ Return 1; ( 2 đoạn thẳng cắt nhau tại M) Ngược lại Return 2; (2 doạ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 doạ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 )

Một phần của tài liệu Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D,3D (Trang 25 - 28)

Tải bản đầy đủ (DOC)

(69 trang)
w