程序设计小学期还要复习高数+线代,刺激
第 8 天 : 空 间 点 、 线 和 面 第8天:空间点、线和面 第8天:空间点、线和面
实现三维解析几何中的点、直线和平面类
提示:
1.点、直线和平面分别用类来封装,每个类的数据为该表示该类需要的参
数,例如,对于空间平面的一般方程为ax+by+cz+d=0,那么私有数据成 员为a,b,c和d;
2.空间直线和平面的不同创建方式定义为对应类的成员函数;
3.空间点和点、点和直线、点和平面、直线和直线、直线和平面、平面和平面位置关系的判断定义为一般的函数;
4.要在main函数中对上述功能进行调用和验证。
两点式:
设两点为 A ( x 1 , x 2 , x 3 ) A\left( x_{1},x_{2},x_{3}\right) A(x1,x2,x3)和 B ( x 1 , x 2 , x 3 ) B\left(x_{1},x_{2},x_{3}\right) B(x1,x2,x3),那么有方程为
x − x 1 x 2 − x 1 = y − y 1 y 2 − y 1 = z − z 1 z 2 − z 1 \dfrac {x-x_{1}}{x_{2}-x_{1}}=\dfrac {y-y_{1}}{y_{2}-y_{1}}=\dfrac {z-z_{1}}{z_{2}-z_{1}} x2−x1x−x1=y2−y1y−y1=z2−z1z−z1
一般式:
{ Π 1 : A 1 x + B 1 y + C 1 z + D 1 = 0 Π 2 : A 2 X + B 2 Y + C 2 z + D 2 = 0 \begin{cases}\Pi _{1}:A_{1}x+B_{1}y+C_{1}z+D_{1}=0\\ \Pi _{2}:A_{2}X+B_{2}Y+C_{2}z+D_{2}=0\end{cases} {Π1:A1x+B1y+C1z+D1=0Π2:A2X+B2Y+C2z+D2=0
点斜式:
方向向量: S → = ( m , n , p ) \overrightarrow {S}=\left( m,n,p\right) S=(m,n,p)
固定点: M 0 ( x 0 , y 0 , z 0 ) M_{0}\left( x_{0},y_{0},z_{0}\right) M0(x0,y0,z0)
有: M 0 M → = ( x − x 0 , y − y 0 , z − z 0 ) \overrightarrow {M_{0}M}=\left( x-x_{0},y-y_{0},z-z_{0}\right) M0M=(x−x0,y−y0,z−z0)
x − x 0 m = y − y 0 n = z − z 0 p \dfrac {x-x_{0}}{m}=\dfrac {y-y_{0}}{n}=\dfrac {z-z_{0}}{p} mx−x0=ny−y0=pz−z0
标准式:
固定点: M 0 ( x 0 , y 0 , z 0 ) M_{0}\left( x_{0},y_{0},z_{0}\right) M0(x0,y0,z0)
A ( x − x 0 ) + B ( y − y 0 ) + C ( z − z 0 ) = 0 A\left( x-x_{0}\right) +B\left( y-y_{0}\right) +C\left( z-z_{0}\right)=0 A(x−x0)+B(y−y0)+C(z−z0)=0
A x + B y + C z − A x 0 − B y 0 − C z 0 = 0 Ax+By+Cz-Ax_{0}-By_{0}-Cz_{0}=0 Ax+By+Cz−Ax0−By0−Cz0=0
两点间距离公式 (送分 )
d = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 + ( z 2 − z 1 ) 2 d=\sqrt {\left( x_{2}-x_{1}\right) ^{2}+\left( y_{2}-y_{1}\right) ^{2}+\left( z_{2}-z_{1}\right) ^{2}} d=(x2−x1)2+(y2−y1)2+(z2−z1)2
求点到线距离: (仅知道线上两点)
海伦公式:
S = p ( p − a ) ( p − b ) ( p − c ) S=\sqrt {p\left( p-a\right) \left( p-b\right) \left( p-c\right) } S=p(p−a)(p−b)(p−c)
公式描述:
公式中a,b,c分别为三角形三边长,p为半周长,S为三角形的面积。
点到面距离:
d = ∣ A x 0 + B y 0 + C z 0 + D ∣ A 2 + B 2 + C 2 d=\dfrac {\left| Ax_{0}+By_{0}+Cz_{0}+D\right| }{\sqrt {A^{2}+B^{2}+C^{2}}} d=A2+B2+C2∣Ax0+By0+Cz0+D∣
空间直线的单位方向向量:
e = A B → ∣ A B → ∣ e=\dfrac {\overrightarrow {AB}}{\left| \overrightarrow {AB}\right| } e=∣∣∣AB∣∣∣AB
空间平面的单位法向量:
( a t , b t c , t ) ( t = a 2 + b 2 + c 2 ) \left( \dfrac {a}{t},\dfrac {b}{t}\dfrac {c}{,t}\right) \left( t= \sqrt {a^{2}+b^{2}+c^{2}}\right) (ta,tb,tc)(t=a2+b2+c2)
已知三个点求平面方程:
ps. 此图片来源于C++里已知三个三维点,求他们的平面方程,怎么做?
点线位置关系:
海伦公式:
S = p ( p − a ) ( p − b ) ( p − c ) S=\sqrt {p\left( p-a\right) \left( p-b\right) \left( p-c\right) } S=p(p−a)(p−b)(p−c)
公式描述:
公式中a,b,c分别为三角形三边长,p为半周长,S为三角形的面积。
线线位置关系:
e x 1 e x 2 = e y 1 e y 2 = e z 1 e z 2 = 1 ( 线 线 重 合 ) \dfrac {e_{x1}}{e_{x2}}=\dfrac {e_{y1}}{e_{y2}}=\dfrac {e_{z1}}{e_{z2}}=1\left( 线线重合\right) ex2ex1=ey2ey1=ez2ez1=1(线线重合)
e x 1 e x 2 = e y 1 e y 2 = e z 1 e z 2 ≠ 1 ( 线 线 平 行 ) \dfrac {e_{x1}}{e_{x2}}=\dfrac {e_{y1}}{e_{y2}}=\dfrac {e_{z1}}{e_{z2}}\neq 1\left( 线线平行\right) ex2ex1=ey2ey1=ez2ez1=1(线线平行)
其 他 : 相 交 且 不 平 行 其他:相交且不平行 其他:相交且不平行
点面位置关系:
点到面距离:
d = ∣ A x 0 + B y 0 + C z 0 + D ∣ A 2 + B 2 + C 2 d=\dfrac {\left| Ax_{0}+By_{0}+Cz_{0}+D\right| }{\sqrt {A^{2}+B^{2}+C^{2}}} d=A2+B2+C2∣Ax0+By0+Cz0+D∣
线面位置关系:
e 1 → ⋅ n 1 → + e 2 → ⋅ n 2 → + e 3 → ⋅ n 3 → = 0 ( 线 面 平 行 ) \overrightarrow {e_{1}}\cdot \overrightarrow {n_{1}}+\overrightarrow {e_{2}}\cdot \overrightarrow {n_{2}}+\overrightarrow {e_{3}}\cdot \overrightarrow {n_{3}}=0\left( 线面平行\right) e1⋅n1+e2⋅n2+e3⋅n3=0(线面平行)
e 1 → n 1 → = e 2 → n 2 → = e 3 → n 3 → = 0 ( 线 面 垂 直 ) \dfrac {\overrightarrow {e_{1}}}{\overrightarrow {n_{1}}}=\dfrac {\overrightarrow {e_{2}}}{\overrightarrow {n_{2}}}=\dfrac {\overrightarrow {e_{3}}}{\overrightarrow {n_{3}}}=0\left( 线面垂直\right) n1e1=n2e2=n3e3=0(线面垂直)
面面位置关系:
n x 1 n x 2 = n y 1 n y 2 = n z 1 n z 2 ≠ 0 ( 面 面 平 行 ) \dfrac {n_{x_{1}}}{n_{x_{2}}}=\dfrac {n_{y_{1}}}{n_{y_{2}}}=\dfrac {n_{z_{1}}}{n_{z_{2}}}\neq 0\left( 面面平行\right) nx2nx1=ny2ny1=nz2nz1=0(面面平行)
{ n x 1 = n x 2 n y 1 = n y 2 n z 1 = n z 2 ( 面 面 垂 直 ) \begin{aligned}\begin{cases}n_{x_{1}}=n_{x_{2}}\\ n_{y_{1}}=n_{y_{2}}\\ n_{z_{1}}=n_{z_{2}}\end{cases}\\ \left( 面面垂直\right) \end{aligned} ⎩⎪⎨⎪⎧nx1=nx2ny1=ny2nz1=nz2(面面垂直)
给出点线面的类定义:
class point
{
public:
double x,y,z;
void input(){cin>>x>>y>>z;};
void output(){cout<<"该点为:"<<"("<<x<<","<<y<<","<<z<<")"<<endl;};
void dist();//求两点之间的距离
};
class line:public point//继承
{
public:
int m,n,p;//点斜式方向向量分量
int x,y,z;//点斜式点的坐标分量
point i,j;//每一条线由两个点确定
void Two_point_formula();//两点式
void Intersection_plane();
void P_oblique_type();
void D_point_to_line();
void L_vector();
};
class plane
{
public:
double a,b,c,d;
void setm();//赋值
void points_form_plane();//三点成面
void dot_method();//点法式
void showm();//方程式
void D_point_to_plane();//点到平面的距离
void n();//单位法向量
};
求两点之间的距离函数:
void point::dist()//求两点之间的距离
{
double l;
point m,n;
cout<<"请输入第一个点的坐标(x1,y1,z1): "<<endl;
m.input(); m.output();
cout<<"请输入第二个点的坐标(x2,y2,z2): "<<endl;
n.input(); n.output();
l=sqrt((n.x-m.x)*(n.x-m.x)+(n.y-m.y)*(n.y-m.y)+(n.z-m.z)*(n.z-m.z));
cout<<"两点之间的距离为= "<<l;
}
点到线(由两个点来表示直线)的距离
void line::D_point_to_line()//点到线(由两个点来表示直线)的距离
{//海伦公式
point y;
point d1,d2;
y.input();y.output();
d1.input();d1.output();
d2.input();d2.output();
double i1,i2,i3;
double p,s,l;
i1=sqrt((d1.x-d2.x)*(d1.x-d2.x)+(d1.y-d2.y)*(d1.y-d2.y)+(d1.z-d2.z)*(d1.z-d2.z));
i2=sqrt((d1.x-y.x)*(d1.x-y.x)+(d1.x-y.x)*(d1.y-y.y)+(d1.z-y.z)*(d1.z-y.z));
i3=sqrt((d2.x-y.x)*(d2.x-y.x)+(d2.y-y.y)*(d2.y-y.y)+(d2.z-y.z)*(d2.z-y.z));
p=(i1+i2+i3)/2;
s=sqrt(p*(p-i1)*(p-i2)*(p-i3));
l=2*s/i1;
cout<<l<<endl;
}
其他靠自己了
英语学习:
平面:plane 输入:input,输出:output,距离:dist(distance)
点到线的距离:D_point_to_line(Distancefrom point to line)
点到平面的距离:D_point_to_plane(Distancefrom point to plane)
直线单位方向向量:L_vector(Linearunit direction vector)
点线位置关系:P_line_position(Point line position relationship)
线线位置关系:Line_position(Line position relation)
点面位置关系:point_surface_Position(Positionrelation of point and surface)
线面位置关系:line_surface_Position(Positionrelation of line and surface)
面面位置关系:Surface_position(Surface position relation)
点斜式:P_oblique_type(Pointoblique type)
点法式:dot_method(dotmethod)
三点成面:points_form_plane(Threepoints form a plane)
两点式:Two_point_formula(Twopoint formula)
相交平面:Intersection_plane(Intersectionplane)