这是我当前正在做的事情:
创建4个与2个矩形的4条边垂直的轴。由于它们是矩形,我不需要为每条边生成一个轴(法线)。
然后我循环遍历我的4个轴。
所以对于每个轴: 我获取矩形的每个角落在轴上的投影。 有两个列表(数组),其中包含这些投影。每个矩形各一个。 然后我得到每个投影和轴的点积。这返回一个标量值, 可用于确定最小值和最大值。
现在,这两个列表包含标量而不是向量。我对这些列表进行排序,以便轻松选择最小值和最大值。如果B盒的最小值>= A盒的最大值 或 B盒的最大值<= A盒的最小值,则该轴上没有碰撞,并且对象之间没有碰撞。
此时函数完成并且循环中断。
如果所有轴都不满足这些条件,则存在碰撞
希望这是正确的方法。
这里可以找到Python代码http://pastebin.com/vNFP3mAb
我遇到的问题是上面的代码不起作用。它总是检测到碰撞,即使没有碰撞。我所输入的正是代码所执行的内容。如果我漏掉了任何步骤或者对SAT算法的工作原理有误解,请告诉我。