Как исправить ошибку с плавающей запятой в следующем физическом моделировании:
- Исходная точка (x, y, z),
- Желаемая точка (x ', y', z ') после приложения сил.
- Два треугольника (A, B, C) и (B, C, D), которые разделяют ребро BC
Я использую этот метод для обнаружения столкновений:
For each Triangle
If the original point is in front of the current triangle, and the desired point is behind the desired triangle:
Calculate the intersection point of the ray (original-desired) and the plane (triangle's normal).
If the intersection point is inside the triangle edges (!)
Respond to the collision.
End If
End If
Next Triangle
Проблема, с которой я сталкиваюсь, заключается в том, что иногда точка попадает в серую область математики с плавающей запятой, где она находится так близко к линии BC, что она не может столкнуться ни с одним из треугольников, хотя технически она всегда должна сталкиваться с одним или другой, так как они имеют преимущество. Когда это происходит, точка проходит прямо между двумя ребрами, разделяющими ребра. Я пометил одну строку кода (!) , потому что я считаю, что именно здесь я должен внести изменения.
Одна идея, которая работает в очень ограниченных ситуациях, - это пропустить граничное тестирование. Эффективно превращая треугольники в плоскости. Это работает только тогда, когда мои сетки имеют выпуклую оболочку, но я планирую создавать выпуклые формы.
Я специально использую скалярное произведение и треугольные нормали для всех моих тестов спереди и сзади.