求空间平面方程

Posted lovebay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求空间平面方程相关的知识,希望对你有一定的参考价值。

1、已知平面上一点p、法线N  求平面方程

法向量N:
N(a,b,c)
点P:
p(x0, y0, z0)

平面方程:
a(x-x0)+b(y-y0)+c(z-z0)=0;

A = a
B = b
C = c
D = -1*(a*x0+b*y0+c*z0)
Ax+By+Cz+D=0;

综上所述方程Ax+By+Cz+D=0各参数的意义

(A,B,C)法向量的分量,D,原点到平面的距离

2、已知平面三点P1(x1, y1, z1),  P2(x2, y2, z2), P3(x3, y3, z3), 求平面方程

a、线性解法

求过三zhidao点:M?(x?,y?,z?);M?(x?,y?,z?);M?(x?,y?,z?)的平面的方法:
设过M?的平面方程为 A(x-x?)+B(y-y?)+C(z-z?)=0.................①
M?,M?都在此平面上,因此它们的坐标都满足方程①;将它们的坐标依专次代入得:
A(x?-x?)+B(y?-y?)+C(z?-z?)=0.............②
A(x?-x?)+B(y?-y?)+C(z?-z?)=0..............③
①②③是关于A、B、C的线性方程组,此方程组有非零解的充要条件是关于A、B、C的系数
行列属式?=0;即:

求过三zhidao点:M?(x?,y?,z?);M?(x?,y?,z?);M?(x?,y?,z?)的平面的方法:


设过M?的平面方程为 A(x-x?)+B(y-y?)+C(z-z?)=0.................①


M?,M?都在此平面上,因此它们的坐标都满足方程①;将它们的坐标依专次代入得:


A(x?-x?)+B(y?-y?)+C(z?-z?)=0.............②

A(x?-x?)+B(y?-y?)+C(z?-z?)=0..............③


①②③是关于A、B、C的线性方程组,此方程组有非零解的充要条件是关于A、B、C的系数


行列属式?=0;即:


技术图片


打开此行列式,就可得到所求平面的方程。 

D=技术图片=

a1·b2·c3+b1·c2·a3+c1·a2·b3-a3·b2·c1-b3·c2·a1-c3·a2·b1(注意对角线就容易记住了)

 

这里一共是六项相加减
 

b、克莱姆法则

平面方程:

Ax+By+Cz+D=0 (参数,A,B,C,D是描述平面空间特征的常数)

 

技术图片

 

 

//根据3个点,计算空间平面的方程
//Ax+By+Cz+D=0
//输入参数:in_points---空间中3个点的坐标,大小为3;输入点>3时,只取前3个点
//输出参数A,B,C,D
//返回值:0---计算成功;-1----计算失败
int GetPlaneEquation(vector<PointT> &in_points, float &A, float &B, float &C, float &D)
{

    if( in_points.size() <3 )
    {
        cerr<<"GetPanelEquation(...)函数中输入点的数量小于3."<<endl;
        return false;
    }

    A = in_points[0].y*(in_points[1].z-in_points[2].z) +
        in_points[1].y*(in_points[2].z-in_points[0].z) +
        in_points[2].y*(in_points[0].z-in_points[1].z);

 
    B = in_points[0].z*(in_points[1].x-in_points[2].x) +
        in_points[1].z*(in_points[2].x-in_points[0].x) +
        in_points[2].z*(in_points[0].x-in_points[1].x);

    C = in_points[0].x*(in_points[1].y-in_points[2].y) +
        in_points[1].x*(in_points[2].y-in_points[0].y) +
        in_points[2].x*(in_points[0].y-in_points[1].y);

    D = -in_points[0].x*(in_points[1].y*in_points[2].z - in_points[2].y*in_points[1].z) -
         in_points[1].x*(in_points[2].y*in_points[0].z - in_points[0].y*in_points[2].z) -
         in_points[2].x*(in_points[0].y*in_points[1].z - in_points[1].y*in_points[0].z);

    return 0;
}

 

c、其他

A = (y2 - y1)*(z3 - z1) - (z2 -z1)*(y3 - y1);

B = (x3 - x1)*(z2 - z1) - (x2 - x1)*(z3 - z1);

C = (x2 - x1)*(y3 - y1) - (x3 - x1)*(y2 - y1);

 

即得过P1,P2,P3的平面方程

方程也可写为    Ax + By + Cz + D = 0 (一般式)    其中D = -(A * x1 + B * y1 + C * z1)

 

d、也可以三个点 构造两个向量 进行叉乘 得到平面法线,再利用点法式求得。

 

以上是关于求空间平面方程的主要内容,如果未能解决你的问题,请参考以下文章

请问已知任意三点坐标,怎样求空间圆平面的方程以及圆心坐标?

点到平面的距离怎么求?

空间平面及其方程

给定三维空间里的任意三个点来确定一个平面方程Ax+By+Cz+D=0的求解过程及伪代码的实现

给定三维空间里的任意三个点来确定一个平面方程Ax+By+Cz+D=0的求解过程及伪代码的实现

基于最小二乘法的点云空间平面拟合(C++实现)