如何在以下物理模拟中纠正浮点错误:
- 原点(x,y,z),
- 施加力后所需的点 (x', y', z')。
- 共享边 BC 的两个三角形 (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 线,以至于它无法与任何一个三角形发生碰撞,即使从技术上讲它应该总是与一个或另一个发生碰撞,因为他们有共同的优势。当这种情况发生时,该点正好穿过两个共享边三角形之间。我已经用(!)标记了代码的一行,因为我相信那是我应该做出改变的地方。
在非常有限的情况下有效的一种想法是跳过边缘测试。有效地将三角形变成平面。这仅在我的网格是凸包时有效,但我计划创建凸形。
我专门使用点积和三角形法线进行所有前后测试。