Given 2 tập hợp các điểmTìm dù hai hình tam giác giao nhau hoặc không
((x1, y1, z1), (x2, y2, z2), (x3, y3, z3)) và
((p1, q1, r1), (p2, q2, r2), (p3, q3, r3)) mỗi hình thành một tam giác trong không gian 3D.
Bạn sẽ tìm hiểu xem các tam giác này có giao nhau hay không?
Một giải pháp rõ ràng cho vấn đề này là tìm phương trình mặt phẳng hình thành bởi mỗi tam giác. Nếu các mặt phẳng song song, thì chúng không giao nhau.
Khác, tìm ra phương trình đường thẳng được hình thành bởi giao điểm của các mặt phẳng này bằng cách sử dụng vectơ bình thường của các mặt phẳng này.
Bây giờ, nếu dòng này nằm ở cả hai vùng tam giác, thì hai tam giác này giao nhau, nếu không thì sẽ không.
trianglesIntersect(Triangle T1, Triangle T2)
{
if(trianglesOnParallelPlanes(T1, T2))
{
return false
}
Line L1 = lineFromPlanes(planeFromTriangle(T1), planeFromTriangle(T2))
if(lineOnTriangle(T1, L1) AND lineOnTriangle(T2, L1))
{
return true
}
return false
}
Vì tôi biết cách viết các chức năng ở trên, tôi nên xem xét những triển khai nào khác của tam giácIntersect?
Có các thuật toán nhanh hơn để giải quyết vấn đề này không?
Thử hỏi trên [math.stackexchange.com] (http://math.stackexchange.com) thay thế. SO là cho các câu hỏi lập trình. – PengOne
http://www.applet-magic.com/trintersection.htm – Jacob
Tôi thất vọng vì câu hỏi này đã bị đóng. Đây là một vấn đề lập trình nổi tiếng mà cây trồng lên trong đồ họa máy tính, ray-truy tìm, trò chơi video. Tôi đã tự mình lập trình nhiều lần. Làm thế nào nó có thể được off-topic ở đây? –