我正在编程一个C++碰撞检测在我的游戏,我试图提出一个算法:
我有一个胶囊定义为两个中心点(c1,c2),长度和半径。然后我定义了一条有两点的射线(r1,r2)。我已经知道它们相交了我只需要找到胶囊(H1-H2)中射线的内部提前谢谢你的帮助。

最佳答案

首先让我们看一张图表作为参考:
algorithm - 胶囊-射线(线段)交点,二维-LMLPHP
计算H1H2的步骤如下:
计算光线R与直线之间的交点(如果有的话)
P1P2。我们只对说谎的十字路口感兴趣
P1P2内部类似地,对于P3P4。从圆心,P1P4以及一些向量数学可以很容易地计算出C1C2的点。例如P1 = C1 + r*nC,其中nC是从C1C2的单位向量的正常值(CCW)这个
answer打开,提供必要的数学计算,以确定
交叉点存在于两个线段之间,如果是,计算参数h
在这里,H=R1+h(R2-R1)是一个交点此步骤可以生成0、1或2个有效的H值,具体取决于光线是否与hP1P2中的任何一个或两者相交。
计算光线和两个光线之间的交点(如果有的话)
圈子。同样,soanswer提供了
射线到圆的交叉点。每个圆可以产生0、1或2
交叉点,再一次用参数表示。
如果步骤1和2没有生成有效的P3P4值,则光线不会与胶囊相交。否则,计算hhMin,所有有效的最小和最大参数值
步骤1和2中确定的交叉口注意,在光线与其中一个圆相切且不相交的情况下,有可能hMax。现在可以将所需的交点计算为hMin==hMaxP1P2
恐怕我选择的语言是Java而不是C++,但希望你会发现我把这些代码(IDEOne)放在一起作为参考。请注意,在计算过程中没有努力处理由P3P4值舍入引起的健壮性问题。

关于algorithm - 胶囊-射线(线段)交点,二维,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52460308/

10-16 21:57