2012-02-21 122 views
0

我知道有这个问题的其他解决方案,但我正在学习,并为此目的想了解为什么我的算法不起作用碰撞检测旋转矩形与协调数学

下面是我的溶液的工作原理:

它得到的坐标为每个矩形的4个顶点,转换,使它们相对于0,0而不是矩形起源,并且将它们分别使用这些公式旋转:

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

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

进行转换,使它们相对于它们的矩形起源

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

然后,它使用位于轴上的每个旋转顶点计算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; 

如果对于每个轴都是如此,那么存在冲突

但是,在调试过程中,我发现最小x值区域总是低于最大x值,而不管矩形的位置和大小如何?

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

+0

我怀疑一张照片可能有帮助(或者帮助某人理解,或者仅仅是为了帮助你理解自己。 ) – 2012-02-21 23:45:05

回答

0

这很好地工作,我在我的代码本身造成了一个非常小的错误,导致两组顶点在旋转后相对于第一个矩形进行平移。所以这里介绍的逻辑是稳定的,并且可以工作,前提是你不会像我那样犯下一个愚蠢的错误:D

+1

小错误是什么?请使用该信息编辑您的答案。 – jackJoe 2012-02-22 10:03:41