作业帮 > 综合 > 作业

三维中法向量的求解已知三维坐标中三个点,求此三点所在平面的法向量如何求解?从程序中看到代码如下,float v1[3],

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/19 17:18:26
三维中法向量的求解
已知三维坐标中三个点,求此三点所在平面的法向量如何求解?从程序中看到代码如下,
float v1[3],v2[3];
// 根据空间三个点计算两个矢量值
v1[0] = x[ faces[entry] ] - x[ faces[entry+1] ];
v1[1] = y[ faces[entry] ] - y[ faces[entry+1] ];
v1[2] = z[ faces[entry] ] - z[ faces[entry+1] ];
v2[0] = x[ faces[entry+1] ] - x[ faces[entry+2] ];
v2[1] = y[ faces[entry+1] ] - y[ faces[entry+2] ];
v2[2] = z[ faces[entry+1] ] - z[ faces[entry+2] ];
// 计算法向矢量
out[0] = v1[1]*v2[2] - v1[2]*v2[1];
out[1] = v1[2]*v2[0] - v1[0]*v2[2];
out[2] = v1[0]*v2[1] - v1[1]*v2[0];
你是在问这样解的数学原因吗?
这样的:
设 已知三点A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3)
任意找在这个面的两个不平行的向量,
BA=(x1-x2,y1-y2,z1-z2)=(v1[0],v1[1],v1[2])
CB=(x2-x3,y2-y3,z2-z3)=(v2[0],v2[1],v2[2])
法向量为同时垂直于这两个向量的一个向量.
利用叉乘可以直接得到
n=BA×CB
=[ i ,j ,k ]
[v1[0],v1[1],v1[2]]
[v2[0],v2[1],v2[2]]
=(v1[1]*v2[2]-v1[2]*v2[1],v1[2]*v2[0]-v1[0]*v2[2],v1[0]*v2[1]-v1[1]*v2[0])
最后一步是行列式计算.