给定三个3D点(A,B和C),如何计算法向量?这三个点定义了一个平面,我希望矢量垂直于这个平面。
我可以获得演示此内容的示例C#代码吗?
答案 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,其中维基百科有一个非常广泛的解释。