确定多边形法线,多边形内部还是外部的点

时间:2016-12-05 16:53:29

标签: java linear-algebra

确定多边形的法线点是否在多边形内部或外部的正确方法是什么?我有一个正确的行列表(p1,p2,normalVec)。我想我应该对它们进行CW或CCW排序,然后以某种方式用我的线的方向Vector计算法线向量。enter image description here

左边一个应该返回外部,右边一个应该返回内部。

1 个答案:

答案 0 :(得分:0)

好的,我现在用我的游戏引擎正在做这件事。 我要做的是确定多边形面向的方向是始终以相同的方式缠绕三角形。对我来说,我总是顺时针旋转它们。 然后使用这些三角形,计算法向量。这是我的代码:

public static Point GetNormalVector(Point p1, Point p2, Point p3)
{
    double diff_x = p3.GetExX() - p2.GetExX();
    double diff_y = p3.GetExY() - p2.GetExY();
    double diff_z = p3.GetExZ() - p2.GetExZ();
    double diff_x1 = p1.GetExX() - p2.GetExX();
    double diff_y1 = p1.GetExY() - p2.GetExY();
    double diff_z1 = p1.GetExZ() - p2.GetExZ();
    Point orig = new Point(0, 0, 0);
    orig.SetX((diff_y * diff_z1) - (diff_y1 * diff_z));
    orig.SetY((diff_z * diff_x1) - (diff_z1 * diff_x));
    orig.SetZ((diff_x * diff_y1) - (diff_x1 * diff_y));
    NormalizeVector(orig);
    return orig;
}

现在我们有了多边形的法线向量。 根据您缠绕三角形的方式,法线向量将始终以相同的方式指向 - 输入或输出。 您将知道在计算法向量时它们指向哪种方式。对我来说,顺时针= out,逆时针= in。

这会回答你的问题吗?