Как исправить плавающую ошибку точки в следующем физическом моделировании:Point-треугольник Столкновение обнаружение в 3D
- исходной точке (х, у, г),
- искомой точки (х», у ', z') после применения сил.
- Два треугольника (A, B, C) и (B, C, D), которые разделяют края до н.э.
Я использую этот метод для обнаружения столкновения:
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, что она не сталкивается ни с одним треугольником, хотя технически она всегда должна сталкиваться с тем или иным, поскольку они разделяют край. Когда это происходит, точка проходит прямо между двумя треугольниками разделения границ. Я отметил одну строку кода (!), потому что я считаю, что именно там я должен внести изменения.
Одна из идей, которая работает в очень ограниченных ситуациях, - это пропустить проверку границ. Эффективное превращение треугольников в плоскости. Это работает только тогда, когда мои сетки являются выпуклыми корпусами, но я планирую создавать выпуклые формы.
Я специально использую точечный продукт и нормали треугольника для всех проверок передних задних частот.
Это хороший момент, хотя «равный» в арифметике с плавающей запятой вряд ли можно на что рассчитывать. – shoosh 2008-09-19 04:16:21