Raycasting kiểm tra giao nhau giữa đa giác và đường thẳng Raycasting kiểm tra giao nhau giữa đa giác và đường thẳng Raycasting kiểm tra giao nhau giữa đa giác và đường thẳng Raycasting kiểm tra giao nhau giữa đa giác và đường thẳng Raycasting kiểm tra giao nhau giữa đa giác và đường thẳng Raycasting kiểm tra giao nhau giữa đa giác và đường thẳng
Trang 1Ray Casting Kiểm tra giao nhau giữa đa giác và đường thẳng
Võ Đình Phong
Khoa Công nghệ thông tin
Đại học Khoa học tự nhiên TP.HCM
Seminar lần I
Trang 2Nội dung
1 Bài toán
2 Kiến thức cơ sở
3 Thuật toán
4 Ví dụ
Trang 3Phát biểu đề bài
Trong không gian <2 cho các đa giác lồi đôi một không giao nhau, và một điểm A nằm ngoài tất cả các đa giác
Nối A với tất cả các đỉnh của các đa giác để tạo thành các đoạn thẳng
Với mỗi đoạn thẳng, xác định nó có giao với ít nhất một đa giác hay không?
Trang 4Hình dung bài toán
Trang 5Đường thẳng, đoạn thẳng, tia
Đoạn thẳng: giới hạn bởi 2 điểm đầu mút, vô hướng Đường thẳng: không giới hạn, vô hướng
Tia: có điểm gốc, hữu hướng
l
~t
Trang 6Vector pháp tuyến
Cho vector ~a = (ax, ay), ta có vector ~a⊥= (−ay, ax) vuông góc với ~a theo ngược chiều kim đồng hồ
~a
~a ⊥
−~a ⊥
Trang 7Phương trình đường thẳng dạng tham số
Phương trình đường thẳng L(t) có A ∈ L(t), vector chỉ phương ~c,
và tham số thực t Nếu ~c = ~AB thì đoạn thẳng ¯AB được xác định với t ∈ [0, 1]
A
B
t = 0
t = 1
t > 0
t < 0
x
y
~ c
L(t) = A + ct
Trang 8Giao của hai đường thẳng
Cần tìm giá trị thit tại giao điểm?
Vị trí của giao điểm là L(thit) = A + ~cthit
Phương trình sau thỏa mãn ~n · (A + ~cthit − B) = 0 Đáp án thit =~n·(B−A)~n·~c
A
~ c
B
~ n
hit point
Trang 9Vector pháp tuyến VS vector chỉ phương
~n · ~c > 0: tia L(t) về cùng một phía với ~n
~n · ~c = 0: tia L(t) song song với ~n
~n · ~c < 0: tia L(t) “đối đầu” với ~n
~
Trang 10Bài toán tìm giao điểm
Tia L(t) giao với đa giác P tại đâu?
Với ràng buộc P lồi, L(t) cắt P tại hai điểm với “điểm vào” tại tin và “điểm ra” tại tout
Áp dụng công thức tính thit cho tin và tout
Nếu tin< tout: L(t) giao P
Nếu tin>= tout: L(t) không giao P
P 0
P 1
P 2
~ n
A
~ c
Trang 11Thuật toán kiểm tra giao nhau
tin← 0
tout ← 1 foreach Li ∈ P
thit ← GetHit(L(t), Li)
if ~nVi · ~cL(t)< 0
tin← max(tin, thit) elseif ~nVi · ~cL(t)> 0
tout ← max(tout, thit) else return 0
endif
if tin> tout
return 0 endif
Trang 12Ví dụ
L0
L1
L2
L3
L4
L5
3.4
0.83
0.2
C
1
0 A
0.28