空间几何(点线面)知识整理

一、点、面问题

1.已知点和任意平面,求投影点坐标

1.1 问题描述

   已知,点 P ( x 0 , y 0 , z 0 ) P(x_0 , y_0,z_0) P(x0,y0,z0) , 任意平面 Γ \Gamma Γ一般方程 : A x + B y + C z + D = 0 : Ax+By+Cz+D=0 Ax+By+Cz+D=0 ,求:点 P P P在平面 Γ \Gamma Γ 上的投影点坐标 P ′ ( x 1 , y 1 , z 1 ) P'(x_1 , y_1,z_1) P(x1,y1,z1)
在这里插入图片描述

1.2 原理公式推导

   因为投影点到已知点与平面垂直,根据垂直约束条件,易知
y 1 = B ( x 1 − x 0 ) A + y 0 y_1=\frac{B(x_1-x_0)}{A}+y_0 y1=AB(x1x0)+y0
z 1 = C ( x 1 − x 0 ) A + z 0 z_1=\frac{C(x_1-x_0)}{A}+z_0 z1=AC(x1x0)+z0
  代入平面 Γ \Gamma Γ 一般方程,可以解得:
x 1 = ( B 2 + C 2 ) x 0 − A ( B y 0 + C z 0 + D ) A 2 + B 2 + C 2 x_1=\frac{(B^2+C^2)x_0-A(By_0+Cz_0+D)}{A^2+B^2+C^2} x1=A2+B2+C2(B2+C2)x0A(By0+Cz0+D)
  将上式代回垂直约束条件的两个公式可得:
y 1 = ( A 2 + C 2 ) y 0 − B ( A x 0 + C z 0 + D ) A 2 + B 2 + C 2 y_1=\frac{(A^2+C^2)y_0-B(Ax_0+Cz_0+D)}{A^2+B^2+C^2} y1=A2+B2+C2(A2+C2)y0B(Ax0+Cz0+D)
z 1 = ( A 2 + B 2 ) z 0 − C ( A x 0 + B y 0 + D ) A 2 + B 2 + C 2 z_1=\frac{(A^2+B^2)z_0-C(Ax_0+By_0+D)}{A^2+B^2+C^2} z1=A2+B2+C2(A2+B2)z0C(Ax0+By0+D)

   由此解得空间三维点到平面的投影点坐标 P ′ ( x 1 , y 1 , z 1 ) P'(x_1 , y_1,z_1) P(x1,y1,z1)

1.3 代码实现

//拟合平面的系数  AX+BY+CZ+D=0; 其中A,B,C,是法向量
double A = coefficients->values[0];
double B = coefficients->values[1];
double C = coefficients->values[2];
double D = coefficients->values[3];

//平面外一点 x0 y0 z0 
double x0 = cloud->points[i].x;
double y0 = cloud->points[i].y;
double z0 = cloud->points[i].z;

//平面上一点 x1 y1 z1
double x1 = ((B * B + C * C) * x0 - A * (B * y0 + C * z0 + D)) / (A * A + B * B + C * C);
double y1 = ((A * A + C * C) * y0 - B * (A * x0 + C * z0 + D)) / (A * A + B * B + C * C);
double z1 = ((A * A + B * B) * z0 - C * (A * x0 + B * y0 + D)) / (A * A + B * B + C * C);

二、点、线问题

1.已知点和任意直线(点法式),求投影点坐标

1.1 问题描述

   已知,点 P ( x 0 , y 0 , z 0 ) P(x_0 , y_0,z_0) P(x0,y0,z0) , 任意直线 L 点法式方程 : x − a d = y − b e = z − c f :\frac{x-a}{d}=\frac{y-b}{e}=\frac{z-c}{f} dxa=eyb=fzc ,求:点 P P P在直线L 上的投影点坐标 P ′ ( x 1 , y 1 , z 1 ) P'(x_1 , y_1,z_1) P(x1,y1,z1)
在这里插入图片描述

1.2 原理公式推导

   直线L的参数方程为:
t = x − a d = y − b e = z − c f t=\frac{x-a}{d}=\frac{y-b}{e}=\frac{z-c}{f} t=dxa=eyb=fzc
   投影点坐标 P ′ ( x 1 , y 1 , z 1 ) P'(x_1 , y_1,z_1) P(x1,y1,z1)为:

x 1 = d t + a x_1=dt+a x1=dt+a
y 1 = e t + b y_1=et+b y1=et+b
z 1 = f t + c z_1=ft+c z1=ft+c

1.3 代码实现

2.已知点和任意直线(斜截式),求投影点坐标

2.1 问题描述

   已知,点 P ( x 0 , y 0 , z 0 ) P(x_0 , y_0,z_0) P(x0,y0,z0) , 任意直线 L 点法式方程 : x − a d = y − b e = z − c f :\frac{x-a}{d}=\frac{y-b}{e}=\frac{z-c}{f} dxa=eyb=fzc ,求:点 P P P在直线L 上的投影点坐标 P ′ ( x 1 , y 1 , z 1 ) P'(x_1 , y_1,z_1) P(x1,y1,z1)
在这里插入图片描述

2.2 原理公式推导

   直线L的参数方程为:
t = x − a d = y − b e = z − c f t=\frac{x-a}{d}=\frac{y-b}{e}=\frac{z-c}{f} t=dxa=eyb=fzc
   投影点坐标 P ′ ( x 1 , y 1 , z 1 ) P'(x_1 , y_1,z_1) P(x1,y1,z1)为:

x 1 = d t + a x_1=dt+a x1=dt+a
y 1 = e t + b y_1=et+b y1=et+b
z 1 = f t + c z_1=ft+c z1=ft+c

2.3 代码实现

三、线、面问题

1.已知任意直线和任意平面,求交点坐标

1.1 问题描述

   已知, 任意直线 L上一点 A ( x a , y a , z a ) A(x_a , y_a,z_a) A(xa,ya,za),其方向向量为 s ⃗ ( d , e , f ) \vec s (d , e,f) s (d,e,f) 。任意平面 Γ \Gamma Γ上的一点 B ( x b , y b , z b ) B(x_b , y_b,z_b) B(xb,yb,zb),其法向量为 n ⃗ ( i , j , k ) \vec n (i, j,k) n (i,j,k)求:直线 L在平面 Γ \Gamma Γ上的交点坐标 C ( x c , y c , z c ) C(x_c , y_c,z_c) C(xc,yc,zc)

在这里插入图片描述

1.2 原理公式推导

  参数 t 为:
t = ( x b − x a ) ∗ i + ( y b − y a ) ∗ j + ( z b − z a ) ∗ k i ∗ d + j ∗ e + k ∗ f t=\frac{(x_b-x_a)*i+(y_b-y_a)*j+(z_b-z_a)*k}{i * d + j*e +k*f} t=id+je+kf(xbxa)i+(ybya)j+(zbza)k
  交点坐标 C ( x c , y c , z c ) C(x_c , y_c,z_c) C(xc,yc,zc)为:

x c = d t + x a x_c=dt+x_a xc=dt+xa
y c = e t + y b y_c=et+y_b yc=et+yb
z c = f t + z c z_c=ft+z_c zc=ft+zc

1.3 代码实现

//保证 (i* d+ j* e+ k* f) 不为 0 ,即直线与平面不平行,一定相交
if(  (i* d+ j* e+ k* f) == 0   )
{
cout << "平面平行于直线,不存在交点" <<endl;
}

double t = (( xb-xa )*i+(yb-ya)*j+(zb-za)*k)/(i* d+ j* e+ k* f);

double xc=xa+dt;
double yc=ya+et;
double zc=za+ft;
//交点坐标 (x_c,y_c,z_c)

猜你喜欢

转载自blog.csdn.net/qq_38429958/article/details/126931185