计算法线2d

时间:2014-02-09 12:14:53

标签: java math vector collision-detection normalization

我正在尝试实现分离轴定理来检测两个多边形之间的碰撞。我理解它的概念,我只是陷入其中的一部分。 基本上我需要在每个多边形的每一边都有一条线来投射多边形。 所以我必须使用每个多边形的每个顶点来检测形状的边缘,然后从该线创建一条线。我已经在网上阅读了很多东西,但是每个人似乎都在跳过这一部分,也许我只是在努力思考它,但我感到很困惑。

我一直在使用这段代码http://www.codezealot.org/archives/55,我在网上找到了帮助,但我对perp部分感到困惑。

  for (int i = 0; i < polygon.vertices.length; i++) {

    Vector p1 = polygon.vertices[i];
    Vector p2 = polygon.vertices[i + 1 == polygon.vertices.length ? 0 : i + 1];

    Vector edge = p1.subtract(p2);

    Vector normal = edge.perp();
    // the perp method is just (x, y) => (-y, x) or (y, -x)
    axes[i] = normal;
}

我知道如果顺时针或逆时针读取顶点但我仍然不确定它有什么关系。

当我在纸上进行计算时,正常的x和y似乎已经消失了? 如果有任何人有这方面的经验,将不胜感激!

修改

基本上我想要做的是找到垂直于当前边缘的轴

所以,如果我有(7,9) - (10,5)Vector edge = (-3,4)我是否需要像(-Y, X)这样的东西才能得到这个?

1 个答案:

答案 0 :(得分:0)

未在2维空间上定义法线向量。 它通常应用于三维空间。如果你有两个vector3s,那么它们代表的曲面的法线就是它们的叉积。所以对于a = [x1,y1,z1]和b = [x2,y2,z2],法向量是X b,a和b的Cross Product

相关问题