Biorąc 2 zbiór punktówZnajdź czy dwa trójkąty przecinają się ani nie
((x1, y1, z1), (x2, y2, z2), (x3, y3, z3)) i
((p1, q1, r1), (p2, q2, r2), (p3, q3, r3)), z których każdy tworzy trójkąt w przestrzeni 3D.
W jaki sposób dowiesz się, czy te trójkąty przecinają się, czy nie?
Jednym z oczywistych rozwiązań tego problemu jest znalezienie równania płaszczyzny utworzonej przez każdy trójkąt. Jeśli płaszczyzny są równoległe, nie przecinają się.
W innym przypadku, poznaj równanie linii utworzonej przez przecięcie tych płaszczyzn za pomocą normalnych wektorów tych płaszczyzn.
Teraz, jeśli linia ta leży w obu trójkątnych obszarach, to te dwa trójkąty przecinają się, w przeciwnym razie nie.
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
}
Biorąc pod uwagę, że wiem, jak napisać powyższe funkcje, jakie inne implementacje trianglesIntersect powinienem wziąć pod uwagę?
Czy są szybsze algorytmy, które rozwiązują ten problem?
Spróbuj zapytać na [math.stackexchange.com] (http://math.stackexchange.com) zamiast. SO służy do programowania pytań. – PengOne
http://www.applet-magic.com/trintersection.htm – Jacob
Jestem rozczarowany, że to pytanie zostało zamknięte. Jest to dobrze znany problem programistyczny, który pojawia się w grafice komputerowej, ray-tracing, grach wideo. Zaprogramowałem to sam nie raz. Jak tu może być off-topic? –