确定SAT分离轴定理中的边法线

时间:2010-10-08 22:33:56

标签: algorithm vector normalization collision-detection

SAT算法要求您找到每个形状的每条边的法线(基本上是垂直于边矢量的矢量)以用作分离轴。这可以非常简单地完成......

(x,y)=> (-y,X)

OR

(x,y)=> (Y,-X)

哪个应该用在SAT算法中?这基本上是应该使用左手正常还是右手法线的问题。它会有所作为吗?应该只使用左手还是右手?这会因不同的情况而改变吗?

请参阅http://www.codezealot.org/archives/55#sat-axes

2 个答案:

答案 0 :(得分:0)

只要您对每个面使用相同的约定都没关系,因为法线用于计算投影并比较它们:

  Projection p1 = shape1.project(axis);
  Projection p2 = shape2.project(axis);
  // do the projections overlap?
  if (!p1.overlap(p2)) {

(!p1.overlap(p2))的结果与两个公式相同。

HTH

答案 1 :(得分:0)

法线应始终从边缘指出。您可以找到两种可能的解决方案。其中一个是对的,另一个是错的。

哪一个是正确的取决于两件事:

  • 您的边缘是顺时针还是逆时针。
  • 您的协调系统。