程序设计小学期还要复习高数+线代,刺激
题目(2020/07/07)
第 8 天 : 空 间 点 、 线 和 面 第8天:空间点、线和面 第8天:空间点、线和面
实现三维解析几何中的点、直线和平面类
- 能够实现直线的不同创建方式(例如,两个点确定一条直线,两个相交的平面确定一条直线,空间曲线的点斜式)和平面的不同创建方式(例如,三个不共线的点确定一个平面,一个点和一个法向量确定一个平面);
- 能够计算相应的距离:两点之间的距离,点到直线的距离,点到平面的距离;
- 能够计算空间直线的单位方向向量(长度为1),空间平面的单位法向量 (长度为1);
- 能够判断点和线的关系,线和线的关系,点和平面的关系,线和平面的关
系,平面和平面的关系。
提示:
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)