给定3分,我该如何计算法向量?

时间:2009-12-27 18:03:57

标签: c# math .net-3.5 geometry

给定三个3D点(A,B和C),如何计算法向量?这三个点定义了一个平面,我希望矢量垂直于这个平面。

我可以获得演示此内容的示例C#代码吗?

3 个答案:

答案 0 :(得分:37)

这取决于积分的顺序。如果以逆时针顺序指定点,从正常方向反对看,那么计算起来很简单:

Dir = (B - A) x (C - A)
Norm = Dir / len(Dir)

其中x是叉积。

如果您正在使用OpenTK或XNA(可以访问Vector3类),那么这只是一个问题:

class Triangle {
    Vector3 a, b, c;
    public Vector3 Normal {
        get {
            var dir = Vector3.Cross(b - a, c - a);
            var norm = Vector3.Normalize(dir);
            return norm;
        }
    }
}

答案 1 :(得分:4)

形成载体BA和BC的交叉积。请参阅http://mathworld.wolfram.com/CrossProduct.html

答案 2 :(得分:1)

您需要计算表面上任意两个非平行向量的cross product。由于你有三个点,你可以通过采用矢量AB和AC的交叉乘积来计算出来。

当你这样做时,你正在计算surface normal,其中维基百科有一个非常广泛的解释。