我知道这个问题还有其他解决办法,但我正在学习,为此我想了解为什么我的算法无效
以下是我的解决方案的工作原理:
它获取每个矩形的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值,无论矩形的位置和大小如何
谁能告诉我这里有什么问题?
答案 0 :(得分:0)
这非常有效,我在代码本身中产生了一个非常小的错误,导致两组顶点在旋转后相对于第一个矩形进行平移。因此,这里提出的逻辑是可靠的,并且如果你不像我那样犯下一个愚蠢的错误,它将会起作用:D