Cách giải này cần dùng phép chia nên không chính xác khi tử số gần bằng 0... 25.9.2004 Chương 11: Giao điểm của hai đoạn thẳng 8 Xác định hai đoạn thẳng có cắt nhau không tiếp – Định lý:
Trang 1Hình Học Tính Toán
Trang 225.9.2004 Chương 11: Giao
điểm của hai đoạn thẳng
2
Tính chất của đoạn thẳng
x3 = α x1 + (1 − α) x2
y3 = α y1 + (1 − α) y2
0 ≤ α ≤ 1
– Đoạn thẳng có hướng p1p2 là đoạn thẳng p1p2 được định hướng từ p1
Trang 3Tích chéo
ª Định nghĩa Tích chéo của hai vectors p1 = (x1,y1) và p2 = (x2 ,y2) là
đối với (0, 0)
p1
p2
(0,0)
p1
p2
(0,0)
1 2 2
1
2 1
2
1 2
y x y
x
y y
x
x p
p
−
=
=
×
Trang 425.9.2004 Chương 11: Giao
điểm của hai đoạn thẳng
4
Tích chéo (tiếp)
x
y
p1
p2
(0,0)
p
x
y
(0,0)
vectơ nằm ngược chiều
kim đồng hồ từ p
vectơ nằm theo chiều
kim đồng hồ từ p
p1 × p2 là diện tích của hình bình hành
Trang 5Tích chéo (tiếp)
p0→p2
từ p0→p2
p0
p1
p2
p0
p1
p2
ngược chiều
kim đồng hồ theo chiềukim đồng hồ
Trang 625.9.2004 Chương 11: Giao
điểm của hai đoạn thẳng
6
Xác định hai đoạn thẳng có cắt nhau không
không?
Hai cách giải quyết
điểm cắt (nếu có) Cách giải này cần dùng phép chia nên không chính xác khi tử số gần bằng 0
Trang 7Xác định hai đoạn thẳng có cắt nhau không (tiếp)
p2
p1
p2
p1
đt p1p2 nằm hai bên
đường thẳng L
đt p1p2 không nằm hai bên
đường thẳng L
p2
p1
L
Trang 825.9.2004 Chương 11: Giao
điểm của hai đoạn thẳng
8
Xác định hai đoạn thẳng có cắt nhau không (tiếp)
– Định lý: Hai đoạn thẳng cắt nhau nếu và chỉ nếu một trong các
điều kiện sau (hoặc cả hai) là đúng
kia
trên đoạn thẳng kia
a
b Đoạn thẳng a nằm hai bên đường
thẳng chứa b, và đoạn thẳng b nằm hai bên đường thẳng chứa a
Trang 9Xác định hai đoạn thẳng có cắt nhau không (tiếp)
p2
p1
p3
p4
(p4 − p1) × (p2 − p1) > 0
(p3 − p1) × (p2 − p1) < 0
p4
p1
p3
p2
(p4 − p1) × (p2 − p1) < 0
(p3 − p1) × (p2 − p1) < 0
Các tích chéo (p3 − p1) × (p2 − p1)
và (p4 − p1) × (p2 − p1) có dấu
khác nhau, do đó đt p3 p4 nằm hai
bên đường thẳng chứa đt p1 p2 (và ngược lại)
Các tích chéo (p3 − p1) × (p2 − p1)
và (p4 − p1) × (p2 − p1) có cùng
dấu, do đó đt p3 p4 không nằm hai
bên đường thẳng chứa đt p1 p2 (và ngược lại)
Dùng tích chéo để xác định một đoạn thẳng có nằm hai bên một đường thẳng hay không.
Trang 1025.9.2004 Chương 11: Giao
điểm của hai đoạn thẳng
10
Xác định hai đoạn thẳng có cắt nhau không (tiếp)
p1
p3
p4
p2
(p4 − p1) × (p2 − p1) = 0
(p3 − p1) × (p2 − p1) < 0
(p4 − p1) × (p2 − p1) = 0
(p3 − p1) × (p2 − p1) = 0
p1
p3 p2
p4
p1
p2 p3
p4
Trang 11Xác định hai đoạn thẳng có cắt nhau không (tiếp)
về FALSE nếu chúng không cắt nhau
S EGMENTS -I NTERSECT(p1, p2, p3, p4)
1 d1 ← D IRECTION(p3, p4,p1)
2 d2 ← D IRECTION(p3, p4,p2)
3 d3 ← D IRECTION(p1, p2, p3)
4 d4 ← D IRECTION(p1, p2, p4)
5 if ((d1 > 0 and d2 < 0) or (d1 < 0 and d2 > 0)) and
((d3 > 0 and d4 < 0) or (d3 < 0 and d4 > 0))
6 then return TRUE
(xem tiếp slide tới)
Trang 1225.9.2004 Chương 11: Giao
điểm của hai đoạn thẳng
12
Xác định hai đoạn thẳng có cắt nhau không (tiếp)
(tiếp)
7 elseif d1 = 0 and O N -S EGMENT(p3, p4,p1)
8 then return TRUE
9 elseif d2 = 0 and O N -S EGMENT(p3, p4,p2)
10 then return TRUE
11 elseif d3 = 0 and O N -S EGMENT(p1, p2, p3)
12 then return TRUE
13 elseif d4 = 0 and O N -S EGMENT(p1, p2, p4)
14 then return TRUE
15 else return FALSE
Trang 13Xác định hai đoạn thẳng có cắt nhau không (tiếp)
D IRECTION(p i , p j , p k )
1 return (p k − p i ) × (p j − p i )
O N -S EGMENT(p i , p j , p k )
1 if min(x i , x j ) ≤ x k ≤ max(x i , x j ) and min(y i , y j ) ≤ y k ≤ max(y i , y j )
2 then return TRUE
3 else return FALSE