Ответ 1
Посетите эту таблицу алгоритмов геометрического пересечения, предоставленную realtimerendering.com, посмотрите на запись для пересечений треугольников и треугольников и следуйте рекомендациям, например, Christer Ericson, Обнаружение столкновений в реальном времени, стр. 172. (Книга, которую я рекомендую высоко.)
Основная идея проста. Если два треугольника пересекаются, то либо два ребра одного треугольника пересекаются с другим (левая конфигурация на диаграмме ниже), либо один край каждого треугольника пересекает другую (правая конфигурация).
Итак, выполните шесть тестов пересечения сегментов треугольника и посмотрите, найдена ли какая-либо из этих конфигураций.
Теперь вы спрашиваете, как вы выполняете тест пересечения сегментов/треугольников? Ну, это легко. Посетите эту таблицу алгоритмов геометрического пересечения, посмотрите на запись для пересечения сегментов линии (луча)/треугольника и следуйте ссылкам...
(Важно отметить, что простой тест, описанный выше, неправильно обрабатывает копланарные треугольники. Для многих приложений это не имеет значения: например, при обнаружении столкновения между сетками треугольников копланарные случаи неоднозначны, поэтому неважно, какой результат будет возвращен. Но если ваше приложение является одним из исключений, вам нужно проверить это как особый случай или прочитать в Ericson для некоторых других методов, например, метод разделительной оси или Tomas Möller метод перекрытия интервалов.)