20200714 千锤百炼软工人第九天
今天完善了下小学期作业
#include<iostream>
#include<cmath>
using namespace std;
class point
{
public:
point()
{}
void setpoint(int a, int b, int c)
{
x = a; y = b; z = c;
cout << "该点的坐标为:" << "(" << x << "," << y << "," << z << ")" << endl;
}
friend void dirvector();
int getpointx();
int getpointy();
int getpointz();
#include<cmath>
using namespace std;
class point
{
public:
point()
{}
void setpoint(int a, int b, int c)
{
x = a; y = b; z = c;
cout << "该点的坐标为:" << "(" << x << "," << y << "," << z << ")" << endl;
}
friend void dirvector();
int getpointx();
int getpointy();
int getpointz();
private:
int x, y, z;
};
int x, y, z;
};
int point::getpointx()
{
return x;
}
int point::getpointy()
{
return y;
}
int point::getpointz()
{
return z;
}
void dirvector()
{
point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入一个点的坐标";
cin >> x1 >> y1 >> z1;
a.setpoint(x1, y1, z1);
cout << "请输入另一个点的坐标";
cin >> x2 >> y2 >> z2;
b.setpoint(x2, y2, z2);
cout << "该直线方程为:" << "(" << "x-" << a.x << ")/(" << b.x << "-" << a.x << ")=(y-" << a.y << ")/(" << b.y << "-" << a.y << ")=(z-" << a.z << ")/(" << b.z << "-" << a.z << ")" << endl;
double m, n, p, v;
m = a.y*b.z - b.y*a.z;
n = b.x*a.z - a.x*b.z;
p = a.x*b.y - b.x*a.y;
v = sqrt(m*m + n * n + p * p);
m = m / v;
n = n / v;
p = p / v;
cout << "单位方向向量为:(" << m << "," << n << "," << p << ")" << endl;
}
class line
{
public:
line()
{}
line(int x, int y, int z)
{
a = x; b = y; c = z;
cout << "该直线方程为:" << a << "x+" << b << "y+" << c << "=0" << endl;
}
void setline()
{
cout << "请输入直线方程的3个参数:";
cin >> a >> b >> c;
cout << "该直线方程为:" << a << "x+" << b << "y+" << c << "=0" << endl;
}
int getlinea();
int getlineb();
int getlinec();
private:
int a, b, c;
};
int line::getlinea()
{
return a;
}
int line::getlineb()
{
return b;
}
int line::getlinec()
{
return c;
}
{
return x;
}
int point::getpointy()
{
return y;
}
int point::getpointz()
{
return z;
}
void dirvector()
{
point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入一个点的坐标";
cin >> x1 >> y1 >> z1;
a.setpoint(x1, y1, z1);
cout << "请输入另一个点的坐标";
cin >> x2 >> y2 >> z2;
b.setpoint(x2, y2, z2);
cout << "该直线方程为:" << "(" << "x-" << a.x << ")/(" << b.x << "-" << a.x << ")=(y-" << a.y << ")/(" << b.y << "-" << a.y << ")=(z-" << a.z << ")/(" << b.z << "-" << a.z << ")" << endl;
double m, n, p, v;
m = a.y*b.z - b.y*a.z;
n = b.x*a.z - a.x*b.z;
p = a.x*b.y - b.x*a.y;
v = sqrt(m*m + n * n + p * p);
m = m / v;
n = n / v;
p = p / v;
cout << "单位方向向量为:(" << m << "," << n << "," << p << ")" << endl;
}
class line
{
public:
line()
{}
line(int x, int y, int z)
{
a = x; b = y; c = z;
cout << "该直线方程为:" << a << "x+" << b << "y+" << c << "=0" << endl;
}
void setline()
{
cout << "请输入直线方程的3个参数:";
cin >> a >> b >> c;
cout << "该直线方程为:" << a << "x+" << b << "y+" << c << "=0" << endl;
}
int getlinea();
int getlineb();
int getlinec();
private:
int a, b, c;
};
int line::getlinea()
{
return a;
}
int line::getlineb()
{
return b;
}
int line::getlinec()
{
return c;
}
void ppsetline()
{
point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入一个点的坐标";
cin >> x1 >> y1 >> z1;
cout << "请输入另一个点的坐标";
cin >> x2 >> y2 >> z2;
a.setpoint(x1, y1, z1);
b.setpoint(x2, y2, z2);
cout << "该直线方程为:" << "(" << "x-" << a.getpointx() << ")/(" << b.getpointx() << "-" << a.getpointx() << ")=(y-" << a.getpointy() << ")/(" << b.getpointy() << "-" << a.getpointy() << ")=(z-" << a.getpointz() << ")/(" << b.getpointz() << "-" << a.getpointz() << ")" << endl;
{
point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入一个点的坐标";
cin >> x1 >> y1 >> z1;
cout << "请输入另一个点的坐标";
cin >> x2 >> y2 >> z2;
a.setpoint(x1, y1, z1);
b.setpoint(x2, y2, z2);
cout << "该直线方程为:" << "(" << "x-" << a.getpointx() << ")/(" << b.getpointx() << "-" << a.getpointx() << ")=(y-" << a.getpointy() << ")/(" << b.getpointy() << "-" << a.getpointy() << ")=(z-" << a.getpointz() << ")/(" << b.getpointz() << "-" << a.getpointz() << ")" << endl;
}
void pdsetline()
{
point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入直线上一个点的坐标";
cin >> x1 >> y1 >> z1;
cout << "请输入该直线的方向向量的坐标";
cin >> x2 >> y2 >> z2;
a.setpoint(x1, y1, z1);
b.setpoint(x2, y2, z2);
cout << "该直线方程为:" << "(x-" << a.getpointx() << ")/" << b.getpointx() << "=" << "(y-" << a.getpointy() << ")/" << b.getpointy() << "=" << "(z-" << a.getpointz() << ")/" << b.getpointz() << endl;
void pdsetline()
{
point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入直线上一个点的坐标";
cin >> x1 >> y1 >> z1;
cout << "请输入该直线的方向向量的坐标";
cin >> x2 >> y2 >> z2;
a.setpoint(x1, y1, z1);
b.setpoint(x2, y2, z2);
cout << "该直线方程为:" << "(x-" << a.getpointx() << ")/" << b.getpointx() << "=" << "(y-" << a.getpointy() << ")/" << b.getpointy() << "=" << "(z-" << a.getpointz() << ")/" << b.getpointz() << endl;
}
void pvsetline()
{
point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入直线上一个点的坐标";
cin >> x1 >> y1 >> z1;
cout << "请输入该直线的法向量的坐标";
cin >> x2 >> y2 >> z2;
a.setpoint(x1, y1, z1);
b.setpoint(x2, y2, z2);
cout << "该平面方程为:" << "(x-" << a.getpointx() << ")*" << b.getpointx() << "+" << "(y-" << a.getpointy() << ")*" << b.getpointy() << "+" << "(z-" << a.getpointz() << ")*" << b.getpointz() << "=0" << endl;
}
class flat
{
public:
flat()
{}
flat(int x, int y, int z, int q)
{
a = x;
b = y;
c = z;
d = q;
cout << "该平面方程为:" << a << "x+" << b << "y+" << c << "z+" << d << "=0" << endl;
}
void setflat();
int getflata();
int getflatb();
int getflatc();
int getflatd();
void pvsetline()
{
point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入直线上一个点的坐标";
cin >> x1 >> y1 >> z1;
cout << "请输入该直线的法向量的坐标";
cin >> x2 >> y2 >> z2;
a.setpoint(x1, y1, z1);
b.setpoint(x2, y2, z2);
cout << "该平面方程为:" << "(x-" << a.getpointx() << ")*" << b.getpointx() << "+" << "(y-" << a.getpointy() << ")*" << b.getpointy() << "+" << "(z-" << a.getpointz() << ")*" << b.getpointz() << "=0" << endl;
}
class flat
{
public:
flat()
{}
flat(int x, int y, int z, int q)
{
a = x;
b = y;
c = z;
d = q;
cout << "该平面方程为:" << a << "x+" << b << "y+" << c << "z+" << d << "=0" << endl;
}
void setflat();
int getflata();
int getflatb();
int getflatc();
int getflatd();
private:
int a, b, c, d;
};
int flat::getflata()
{
return a;
}
int flat::getflatb()
{
return b;
}
int flat::getflatc()
{
return c;
}
int flat::getflatd()
{
return d;
}
void flat::setflat()
{
cout << "请输入平面方程的4个参数:";
cin >> a >> b >> c >> d;
cout << "该平面方程为:" << a << "x+" << b << "y+" << c << "z+" << d << "=0" << endl;
}
void fdvector()
{
flat f;
f.setflat();
cout << "该平面的单位法向量为:";
double a, b, c, v;
v = sqrt(f.getflata()*f.getflata() + f.getflatb()*f.getflatb() + f.getflatc()*f.getflatc());
a = f.getflata() / v;
b = f.getflatb() / v;
c = f.getflatb() / v;
cout << "(" << a << "," << b << "," << c << ")" << endl;
}
int a, b, c, d;
};
int flat::getflata()
{
return a;
}
int flat::getflatb()
{
return b;
}
int flat::getflatc()
{
return c;
}
int flat::getflatd()
{
return d;
}
void flat::setflat()
{
cout << "请输入平面方程的4个参数:";
cin >> a >> b >> c >> d;
cout << "该平面方程为:" << a << "x+" << b << "y+" << c << "z+" << d << "=0" << endl;
}
void fdvector()
{
flat f;
f.setflat();
cout << "该平面的单位法向量为:";
double a, b, c, v;
v = sqrt(f.getflata()*f.getflata() + f.getflatb()*f.getflatb() + f.getflatc()*f.getflatc());
a = f.getflata() / v;
b = f.getflatb() / v;
c = f.getflatb() / v;
cout << "(" << a << "," << b << "," << c << ")" << endl;
}
void ffsetline()
{
flat f1, f2;
f1.setflat();
f2.setflat();
point a, b;
a.setpoint(f1.getflata(), f1.getflatb(), f1.getflatc());
b.setpoint(f2.getflata(), f2.getflatb(), f2.getflatc());
double m, n, p;
m = a.getpointy()*b.getpointz() - b.getpointy()*a.getpointz();
n = b.getpointx()*a.getpointz() - a.getpointx()*b.getpointz();
p = a.getpointx()*b.getpointy() - b.getpointx()*a.getpointy();
cout << "所得直线的单位方向向量为:(" << m << "," << n << "," << p << ")" << endl;
int q, w, e;
e = (f1.getflatb() / f2.getflatb() - f1.getflatd()) / (f1.getflatc() - f1.getflatb() / f2.getflatb()*f2.getflatc());
w = (-f1.getflatd() - e * f1.getflatc()) / f1.getflatd();
q = (-f1.getflatb()*w - e * f1.getflatc() - f1.getflatd()) / f1.getflata();
cout << "(x-" << q << ")" << "/" << m << "=(y-" << w << ")" << "/" << n << "=(z-" << e << ")" << "/" << p << endl;
}
double ppdistance(point a, point b)
{
cout << "两点间的距离为:";
return sqrt((a.getpointx() - b.getpointx())*(a.getpointx() - b.getpointx()) + (a.getpointy() - b.getpointy())*(a.getpointy() - b.getpointy()) + (a.getpointz() - b.getpointz())*(a.getpointz() - b.getpointz()));
}
double pldistance(point m, line n)
{
cout << "点到直线的距离为:";
return abs(m.getpointx()*n.getlinea() + m.getpointy()*n.getlineb() + n.getlinec()) / sqrt(n.getlinea()*n.getlinea() + n.getlineb()*n.getlineb());
}
double pfdistance(point m, flat n)
{
cout << "点到平面的距离为:";
return abs(m.getpointx()*n.getflata() + m.getpointy()*n.getflatb() + m.getpointz()*n.getflatc() + n.getflatd()) / sqrt(n.getflata()*n.getflata() + n.getflatb()*n.getflatb() + n.getflatc()*n.getflatc());
}
void pppsetflat()
{
point a, b, c;
int x1, x2, x3, y1, y2, y3, z1, z2, z3;
cout << "请输入平面上一个点的坐标";
cin >> x1 >> y1 >> z1;
a.setpoint(x1, y1, z1);
cout << "请输入平面上一个点的坐标";
cin >> x2 >> y2 >> z2;
b.setpoint(x2, y2, z2);
cout << "请输入平面上的一个点坐标";
cin >> x3 >> y3 >> z3;
c.setpoint(x3, y3, z3);
double m, n, p;
m = a.getpointy()*b.getpointz() - b.getpointy()*a.getpointz();
n = b.getpointx()*a.getpointz() - a.getpointx()*b.getpointz();
p = a.getpointx()*b.getpointy() - b.getpointx()*a.getpointy();
cout << "(x-" << c.getpointx() << ")/" << m << "=(y-" << c.getpointy() << ")/" << n << "=(z-" << c.getpointz() << ")/" << p << endl;
}
int main()
{
while (1)
{
cout << "《欢迎进入点直线平面创建及应用平台》" << endl;
cout << "1 创建点" << endl;
cout << "2 以两个点确定的一条直线" << endl;
cout << "3 以两个相交平面确定的一条直线" << endl;
cout << "4 以空间曲线的点向式确定的一条直线" << endl;
cout << "5 以三个不同点确定的一个平面" << endl;
cout << "6 以一个点和一个法向量确定的一个平面" << endl;
cout << "7 两点的距离" << endl;
cout << "8 点到直线的距离" << endl;
cout << "9 点到平面距离" << endl;
cout << "0 空间直线的单位方向向量" << endl;
cout << "*空间平面的单位法向量" << endl;
cout << "请选择:";
char option;
cin >> option;
switch (option)
{
{
flat f1, f2;
f1.setflat();
f2.setflat();
point a, b;
a.setpoint(f1.getflata(), f1.getflatb(), f1.getflatc());
b.setpoint(f2.getflata(), f2.getflatb(), f2.getflatc());
double m, n, p;
m = a.getpointy()*b.getpointz() - b.getpointy()*a.getpointz();
n = b.getpointx()*a.getpointz() - a.getpointx()*b.getpointz();
p = a.getpointx()*b.getpointy() - b.getpointx()*a.getpointy();
cout << "所得直线的单位方向向量为:(" << m << "," << n << "," << p << ")" << endl;
int q, w, e;
e = (f1.getflatb() / f2.getflatb() - f1.getflatd()) / (f1.getflatc() - f1.getflatb() / f2.getflatb()*f2.getflatc());
w = (-f1.getflatd() - e * f1.getflatc()) / f1.getflatd();
q = (-f1.getflatb()*w - e * f1.getflatc() - f1.getflatd()) / f1.getflata();
cout << "(x-" << q << ")" << "/" << m << "=(y-" << w << ")" << "/" << n << "=(z-" << e << ")" << "/" << p << endl;
}
double ppdistance(point a, point b)
{
cout << "两点间的距离为:";
return sqrt((a.getpointx() - b.getpointx())*(a.getpointx() - b.getpointx()) + (a.getpointy() - b.getpointy())*(a.getpointy() - b.getpointy()) + (a.getpointz() - b.getpointz())*(a.getpointz() - b.getpointz()));
}
double pldistance(point m, line n)
{
cout << "点到直线的距离为:";
return abs(m.getpointx()*n.getlinea() + m.getpointy()*n.getlineb() + n.getlinec()) / sqrt(n.getlinea()*n.getlinea() + n.getlineb()*n.getlineb());
}
double pfdistance(point m, flat n)
{
cout << "点到平面的距离为:";
return abs(m.getpointx()*n.getflata() + m.getpointy()*n.getflatb() + m.getpointz()*n.getflatc() + n.getflatd()) / sqrt(n.getflata()*n.getflata() + n.getflatb()*n.getflatb() + n.getflatc()*n.getflatc());
}
void pppsetflat()
{
point a, b, c;
int x1, x2, x3, y1, y2, y3, z1, z2, z3;
cout << "请输入平面上一个点的坐标";
cin >> x1 >> y1 >> z1;
a.setpoint(x1, y1, z1);
cout << "请输入平面上一个点的坐标";
cin >> x2 >> y2 >> z2;
b.setpoint(x2, y2, z2);
cout << "请输入平面上的一个点坐标";
cin >> x3 >> y3 >> z3;
c.setpoint(x3, y3, z3);
double m, n, p;
m = a.getpointy()*b.getpointz() - b.getpointy()*a.getpointz();
n = b.getpointx()*a.getpointz() - a.getpointx()*b.getpointz();
p = a.getpointx()*b.getpointy() - b.getpointx()*a.getpointy();
cout << "(x-" << c.getpointx() << ")/" << m << "=(y-" << c.getpointy() << ")/" << n << "=(z-" << c.getpointz() << ")/" << p << endl;
}
int main()
{
while (1)
{
cout << "《欢迎进入点直线平面创建及应用平台》" << endl;
cout << "1 创建点" << endl;
cout << "2 以两个点确定的一条直线" << endl;
cout << "3 以两个相交平面确定的一条直线" << endl;
cout << "4 以空间曲线的点向式确定的一条直线" << endl;
cout << "5 以三个不同点确定的一个平面" << endl;
cout << "6 以一个点和一个法向量确定的一个平面" << endl;
cout << "7 两点的距离" << endl;
cout << "8 点到直线的距离" << endl;
cout << "9 点到平面距离" << endl;
cout << "0 空间直线的单位方向向量" << endl;
cout << "*空间平面的单位法向量" << endl;
cout << "请选择:";
char option;
cin >> option;
switch (option)
{
case '1':
{point a;
int x, y, z;
cout << "请输入点的坐标";
cin >> x >> y >> z;
a.setpoint(x, y, z);
break; }
case '2':
{
ppsetline();
break;
}
case '3':
{
ffsetline();
break;
}
case '4':
{
pdsetline();
break;
}
case '5':
{
pppsetflat();
break;
}
case '6':
{
pvsetline();
break;
}
case '7':
{point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入一个点的坐标";
cin >> x1 >> y1 >> z1;
cout << "请输入另一个点的坐标";
cin >> x2 >> y2 >> z2;
a.setpoint(x1, y1, z1);
b.setpoint(x2, y2, z2);
cout << ppdistance(a, b) << endl;
break;
}
case '8':
{
point a;
line l;
int x, y, z;
cout << "请输入一个点的坐标";
cin >> x >> y >> z;
a.setpoint(x, y, z);
l.setline();
cout << pldistance(a, l) << endl;
break;
}
case '9':
{
point a;
flat f;
int x, y, z;
cout << "请输入一个点的坐标";
cin >> x >> y >> z;
a.setpoint(x, y, z);
f.setflat();
cout << pfdistance(a, f) << endl;
break;
}
case '0':
{
dirvector();
break;
{point a;
int x, y, z;
cout << "请输入点的坐标";
cin >> x >> y >> z;
a.setpoint(x, y, z);
break; }
case '2':
{
ppsetline();
break;
}
case '3':
{
ffsetline();
break;
}
case '4':
{
pdsetline();
break;
}
case '5':
{
pppsetflat();
break;
}
case '6':
{
pvsetline();
break;
}
case '7':
{point a, b;
int x1, x2, y1, y2, z1, z2;
cout << "请输入一个点的坐标";
cin >> x1 >> y1 >> z1;
cout << "请输入另一个点的坐标";
cin >> x2 >> y2 >> z2;
a.setpoint(x1, y1, z1);
b.setpoint(x2, y2, z2);
cout << ppdistance(a, b) << endl;
break;
}
case '8':
{
point a;
line l;
int x, y, z;
cout << "请输入一个点的坐标";
cin >> x >> y >> z;
a.setpoint(x, y, z);
l.setline();
cout << pldistance(a, l) << endl;
break;
}
case '9':
{
point a;
flat f;
int x, y, z;
cout << "请输入一个点的坐标";
cin >> x >> y >> z;
a.setpoint(x, y, z);
f.setflat();
cout << pfdistance(a, f) << endl;
break;
}
case '0':
{
dirvector();
break;
}
case '*':
{
fdvector();
break;
}
default:
{
cout << "无此选项和功能,请重新输入。" << endl;
break;
}
case '*':
{
fdvector();
break;
}
default:
{
cout << "无此选项和功能,请重新输入。" << endl;
break;
}
}
}
return 0;
}
这是一个在三维空间内对点线面操作的一个程序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」