相关疑难解决方法(0)

两个移动四面体之间的连续碰撞检测

我的问题很简单.我有两个四面体,每个四面体都有一个当前位置,一个空间线速度,一个角速度和一个质心(实际上是旋转中心).

有了这些数据,我试图找到一个(快速)算法,它将精确地确定(1)它们是否会在某个时间点发生碰撞,如果是这种情况,(2)在它们碰撞了多长时间之后(3) )碰撞点.

大多数人会通过三角形 - 三角形碰撞检测来解决这个问题,但这会浪费一些冗余操作的CPU周期,例如在检查不同的三角形时检查一个四面体的相同边缘与另一个四面体的相同边缘.这只意味着我会稍微优化一下.没什么好担心的.

问题是我不知道任何公共CCD(连续碰撞检测)三角形 - 三角形算法,它考虑了自转.

因此,我需要一个输入以下数据的算法:

  • 三个三角形的顶点数据
  • 位置和旋转中心/质量
  • 线速度和角速度

并输出以下内容:

  • 是否有碰撞
  • 经过多长时间碰撞发生
  • 在空间的哪个点发生了碰撞

在此先感谢您的帮助.

physics collision-detection

17
推荐指数
1
解决办法
6056
查看次数

碰撞检测并保持物体上的动量

我一直在实施各种形式的简单碰撞检测,结果各不相同.我有一个相当不错的碰撞检测工作版本,但有些奇怪的行为让我无法解决.

仅供参考,我正在做一个简单的乒乓球比赛,并试图改善碰撞.我得到的问题是球在顶部或底部碰撞桨.在这些情况下,球在桨的上方(或下方)盘旋并且不移动.我猜这是因为我正在检查碰撞以及我如何改变球的移动速度.

我想实现一种区分顶部/底部和左/右碰撞的方法,但这是唯一可行的方法:

static void CheckCollision(PActor object1, PActor object2, PInput pinput)
{
    if ( CheckObjectCollision( object1, object2 ) )
    {
        AdjustMoveSpeed( object1, object2, pinput );
    }
}



static bool CheckObjectCollision(PActor object1, PActor object2)
{
    int object1LeftBound = object1.position.x;
    int object1RightBound = object1.position.x + object1.actorTextureXSize;
    int object1TopBound = object1.position.y;
    int object1BottomBound = object1.position.y + object1.actorTextureYSize;

    int object2LeftBound = object2.position.x;
    int object2RightBound = object2.position.x + object1.actorTextureXSize;
    int object2TopBound = object2.position.y;
    int object2BottomBound = object2.position.y + object2.actorTextureYSize;

    if ( object1RightBound < object2LeftBound ) …
Run Code Online (Sandbox Code Playgroud)

math sdl d

1
推荐指数
1
解决办法
418
查看次数

标签 统计

collision-detection ×1

d ×1

math ×1

physics ×1

sdl ×1