带坐标数学的旋转矩形碰撞检测

时间:2012-02-21 20:51:45

标签: algorithm coordinates collision-detection game-physics

我知道这个问题还有其他解决办法,但我正在学习,为此我想了解为什么我的算法无效

以下是我的解决方案的工作原理:

它获取每个矩形的4个顶点的坐标,将它们相对于0,0而不是矩形的原点进行平移,并使用以下公式分别旋转它们:

rotatedX = unrotatedX * cos( radiansOfCounterClockwiseRotation ) - 
           unrotatedY * sin( radians ); 

rotatedY = unrotatedX * sin( radians ) + y * cos( radians ); 

并将它们翻译成相对于矩形的起源

然后计算轴的x和y值,通过从右上顶点减去左上和右下顶点的坐标来比较分离,总共4轴(每对平行1对) 2个矩形的边缘)

然后使用以下公式计算每个旋转顶点的x值,该顶点位于轴上:

x = -( -( axis.x / axis.y ) * vertice.x - vertice.y ) / 
     ( axis[i].y / axis[i].x + axis[i].x / axis[i].y ); 

是通过获得轴线与垂直于穿过顶点的轴的直线之间的交点而得到的

它比较每个轴的这些值并检查是否:

maxXValueForRect0 >= minXValueForRect1 AND minXValueForRect0 <= maxXValueForRect1; 

如果每个轴都为真,则发生碰撞

但是,在调试过程中,我发现min x值区域始终低于max x值,无论矩形的位置和大小如何

谁能告诉我这里有什么问题?

1 个答案:

答案 0 :(得分:0)

这非常有效,我在代码本身中产生了一个非常小的错误,导致两组顶点在旋转后相对于第一个矩形进行平移。因此,这里提出的逻辑是可靠的,并且如果你不像我那样犯下一个愚蠢的错误,它将会起作用:D