Я перестраиваю свой алгоритм GJK, но у меня возникают проблемы с треугольными гранями для моего тетраэдра. Тем не менее, мои точечные и краевые тесты завершены.
Я хочу проверить, находится ли начало координат за пределами тетраэдра и ближе всего к определенной треугольной грани.
До сих пор мой метод состоял в том, чтобы вычислить нормали треугольной грани и выполнить серию тестов точечного произведения, чтобы определить, находится ли источник снаружи и ближе к этой грани. У моего метода есть одна главная проблема: я не могу гарантировать, что мои нормали обращены наружу. Посмотрите на этот рисунок, который я сделал для лучшего описания:
Как вы можете видеть один и тот же треугольник, в зависимости от упорядочения вершин требуется разное «упорядочение» перекрестных произведений для получения нормалей, обращенных наружу. Есть ли способ для меня, чтобы они смотрели наружу? Если нет, есть ли лучший метод для проверки этих лиц? Вот пример моего процесса:
if (dot(ABC, AO) > 0) {
if (dot(ACD, AO) <= 0) {
if (dot(ADB, AO) <= 0) {
if (dot(DCB, DO) <= 0) {
// closest to face of ABC
}
}
}
}
}
Ссылка:
ABC, ACD, ADB, DCB = нормали треугольной грани (как вы можете видеть, я предполагаю, что на рисунке изображен «левый» треугольник)
AO = вектор от A до источника
DO = вектор из А в начало