Giả sử bạn có đa giác A có điểm A1, B2, A3, ..., AN và đa giác B có điểm B1, B2, B3, ..., BN.
gì bạn có thể làm là để mô tả một dòng từ AX điểm đến BX cho mỗi sự kết hợp có thể (A1 & B1, A1 & B2, ... AN & BN).
Dòng như vậy có thể được mô tả theo định dạng tham số: SomePoint = InicialPoint + Hướng * t và sẽ có thể là ứng cử viên cho một "dòng tách biệt". Giữ nó!
Bây giờ, những gì bạn cần làm là MÔ TẢ MỘT vector KHÁC từ mỗi điểm của mỗi đa giác đến dòng ứng cử viên này. Mỗi dòng đó sẽ có vector hướng của nó.
Nếu sản phẩm chéo của vectơ hướng của mỗi dòng với vectơ hướng của ứng cử viên có cùng hướng (Z-positive hoặc Z-negative), có nghĩa là các điểm đó nằm ở cùng một bên của đường tách (vẫn là ứng viên).
Bây giờ, hãy kiểm tra tất cả các dòng bạn đã mô tả cho từng điểm của mỗi đa giác. Bạn có thể tìm ra nếu tất cả các điểm của đa giác A là ở một bên và tất cả các điểm trong đa giác B là ở phía bên kia ... sau đó bạn tìm thấy dòng bạn muốn. Nếu không, bạn phải thử một dòng ứng viên tiếp theo (AX-BX). Nếu bạn không tìm thấy bất kỳ sự kết hợp nào với tất cả các dòng ứng cử viên có thể, điều đó có nghĩa là bạn có một giao điểm giữa các đa giác.
Tôi không chắc đó là thuật toán tốt nhất/nhanh nhất nhưng tôi chắc chắn nó hoạt động.
Nguồn
2013-05-05 18:38:59