我正在尝试实现分离轴定理来检测两个多边形之间的碰撞。我理解它的概念,我只是陷入其中的一部分。 基本上我需要在每个多边形的每一边都有一条线来投射多边形。 所以我必须使用每个多边形的每个顶点来检测形状的边缘,然后从该线创建一条线。我已经在网上阅读了很多东西,但是每个人似乎都在跳过这一部分,也许我只是在努力思考它,但我感到很困惑。
我一直在使用这段代码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)
这样的东西才能得到这个?
答案 0 :(得分:0)
未在2维空间上定义法线向量。 它通常应用于三维空间。如果你有两个vector3s,那么它们代表的曲面的法线就是它们的叉积。所以对于a = [x1,y1,z1]和b = [x2,y2,z2],法向量是X b,a和b的Cross Product。