检测三角形和旋转球体之间的3D碰撞

时间:2015-04-21 21:23:12

标签: algorithm 3d geometry collision-detection

我的问题:

enter image description here

考虑一个小绿球被约束为仅在中心O的大黄色球体的表面上移动。绿色球体最初位于C0点,并且遵循命令运动,具有2个自由度。

然后,在点C1处,球体与红色物体(例如三角形)碰撞。这是一种非弹性无摩擦碰撞,基本上消除了绿球运动的一个自由度。

然而,绿色球体仍然试图遵循其命令轨迹。由于仍有一个自由度,球体的运动将被修改,并且将朝C2方向移动。

我的问题:

当绿球的运动被限制为开启时,我应该如何解决设计算法以检测绿球和红色物体之间的碰撞(特别是当物体是3D三角形时)的问题黄色的球体?

一旦发现碰撞,我怎样才能计算碰撞后绿球的残留/反应轨迹?

请注意,我知道在3D平移的情况下检测移动球体和三角形之间的3D碰撞的算法。我如何处理约束运动,例如从固定点开始以固定长度旋转?

2 个答案:

答案 0 :(得分:1)

根据平地社会,如果黄色球体是地球,绿色球体是在地球上行走的人,那么在人的上方10米处的观察者看到该人在2D平面上行走。在数学上,当考虑C1周围的无穷小距离时,黄色球体的曲率可以忽略不计,因此绿色球体的运动可以被建模为好像在平面上移动一样。具体地,运动看起来在点C1处与球体相切的平面中。

碰撞物体可以被想象为嵌入地球表面的墙壁。当人到达墙壁时,他们必须跟随墙壁。在数学上,三角形与切平面的交点在平面上形成一条线,绿球必须遵循该线。

因此,对于俯视C1点的观察者来说,情况看起来像这样 enter image description here

其中
。 P是在点C1处与球体相切的平面 。 L是由三角形与P
的交点形成的线 。深蓝色线是原始的运动方向
。浅蓝色线是新的运动方向

所以我对问题的处理方法是:

平移和旋转坐标系,以便
。 C1位于点(0,0,0)
。黄色球体的中心位于点(0,0,-r)
这意味着P是XY平面,即z = 0的平面。

确定新坐标系中三角形平面的方程式,格式为ax + by + cz + d = 0。然后,L的等式为ax + by + d = 0

新的运动方向与L平行,然后您必须旋转并转换回原始坐标系。

答案 1 :(得分:1)

使用以下技巧解决这个相切问题:将绿色球体放气到一个点(半径0),同时让黄色球体(半径R + r)和红色三角形(厚度三角形)膨胀2r和圆柱形边缘/球形角。)

接触一个原始表面的绿色球体现在被理解为属于相应的膨胀表面的绿色点。

所以你的观点最初是在膨胀的黄色球体上运行,直到它遇到膨胀三角形的表面;然后,它跟随两个表面的交点。

精确曲线取决于球体和三角形的特定相对位置,您必须考虑球体与2个平面(=>圆弧),三个圆柱体(=>复数四分之一)的可能交点曲线)和3个球体(=>圆弧),并讨论这些曲线的终点。

这一切都是分析性的,但可能很痛苦。

下面的交叉曲线显示了中心的轨迹。

enter image description here