空间平面法向量求法
- 格式:doc
- 大小:121.50 KB
- 文档页数:3
已知三点求平⾯法向量空间已知三点的位置p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3),令它们逆时针在空间摆放。
这样就可以得到平⾯的两个向量p1p2(x2-x1,y2-y1,z2-z1),p1p3(x3-x1,y3-y1,z3-z1),⽽平⾯法线总是和这两个向量垂直。
也就是说,p1p2与p1p3的向量积就是平⾯的法向量n。
复习⼀下向量积,已知向量a=(a1,a2,a3) b=(b1,b2,b3)其向量积可表⽰为:a×b=(a2b3-a3b2,a3b1-a1b3,a1b2-a2b1)将其套⼊到p1p2和p1p3即可。
具体实现代码如下:#include<iostream>using namespace std;//三维double⽮量struct Vec3d{double x, y, z;Vec3d(){x = 0.0;y = 0.0;z = 0.0;}Vec3d(double dx, double dy, double dz){x = dx;y = dy;z = dz;}void Set(double dx, double dy, double dz){x = dx;y = dy;z = dz;}};//计算三点成⾯的法向量void Cal_Normal_3D(const Vec3d& v1, const Vec3d& v2, const Vec3d& v3, Vec3d &vn){//v1(n1,n2,n3);//平⾯⽅程: na * (x – n1) + nb * (y – n2) + nc * (z – n3) = 0 ;double na = (v2.y - v1.y)*(v3.z - v1.z) - (v2.z - v1.z)*(v3.y - v1.y);double nb = (v2.z - v1.z)*(v3.x - v1.x) - (v2.x - v1.x)*(v3.z - v1.z);double nc = (v2.x - v1.x)*(v3.y - v1.y) - (v2.y - v1.y)*(v3.x - v1.x);//平⾯法向量vn.Set(na, nb, nc);}int main(){Vec3d v1(1.0, 5.2, 3.7);Vec3d v2(2.8, 3.9, 4.5);Vec3d v3(7.6, 8.4, 6.2);Vec3d vn;Cal_Normal_3D(v1, v2, v3, vn);cout <<"法向量为:"<< vn.x << '\t' << vn.y << '\t' << vn.z << '\n';return 0;}对于⼀个空间的平⾯⽽⾔,其法向量可以是两个⽅向,可以向上也可以向下。
平面法向量的快速求法叉乘平面法向量的快速求法叉乘---------------------------------平面法向量(Plane Vector)是现代几何学中一种重要的概念,它被广泛应用于工程、科学、数学等多个领域。
平面法向量定义为一组三个元素的数组,由一条有向线段的起点(A)和终点(B)构成。
它可以用来表示一个平面上的向量或一个三维空间中的向量。
叉乘(Cross Product)是一种常见的矢量运算,它通常用来求两个三维向量的叉乘积。
平面法向量的叉乘也是一种有用的运算,它可以用来求出两个向量在平面上的叉乘结果。
在求解平面法向量叉乘时,最常用的方法是使用叉乘定理,即使用另外两个向量来表示原始向量,然后将这两个向量分别叉乘,最后将叉乘的结果相加求得最终的叉乘结果。
这是一种相对比较复杂的计算方法,而且在计算大量数据时会耗费大量时间。
为了解决上述问题,人们开发了快速求法叉乘法(Fast Cross Product Method),这是一种计算平面法向量叉乘的新方法。
该方法不需要使用叉乘定理,而是直接使用原始向量来计算叉乘。
其核心思想是:将原始向量分别作为三个平面法向量,然后将这三个向量相乘,最后得出最终的叉乘结果。
在实践中,使用快速求法叉乘的方法可以很大地提高计算效率。
因为它不需要使用叉乘定理来计算叉乘,而是直接使用原始向量来计算叉乘,这样就能大大减少计算时间。
此外,该方法还具有较好的计算准确性,因为它不会出现因叉乘定理而产生误差的情况。
总之,快速求法叉乘法是一种有效的计算平面法向量叉乘的新方法。
该方法不仅能够大大提高计算效率,而且还具有较好的计算准确性。
因此,快速求法叉乘法已成为计算平面法向量叉乘的常用方法。
空间平面法向量求法一、法向量定义定义:如果,那么向量叫做平面的法向量。
平面的法向量共有两大类(从方向上分),无数条。
二、平面法向量的求法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个坐标轴的交点为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.Geometry.IPoint point1,ESRI.ArcGIS.Geometry.IPoint point2, ESRI.ArcGIS.Geometry.IPoint point3){try{double 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 double[3];x1 = point1.X * 1000;y1 = point1.Y * 1000;z1 = point1.Z * 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 double[3];I1[0] = x2 - x1;I1[1] = y2 - y1;I1[2] = z2 - z1;//向量I2double[] I2 = new double[3];I2[0] = x3 - x1;I2[1] = y3 - y1;I2[2] = z3 - z1;double X1 = I1[0];double Y1 = I1[1];double Z1 = I1[2];double X2 = I2[0];double Y2 = I2[1];double Z2 = I2[2];a = Y1 * Z2 - Y2 * Z1;b = X2 * Z1 - X1 * Z2;c = X1 * Y2 - X2 * Y1;returnValue[0] = a;returnValue[1] = b;returnValue[2] = c;return returnValue;}catch (Exception e){throw e;}}OPENGL里面就这样实现void getNormal(GLfloat gx[3],GLfloat gy[3], GLfloat gz[3],GLfloat *ddnv){GLfloat w0,w1,w2,v0,v1,v2,nr,nx,ny,nz;w0=gx[0]-gx[1]; w1=gy[0]-gy[1];w2=gz[0]-gz[1];v0=gx[2]-gx[1]; v1=gy[2]-gy[1];v2=gz[2]-gz[1];nx=(w1*v2-w2*v1);ny=(w2*v0-w0*v2);nz=(w0*v1-w1*v0);nr=(GLfloat)sqrt(nx*nx+ny*ny+nz*nz); //向量单位化。
平面法向量公式
平面法向量是指平面上一组向量,也称平面方向向量,它指向平面正方向。
平面法向量公式指出三个不同的点之间的关系。
如果A,B,C是三个点,则平面法向量公式为: N= (B-
A)X(C-A)
算法法向量是根据空间几何学中夹角的定义引入的,它由夹角旁的对边构成,表示该夹角的正方向,也就是平面的正方向。
平面法向量的计算依赖于向量的知识,具体来说,要确定任意三点组成平面的法向量,首先需要确定三点坐标,例如三点 A,B,C的坐标分别为(A1,B1,C1)、(A2,B2,C2)、(A3,B3,C3)。
法
向量表示为N,可以采用叉乘公式计算:N= (A2-A1)X(A3-
A1) 。
法向量表示多维物体旋转或平移的方向,在计算机图形学、力学、热力学中都广泛应用。
在计算机图形学中,法向量用于求解光照系统,确定视角变换,确定Bézier曲面等。
力学中,
可以利用法向量来计算滑动及接触方向,以及单位磁场和单位耗散磁场,确定磁力线分布等。
热力学中,可以利用法向量求解相变平衡的条件,确定温度、流量及压力等变量的关系。
总之,平面法向量公式被广泛应用于多个领域,有助于计算几何学中相当复杂的问题,可以用于碰撞检测,模拟对象的重力行为,以及物理系统的仿真等。
以上就是对平面法向量公式的介绍,从定义它的基本原理,到它在各领域的重要作用,都有了更深入的认识。
可以看出,平面法向量公式是一个有效的工具,可以用于重要的研究与实践,相信它会带给我们更多新的应用。
空间平面的法向量公式
空间平面的法向量公式是指在三维空间中,一个平面的法向量可以通过该平面上的两个非共线向量的叉乘来得到。
设平面上存在两个非共线向量A和B,那么平面的法向量N可以通过以下公式计算得到:
N = A × B
其中,×表示向量的叉乘运算。
叉乘运算的结果是一个垂直于A和B所在平面的向量,其方向满足右手法则。
具体而言,如果将右手的食指指向向量A的方向,中指指向向量B的方向,那么拇指所指的方向就是法向量N所指的方向。
这个公式的推导可以通过向量的线性代数知识进行证明。
从几何的角度来看,使用叉乘运算可以得到一个与平面垂直的向量,因为叉乘运算的结果是两个向量所张成的平行四边形的面积向量。
法向量在几何学和物理学中有广泛的应用。
在几何学中,法向量可以用来判断两个平面是否平行、垂直或相交。
在物理学中,法向量可以用来计算力的分解和合成,并且在电磁学中,法向量还可以用来描述电场和磁场的方向。
总结来说,空间平面的法向量公式是通过叉乘运算得到的,它可以用来表示平面
的垂直方向。
法向量的方向可以通过右手法则确定。
这个公式在几何学和物理学中有广泛的应用。
平面的法向量
平面法向量的求法:1.在平面内找两个不共线的向量2.待求的法向量与这两个向量各做数量积为零就可以确定出法向量了.3.为方便运算,提取公因数,若其中含有未知量x,为x代值即可得到一个最简单的法向量。
普通平面法向量的具体步骤:(待定系数法)1、建立恰当的直角坐标系2、设平面法向量n=(x,y,z)3、在平面内找出两个不共线的向量,记为a=(a1,a2, a3)b=(b1,b2,b3)4、根据法向量的定义建立方程组①n·a=0 ②n·b=0。
空间直角坐标系中平面法向量的三种求法:一、方程法,利用直线与平面垂直的判定定理构造三元一次方程组,由于有三个未知数,两个方程,要设定一个变量的值才能求解,这是一种基本的方法,但运算稍繁,要使法向量简洁,设值可灵活,法向量有无数个,它们是共线向量,取一个就可以。
二、矢量积公式。
三、双0速算法:如果空间直角坐标系中的点在坐标轴上,那么就有两个坐标为0,点在坐标平面上,就会有一个坐标为0,同理,如果向量与坐标轴平行,则向量就有两个坐标为0,向量与坐标平血平行,向量就有一个坐标为0,有的学生在实践中发现,两个向量的六个坐标中,只要出现2个0,就可以快速求得法向量,有点“十字相乘法”快速分解二次三项式的味道,而且正确率高,在考试中作用明显。
扩展资料:高中法向量更快求法:叉乘,造0法。
叉乘口诀:掐头去尾,交叉相乘再相减。
造0法:构造0时,加减乘除都行。
平面的法向量公式在我们学习空间几何的时候,平面的法向量公式可是个相当重要的“家伙”。
它就像是一把神奇的钥匙,能帮我们打开很多几何难题的大门。
先来说说啥是平面的法向量。
想象一下,有一个平平的面,就像一张超级大的纸铺在那里。
而法向量呢,就是垂直于这个面的向量,它就像一根直直站立在纸上的针,和纸面完全垂直。
平面的法向量公式是:设平面的方程为 Ax + By + Cz + D = 0 ,(A、B、C 不同时为 0),那么这个平面的法向量就是 n = (A, B, C) 。
这个公式看起来好像挺简单,可真要用起来,还得好好琢磨琢磨。
我记得有一次给学生们讲这个知识点的时候,有个学生一脸迷茫地问我:“老师,这法向量到底有啥用啊?”我笑了笑,拿起一支笔在黑板上画了一个立方体。
“同学们,咱们假设这立方体的一个面是由平面方程表示的,那如果我们知道了这个面的法向量,是不是就能很容易地求出这个面和其他面的夹角啦?这在解决很多空间几何问题时,可是超级有用的哦!”我一边说,一边在立方体上比划着。
那堂课上,我带着学生们做了好多练习题,通过实际的操作让他们更深刻地理解平面的法向量公式。
比如说,有这样一道题:已知平面方程 2x - 3y + 4z - 5 = 0 ,求它的法向量。
这时候,直接根据公式就能得出法向量是 (2, -3, 4) 。
再复杂一点,让求两个平面的夹角。
这时候,先分别求出两个平面的法向量,然后利用向量的夹角公式,就能算出平面的夹角啦。
学习平面的法向量公式,就像是在探索一个神秘的宝藏,每一次运用它解决问题,都像是找到了一颗璀璨的宝石。
而且呀,这个公式在实际生活中也有不少用处呢。
比如建筑设计中,工程师们要确定建筑物各个面的朝向和角度,就得用到平面的法向量知识;在计算机图形学里,制作逼真的 3D 模型,也离不开对平面法向量的准确计算。
总之,平面的法向量公式虽然看起来有点小复杂,但只要咱们多练习、多思考,就能把它运用得得心应手,让它成为我们解决空间几何问题的有力武器!希望同学们都能和这个公式成为好朋友,在数学的海洋里畅游无阻!。
概念垂直于平面的直线所表示的向量为该平面的法向量。
一个平面都存在无数个法向量。
零向量模等于零的向量叫做零向量,记作0,注意零向量的方向是任意的。
但我们规定:零向量的方向与任一向量平行,垂直。
计算方法从理论上说,空间零向量是任何平面的法向量,但是由于零向量不能表示平面的信息。
一般不选择零向量为平面的法向量。
如果已知直线与平面垂直,可以取已知直线的两点构成的向量作为法向量;如果不存在这样的直线,可用设元法求一个平面的法向量;步骤如下:首先设平面的法向量m(x,y,z),然后寻找平面内任意两个不平行的向量AB(x1,y1,z1)和CD(x2,y2,z2)。
由于平面法向量垂直于平面内所有的向量,因此得到x*x1+y*y1+z*z1=0和x*x2+y*y2+z*z2=0。
由于上面解法存在三个未知数两个方程(不能通过增加新的向量和方程求解,因为其它方程和上述两个方程是等价的),无法得到唯一的法向量(因为法向量不是唯一的)。
为了得到确定法向量,可采用固定z=1(也可以固定x=1或y=1)或者模等于1的方法(单位法向量),但是这步并不是必须的。
因为确定法向量和不确定法向量的作用是一样的。
平面法向量的具体步骤:(待定系数法)1、建立恰当的直角坐标系2、设平面法向量n=(x,y,z)3、在平面内找出两个不共线的向量,记为a=(a1,a2, a3)b=(b1,b2,b3)4、根据法向量的定义建立方程组①n*a=0 ②n*b=0编辑本段应用范围法向量的主要应用如下:1、求斜线与平面所成的角(一般只求出正弦值即可):求出平面法向量和斜线的一边,然后联立方程组,可以得到角度的余弦值,根据公式Sinα=|Cosα|。
利用这个原理也可以证明线面平行;2、求二面角:求出两个平面的法向量所成的角,这个角与二面角相等或互补;3、点到面的距离:任一斜线(平面为一点与平面内的连线)在法向量方向的射影;如点B到平面α的距离d=|BD·n|/|n|(等式右边全为向量,D为平面内任意一点,向量n为平面α的法向量)。
空间法向量求法空间法向量是三维空间中一个非常重要的概念。
它在三维计算机图形学、机器视觉、物理学等领域中都有广泛的应用。
本文将介绍空间法向量的定义、计算方法和应用场景,以帮助读者更好地理解和应用这一概念。
什么是空间法向量?在三维欧几里得空间中,一个平面的法向量是一个垂直于该平面的向量,它的方向与平面的法线方向一致。
同样地,一个曲面的法向量是在某一点上垂直于该曲面的向量。
空间法向量是指在三维空间中,一个点或者一个面的法向量。
空间法向量通常用于描述光线、物体表面的法线和曲面的法线等等。
如何计算空间法向量?计算空间法向量非常简单。
一般而言,可以通过以下步骤来计算:1. 对于点法向量假设我们有一个三维空间中的点P,我们需要计算该点的法向量。
首先,我们需要确定该点所在的曲面或者平面,然后可以通过取该曲面或者平面上其他两个点的位置向量,计算出这三个位置向量的法向量,即可得到该点的法向量。
2. 对于面法向量假设我们有一个三维空间中的面ABC,我们需要计算该面的法向量。
可以通过向量叉积来计算该面的法向量。
向量叉积是一个向量运算符,用于计算两个向量的叉积结果,返回一个垂直于这两个向量的向量。
在本例中,假设向量AB和向量AC是该面上的任意两个向量,那么该面的法向量就是它们的叉积AB×AC。
应用场景空间法向量有广泛的应用场景。
在计算机图形学中,空间法向量常用于渲染光线,以及计算物体表面的法线,从而实现更真实的光照效果。
在机器视觉中,空间法向量可用于检测物体的边缘、交界处等特征,从而实现更精准的物体识别和跟踪。
在物理学中,空间法向量可用于描述曲面的法线、力的作用方向等等。
结论空间法向量是一个非常重要的概念,它在三维计算机图形学、机器视觉、物理学等领域中都有广泛的应用。
我们通过本文介绍了空间法向量的定义、计算方法和应用场景,希望能为读者更好地理解和应用这一概念提供帮助。
空间平面的法向量公式空间平面是由三个非共线的点确定的,也可以通过一条直线和一个确定的向量来表示。
在我们讨论的情况中,我们将假设空间平面由一条经过原点的向量和一个确定的法向量来表示。
如果空间平面由一条直线和一个法向量来表示,我们可以用向量的点积来判断给定的向量是否是平面的法向量。
具体来说,如果一个向量a与平面的法向量n的点积为零,则向量a在平面上。
这可以通过下面的公式来计算:a·n=0这个公式告诉我们,如果一个向量与平面的法向量的点积为零,那么这个向量一定在平面上。
另一种常见的方法是使用三个点来确定平面。
假设我们有三个非共线的点A、B和C,并且这些点都在同一个平面上。
我们可以通过求两个向量的叉积来找到平面的法向量。
具体来说,我们可以使用向量AB和向量AC来计算平面的法向量。
叉积的计算公式如下:n=AB×AC这个公式告诉我们,平面的法向量是由向量AB和向量AC的叉积得到的。
为了更好地理解空间平面的法向量公式,让我们来看一个具体的例子。
假设我们有三个点A(1,2,3)、B(4,5,6)和C(7,8,9),我们想要找到通过这三个点的平面的法向量。
首先,我们需要计算向量AB和向量AC。
向量AB可以通过从点A到点B的坐标差来计算,即:AB=(4-1,5-2,6-3)=(3,3,3)类似地,我们可以计算向量AC:AC=(7-1,8-2,9-3)=(6,6,6)接下来,我们可以使用向量AB和向量AC来计算平面的法向量。
通过计算叉积,我们可以得到:n=AB×AC=(3,3,3)×(6,6,6)=(0,0,0)在这个例子中,我们得到的法向量为(0,0,0)。
由于法向量为零向量,这意味着这三点不共线,因此它们无法确定一个平面。
这就是空间平面的法向量公式。
通过这个公式,我们可以用几何和代数方法来计算平面的法向量。
这对我们在空间几何中解决问题非常有帮助,例如计算平面的方程、判断两个平面是否平行或垂直,以及解决平面与直线的交点等。
法向量求法及应用方法平面法向量的求法及其应用一、平面的法向量1、定义:如果al:,那么向量a叫做平面:的法向量。
平面:-的法向量共有两大类(从方向上分),无数条。
2、平面法向量的求法方法一(内积法):在给定的空间直角坐标系中,设平面:的法向量;=(X, y,1)[或*=(x,1,z),或: = (1,y,z)],在平面:内任找两个不共线的向量a,b。
由二,,得n a=o 且nb=o,由此得到关于x,y的方程组,解此方程组即可得到n。
方法二:任何一个X,y,z的一次次方程的图形是平面;反之,任何一个平面的方程是x,y,z的一次方程。
Ax By Cz 0 (A,B,C不同时为0),称为平面的一般方程。
其法向量n> = (AB,C);若平面与3个坐标轴的交点为R(a,0,0),P2(0,b,0),P3(0,0,c),如图所示,则平面方程为:{ b 亍1,称此方程为平面的截距式方程,把它化为一般式即可求出它的法向量。
方法三(外积法):设必&为空间中两个不平行的非零向量,其外积a b为一长度等于|a||b|si n =,(9为.,两者交角,且0":::二),而与, 皆垂直的向量。
通常我们采取「右手定则」,也就是右手四指由…的方向转为■的方向时,大拇指所指的方向规定为a b的方向,a b a。
、J -1 |tT TJX 1 乙 X 1 y 1设a ugyszjb 二凶卩乙),则 a 汉 b = |y 2 Z2J —X 2 Z 2 JX 2 y 2(注:1、二阶行列式:M=a: =ad_cb ; 2、适合右c d‘手定则。
)例 1、 已知,a'(21,0),bl( — 1,2,1), 试求(i ): ( 2): b 爲.Key:⑴ a 汉 b=(1,—2,5) ; (2)b3=(-1,2,5)例2、如图1-1,在棱长为2的正方体ABCD —ABCP 中, 求平面 AEF 的一y 个法量向二AF AE =(1,2,2) 量n 。
平面法向量的求法及其应用一、 平面的法向量1、定义:如果α⊥→a ,那么向量→a 叫做平面α的法向量。
平面α的法向量共有两大类(从方向上分),无数条。
2、平面法向量的求法方法一(内积法):在给定的空间直角坐标系中,设平面α的法向量(,,1)n x y =[或(,1,)n x z =,或(1,,)n y z =],在平面α内任找两个不共线的向量,a b 。
由n α⊥,得0n a ⋅=且0n b ⋅=,由此得到关于,x y 的方程组,解此方程组即可得到n 。
方法二:任何一个z y x ,,的一次次方程的图形是平面;反之,任何一个平面的方程是z y x ,,的一次方程。
0=+++D Cz By Ax )0,,(不同时为C B A ,称为平面的一般方程。
其法向量),,(C B A n =→;若平面与3个坐标轴的交点为),0,0(),0,,0(),0,0,(321c P b P a P ,如图所示,则平面方程为:1=++czb y a x ,称此方程为平面的截距式方程,把它化为一般式即可求出它的法向量。
方法三(外积法): 设, 为空间中两个不平行的非零向量,其外积→→⨯b a 为一长度等于θsin ||||→→b a ,(θ为,两者交角,且πθ<<0),而与, 皆垂直的向量。
通常我们采取「右手定则」,也就是右手四指由的方向转为的方向时,大拇指所指的方向规定为→→⨯b a 的方向,→→→→⨯-=⨯a b b a 。
:),,,(),,,(222111则设z y x b z y x a ==→→⎝⎛=⨯→→21y y b a ,21z z 21x x - ,21z z 21x x ⎪⎪⎭⎫21y y (注:1、二阶行列式:ca M =cb ad db -=;2例1、 已知,)1,2,1(),0,1,2(-==→→b a , 试求(1):;→→⨯b a (2):.→→⨯a bKey: (1) )5,2,1(-=⨯→→b a ;)5,2,1()2(-=⨯→→a b例2、如图1-1,在棱长为2的正方体1111ABCD A B C D -中,求平面AEF 的一个法向量n 。
空间平面法向量求法
一、法向量定义
定义:如果,那么向量叫做平面的法向量。
平面的法向量共有两大类(从方向上分),无数条。
二、平面法向量的求法
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
个坐标轴的交点为P(a,0,0),P(0,b,0),P(0,0,c),则平面方程为:,称此方程为平面
的截距式方程,把它化为一般式即可求出它的法向量。
3、外积法
设,为空间中两个不平行的非零向量,其外积×为一长度等于||||sinθ,(θ为两者交角,且0<θ<π,而与,, 皆垂直的向量。
通常我们采取“右手定则”,也就是右手四指由的方向转为的方向时,大拇指所指的方向规定为×的方向,×=-×。
设=(x1,y1,z1),=(x2,y2,z2),则×=
(注:1、二阶行列式:;2、适合右手定则。
)
Code
public double[] GetTriangleFunction(ESRI.ArcGIS.Geometry.IPoint point1,
ESRI.ArcGIS.Geometry.IPoint point2, ESRI.ArcGIS.Geometry.IPoint point3)
{
try
{
double 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 double[3];
x1 = point1.X * 1000;
y1 = point1.Y * 1000;
z1 = point1.Z * 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;
//向量I1
double[] I1 = new double[3];
I1[0] = x2 - x1;
I1[1] = y2 - y1;
I1[2] = z2 - z1;
//向量I2
double[] I2 = new double[3];
I2[0] = x3 - x1;
I2[1] = y3 - y1;
I2[2] = z3 - z1;
double X1 = I1[0];
double Y1 = I1[1];
double Z1 = I1[2];
double X2 = I2[0];
double Y2 = I2[1];
double Z2 = I2[2];
a = Y1 * Z2 - Y2 * Z1;
b = X2 * Z1 - X1 * Z2;
c = X1 * Y2 - X2 * Y1;
returnValue[0] = a;
returnValue[1] = b;
returnValue[2] = c;
return returnValue;
}
catch (Exception e)
{
throw e;
}
}
OPENGL里面就这样实现
void getNormal(GLfloat gx[3],GLfloat gy[3], GLfloat gz[3],GLfloat *ddnv) {
GLfloat w0,w1,w2,v0,v1,v2,nr,nx,ny,nz;
w0=gx[0]-gx[1]; w1=gy[0]-gy[1];w2=gz[0]-gz[1];
v0=gx[2]-gx[1]; v1=gy[2]-gy[1];v2=gz[2]-gz[1];
nx=(w1*v2-w2*v1);ny=(w2*v0-w0*v2);nz=(w0*v1-w1*v0);
nr=(GLfloat)sqrt(nx*nx+ny*ny+nz*nz); //向量单位化。
ddnv[0]=nx/nr; ddnv[1]=ny/nr;ddnv[2]=nz/nr;
}。