zoukankan      html  css  js  c++  java
  • 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();
    private:
     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;
    }
    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;
    }
    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();
    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;
    }
    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)
      {
      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;
      }
      case '*':
      {
       fdvector();
       break;
      }
      default:
      {
       cout << "无此选项和功能,请重新输入。" << endl;
       break;
      }
     
      }

     }
     return 0;
    }
    这是一个在三维空间内对点线面操作的一个程序
     
  • 相关阅读:
    【Azure 应用服务】由 Azure Functions runtime is unreachable 的错误消息推导出 ASYNC(异步)和 SYNC(同步)混用而引起ThreadPool耗尽问题
    【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中
    【Azure 应用服务】Azure Function 不能被触发
    【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?
    【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
    【Azure 事件中心】azure-spring-cloud-stream-binder-eventhubs客户端组件问题, 实践消息非顺序可达
    【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)
    【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
    【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
    【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法
  • 原文地址:https://www.cnblogs.com/huangmouren233/p/13301105.html
Copyright © 2011-2022 走看看