Учитывая 2 набора точек
((x1, y1, z1), (x2, y2, z2), (x3, y3, z3)) и
((p1,q1, r1), (p2, q2, r2), (p3, q3, r3)) каждый из которых образует треугольник в трехмерном пространстве.
Как вы узнаете, пересекаются ли эти треугольники или нет?
Одно очевидное решение этой проблемы - найти уравнение плоскости, образованной каждым треугольником.Если плоскости параллельны, то они не пересекаются.
Иначе, найдите уравнение прямой, образованной пересечением этих плоскостей, используя нормальные векторы этих плоскостей.
Теперь,если эта линия лежит в обеих треугольных областях, то эти два треугольника пересекаются, в противном случае нет.
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
}
Учитывая, что я знаю, как писать вышеупомянутые функции, какие другие реализации trianglesIntersect мне следует рассмотреть?
Существуют ли более быстрые алгоритмы, решающие эту проблему?