Если у вас есть треугольник p0, p1, p2 (трехкомпонентные векторы) и сегмент x, y, вы можете легко проверить, пересекает ли этот сегмент треугольник, решив это матричное линейное уравнение:
((p1-p0) (p2-p0) (xy)) (ABC) T = x-p0
, где ABC - скалярные коэффициенты, T - матрица транспонирования (то есть, (ABC) T -столбец из трех переменных).((p1-p0) (p2-p0) (xy)) означает здесь матрицу 3x3 с соответствующими векторами в качестве столбцов, а x-p0 также является столбцом из трех компонентов.
Вы решаете эту системуи найдите A, B и C. Если A> 0, B> 0, A + B <1 и 0 <C <1, то есть пересечение. </p>
Имея два треугольника в трехмерном пространстве, вы можете проверитьесли они пересекаются, проверяя стороны первого треугольника против второго, а затем стороны второго треугольника против первого.Надеюсь, это поможет.
Обновление: немного изменила формулу.
Обновление2: если уравнение не может быть решено, то сегмент находится в той же плоскости, что и треугольник.Это делает задачу еще проще: переведите ваши координаты в эту плоскость и найдите, пересекает ли отрезок треугольник в двухмерном пространстве ...
Update3: на самом деле условие было неверным: A и B должны быть больше 0но их сумма A + B должна быть меньше 1.