1、空间平面法向量求法一、法向量定义定义:如果 ,那么向量 叫做平面 的法向量。平面 的法向量共有两大类(从方向上分) ,无数条。二、平面法向量的求法1、内积法在给定的空间直角坐标系中,设平面 的法向量 =(x,y,1)或 =(x,1,z)或=(1,y,z),在平面 内任找两个不共线的向量 , 。由 ,得 =0且 =0,由此得到关于 x,y 的方程组,解此方程组即可得到 。2、任何一个 x,y,z 的一次方程的图形是平面;反之,任何一个平面的方程是 x,y,z 的一次方程。Ax+By+Cz+D=0(A,B,C 不同时为 0),称为平面的一般方程。其法向量 =(A,B,C);若平面与3个坐标轴的交点
2、为 P(a,0,0),P(0,b,0),P(0,0,c),则平面方程为: ,称此方程为平面的截距式方程,把它化为一般式即可求出它的法向量。3、外积法设 , 为空间中两个不平行的非零向量,其外积 为一长度等于| | |sin, ( 为 两者交角,且0 ,而与 , , 皆垂直的向量。通常我们采取“右手定则”,也就是右手四指由 的方向转为 的方向时,大拇指所指的方向规定为 的方向, =- 。设 =(x1,y1,z1), =(x2,y2,z2),则 =(注:1、二阶行列式: ;2、适合右手定则。 )Codepublic double GetTriangleFunction(ESRI.ArcGIS.Ge
3、ometry.IPoint point1, ESRI.ArcGIS.Geometry.IPoint point2, ESRI.ArcGIS.Geometry.IPoint point3)trydouble a = 0, b = 0,c=0; /方程参数double x1 = 0, x2 = 0, x3 = 0, y1 = 0, y2 = 0, y3 = 0, z1 = 0, z2 = 0, z3 = 0; /各点坐标值double returnValue = new double3;x1 = point1.X * 1000;y1 = point1.Y * 1000;z1 = point1.Z
4、* 1000;x2 = point2.X * 1000;y2 = point2.Y * 1000;z2 = point2.Z * 1000;x3 = point3.X * 1000;y3 = point3.Y * 1000;z3 = point3.Z * 1000;/向量 I1double I1 = new double3;I10 = x2 - x1;I11 = y2 - y1;I12 = z2 - z1;/向量 I2double I2 = new double3;I20 = x3 - x1;I21 = y3 - y1;I22 = z3 - z1;double X1 = I10;double
5、Y1 = I11;double Z1 = I12;double X2 = I20;double Y2 = I21;double Z2 = I22;a = Y1 * Z2 - Y2 * Z1;b = X2 * Z1 - X1 * Z2;c = X1 * Y2 - X2 * Y1;returnValue0 = a;returnValue1 = b;returnValue2 = c;return returnValue;catch (Exception e)throw e;OPENGL 里面就这样实现void getNormal(GLfloat gx3,GLfloat gy3, GLfloat gz3,GLfloat *ddnv)GLfloat w0,w1,w2,v0,v1,v2,nr,nx,ny,nz;w0=gx0-gx1; w1=gy0-gy1;w2=gz0-gz1;v0=gx2-gx1; v1=gy2-gy1;v2=gz2-gz1;nx=(w1*v2-w2*v1);ny=(w2*v0-w0*v2);nz=(w0*v1-w1*v0);nr=(GLfloat)sqrt(nx*nx+ny*ny+nz*nz); /向量单位化。ddnv0=nx/nr; ddnv1=ny/nr;ddnv2=nz/nr;