1. 平面方程式、平面法線ベクトル、点から平面までの距離を求める
既知の 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) を作成します。平面法線はこれら 2 つのベクトルに垂直なので、法線ベクトルn:
平面 式: a(x-x1)+b(y-y1)+ c(z-z1)=0;
d=-a x1-b y1-c*z1.
平面方程式は ax+by+cz+d=0 です。
//已知3点坐标,求平面ax+by+cz+d=0;
void get_panel(Point p1,Point p2,Point p3,double &a,double &b,double &c,double &d)
{
a = (p2.y - p1.y)*(p3.z - p1.z) - (p2.z - p1.z)*(p3.y - p1.y);
b = (p2.z - p1.z)*(p3.x - p1.x) - (p2.x - p1.x)*(p3.z - p1.z);
c = (p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x);
d = 0 - (a * p1.x + b*p1.y + c*p1.z);
}
// 已知三点坐标,求法向量
Vec3 get_Normal(Point p1,Point p2,Point p3)
{
a = (p2.y - p1.y)*(p3.z - p1.z) - (p2.z - p1.z)*(p3.y - p1.y);
b = (p2.z - p1.z)*(p3.x - p1.x) - (p2.x - p1.x)*(p3.z - p1.z);
c = (p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x);
return Vec3(a, b, c);
}
//点到平面距离
double dis_pt2panel(Point pt,double a,double b,double c,double d)
{
return f_abs(a * pt.x + b*pt.y + c*pt.z + d) / sqrt(a * a + b * b + c * c);
}
空間にノイズがある特定の平面上の散乱点 (xi , yi , zi ) のグループを仮定します。i = 1 , 2 , ..., N , (x_{i},y_{i},z_{i } ),i=1,2,...,N,( ×私、y私、ぜ私) 、私=1 、2 、... ,N 、平面方程式の一般式A x + B y + C z + D = 0 Ax+By+Cz+D=0A ×+によって_+Cz _+D=0、原点を通過しない平面の場合、A x + B y + C z + 1 = 0 Ax+By+Cz+1=0A ×+によって_+Cz _+1=0であるため、散乱点ができるだけ平面上に収まるように係数 A、B、C を見つけることが問題になります。以下、2 つの観点から最小二乗法による最適解を導き出します。
誤差関数の最小点を見つける方法
A、B、C を平面の最適なパラメーターとすると、各点( xi 、 yi 、 zi ) について、 i = 1 、 2 、...、 N (x_ { i},y_{i},z_{i}),i=1,2,...,N( ×私、y私、ぜ私) 、私=1 、2 、... ,N は、この平面式に誤りがあることを示していますei = A xi + B yi + C zi + 1 e_{i}=Ax_{i}+By_{i}+Cz_{i}+1e私=A ×私+によって_私+Cz _私+1、すべての誤差の 2 乗を合計します。A
、B、および C を平面の最適なパラメーターとすると、平面の式に誤差がある各点について、すべての誤差の 2 乗を合計します。合計の結果は次のとおりです。
目に見える誤差の二乗和は A, B, C の関数です. この関数が 4 次元空間の凸超平面であり, 一意の最小値を持つことは簡単にわかります. これはグローバルな最小値でもあります. 次に、E から A、B、および C への一次偏導関数はすべて 0 です。つまり、
に
なります。x ˉ = 1 N ∑ i = 1 N xi , y ˉ = 1 N ∑ i = 1 N yi , z ˉ = 1 N ∑ i = 1 N zi , x 2 ˉ = 1 N ∑ i = 1 N xi 2 , y 2 ˉ = 1 N ∑ i = 1 N yi 2 , z 2 ˉ = 1 N ∑ i = 1 N zi 2 , xy ˉ = 1 N ∑ i = 1 N xiyi , xz ˉ = 1 N ∑ i = 1 N xizi , yz ˉ = 1 N ∑ i = 1 N yizi \bar{x}=\frac{1}{N}\sum_{i=1}^{N}x_{i},\bar{y}=\ frac{1}{N}\sum_{i=1}^{N}y_{i},\bar{z}=\frac{1}{N}\sum_{i=1}^{N}z_{ i},\bar{x^{2}}=\frac{1}{N}\sum_{i=1}^{N}x_{i}^{2},\bar{y^{2}} =\frac{1}{N}\sum_{i=1}^{N}y_{i}^{2},\bar{z^{2}}=\frac{1}{N}\sum_{ i=1}^{N}z_{i}^{2},\bar{xy}=\frac{1}{N}\sum_{i=1}^{N}x_{i}y_{i} ,\bar{xz}=\frac{1}{N}\sum_{i=1}^{N}x_{i}z_{i},\bar{yz}=\frac{1}{N}\ sum_{i=1}^{N}y_{i}z_{i}バツˉ=N1∑私は= 1Nバツ私,yˉ=N1∑私は= 1Ny私,ぜˉ=N1∑私は= 1Nぜ私,バツ2ˉ=N1∑私は= 1Nバツ私2、y2ˉ=N1∑私は= 1Ny私2、ぜ2ˉ=N1∑私は= 1Nぜ私2,xy _ˉ=N1∑私は= 1Nバツ私y私,× zˉ=N1∑私は= 1Nバツ私ぜ私,yzˉ=N1∑私は= 1Ny私ぜ私すると、(3) は次のように書ける。
(4) は 3 次元の方程式系であり、この方程式系を解くことで A、B、C の値が得られることがわかる。
幾何学的方法
導出に幾何学的方法を使用する方法を紹介しましょう.
X = [ x 1 x 2 . . . x N ] , X ′ = [ − 1 − B y 1 − C z 1 − 1 − B y 2 とします。 − C z 2 . . − 1 − B y N − C z N ] X=\begin{bmatrix} x_{1}\\ x_{2}\\ ...\\ x_{N} \end{ bmatrix },{X}'=\begin{bmatrix}-1-By_{1}-Cz_{1}\\ -1-By_{2}-Cz_{2}\\ ...\\ -1-By_ { N}-Cz_{N} \end{bmatrix}バツ=
なバツ1バツ2...バツNな
な,X」=
な− 1−によって_1−Cz _1− 1−によって_2−Cz _2...− 1−によって_N−Cz _Nな
な
ここでの問題は、誤差ベクトル AX-{X}' が直交するときの幾何学的観点から、AX が {X}' に最も近く、それらの誤差ベクトルが AX-{X}' であるような適切なパラメーター A を見つけることです。 X 最適な係数があれば、式
(5) を展開すると得られます。
式 (6) は (3) の最初の項目であることがわかります。Y = [ y 1 y 2 . . y N ] , Y ′ = [ − 1 − A x 1 − C z 1 − 1 − A x 2 − C z 2 . . . − 1 − A x N − C とする
。
z N ] , Z = [ z 1 z 2 . . z N ] , Z ′ = [ − 1 − A x 1 − B y 1 − 1 − A x 2 − B y 2 . . − 1 − A x N − B y N ] 、同様に次のようになります。 ..\\ y_{N}\end{bmatrix},{Y}'=\begin{bmatrix}-1-Ax_{1}-Cz_{1}\\-1-Ax_{2}-Cz_ {2} \\ ...\\ -1-Ax_{N}-Cz_{N} \end{bmatrix}, Z=\begin{bmatrix} z_{1}\\ z_{2}\\ ... \\ z_ {N} \end{bmatrix},{Z}'=\begin{bmatrix}-1-Ax_{1}-By_{1}\\ -1-Ax_{2}-By_{2}\\ ... \\ -1-Ax_{N}-By_{N} \end{bmatrix}、同様に Y^{T}(BY-{Y}')=0, Z^{T}( CZ-{Z }')=0よ=
なy1y2...yNな
な,や」=
な− 1−A ×1−Cz _1− 1−A ×2−Cz _2...− 1−A ×N−Cz _Nな
な、Z=
なぜ1ぜ2...ぜNな
な、Z」=
な− 1−A ×1−によって_1− 1−A ×2−によって_2...− 1−A ×N−によって_Nな
な、同様に: YT (BYY−よ) _=0 、ZT (CZ−Z) _=0、展開後、式 (3) の 2 番目と 3 番目の項目であることがわかります。
誤差関数の最小値を求める方法による最終的な最適最小二乗解の式は、幾何学的方法と同じであることがわかります。この方法を使用すると、空間内の 3 次元点群によって形成されたオブジェクトのローカル法線ベクトルを簡単に取得して、関連する計算を実行できます。たとえば、この点での音波の分布を計算したり、散乱を計算したりできます。この時点での光波。