找出一个轴对齐的矩形是否与一个旋转的矩形相撞,最有效的方法是什么?每个类都有一个位置向量和一个大小向量,旋转的类有一个角度值。
答案 0 :(得分:5)
您想使用分离轴定理(SAT)。通常它在3d中使用,但它很好地折叠到2d。由于您有一个特殊情况,您需要考虑的唯一轴是矩形的4个主轴:
[ 1,0 ] [ 0,1 ] [ sin(theta), cos(theta) ] [ -cos(theta), sin(theta) ]
要检查轴,请计算每个顶点与该轴的点积。然后检查2组值的最小值和最大值,看它们是否重叠。如果4轴中的任何一个给出不重叠的范围,则矩形不重叠(您已找到分离轴)。如果所有4轴显示重叠,则矩形相交。
这是最近关于同一问题的SO问题: Separating Axis Theorem and Python
这是维基百科的文章
答案 1 :(得分:3)
最有效的方法是创建一个更大的矩形,它围绕旋转的矩形,并根据边界矩形进行碰撞检测。
这意味着边界矩形碰撞不代表“命中”,而是值得进一步调查的条件。调查方法根据您可以做出的假设而有所不同。在最简单的情况下,您可以使用AND像素检查真实输出。
然后你可以使用这个“确认”命中来用更复杂的模型进行分析;一个考虑到碰撞的角度,速度,几何形状和弹性(或者你感兴趣的任何东西)。
存在更复杂的模型,但通常更复杂的模型需要更多的计算能力。通过设置一系列快速,快速的检查来节省计算能力更容易,并且只为他们将要付出代价的情况带来繁重的计算周期。