Code for the Homework1

时间:2023-03-08 21:14:37
Code for the Homework1

作业要求: http://www.cnblogs.com/bingc/p/4919692.html

代码(未使用Eigen):

 #include <iostream>
 #include <Eigen/Dense>
 using namespace Eigen;
 using Eigen::MatrixXd;
 using namespace std;
 class POINT
 {
 public:
     string name;
     double x, y;

 };
 class LINE
 {
 public:
     string name;
     POINT p_start,p_end;
 };
 class TRIANGLE
 {
 public:
     string name;
     POINT p1,p2, p3;
 };
 void rotate(POINT *pt, double angle);
 int main()
 {    string name,cmd,name1;
     int num;
     , l = , t = ;
     ;
     POINT point[maxnum];
     LINE line[maxnum];
     TRIANGLE triangle[maxnum];
     int flag;
     char a, b, c;
     double x, y, angle;
     )
     {
         cout << "存点、线、三角形,请输入0,操作点、线、三角形请输入1" << endl;
         cin >> flag;
         switch (flag)
         {
         :{
             cout << "请输入图形名称 点数 坐标" << endl;
             cin >> name;
             cin >> num;
             switch (num)
             {
             :
             {
                 if (p >= maxnum) { cout << "您的点的个数已达上限,不能再存!" << endl; break; }
                 point[p].name = name;
                 cin >> a >> point[p].x >> b >> point[p].y >> c;
                 p++;
                 break;
             }
             :
             {
                 if (l >= maxnum) { cout << "您的线的个数已达上限,不能再存!" << endl; break; }
                 line[l].name = name;
                 cin >> a >> line[l].p_start.x >> b >> line[l].p_start.y >> c >> a >> line[l].p_end.x >> b >> line[l].p_end.y >> c;
                 l++;
                 break;
             }
             :
             {
                 if (t >= maxnum) { cout << "您的三角形的个数已达上限,不能再存!" << endl; break; }
                 triangle[t].name = name;
                 cin >> a >> triangle[t].p1.x >> b >> triangle[t].p1.y >> c >> a >> triangle[t].p2.x >> b >> triangle[t].p2.y >> c >> a >> triangle[t].p3.x >> b >> triangle[t].p3.y >> c;
                 t++;
                 break;
             }
             default: {cout << "点数输入错误" << endl; break; }
             }
             break;
         }
         :{
             cout << "请输入操作指令" << endl;
             cin >> cmd;
             cin>> name1;
             if (cmd == "move")
             {
                 cin >> a >> x >> b >> y >> c;
                 ; i < p; i++)
                 {
                     if (name1 == point[i].name)
                     {
                         point[i].x += x;
                         point[i].y += y;
                         cout << "平移后的点为" << "(" << point[i].x << "," << point[i].y << ")" << endl;
                     }
                 }
                 ; i < l; i++)
                 {
                     if (name1 == line[i].name)
                     {
                         line[i].p_start.x += x;
                         line[i].p_start.y += y;
                         line[i].p_end.x += x;
                         line[i].p_end.y += y;
                         cout << "平移后的线段端点为" << "(" << line[i].p_start.x << "," << line[i].p_start.y << ")" << "、(" << line[i].p_end.x << "," << line[i].p_end.y << ")" << endl;
                     }
                 }
                 ; i < t; i++)
                 {
                     if (name1 == triangle[i].name)
                     {
                         triangle[i].p1.x += x;
                         triangle[i].p1.y += y;
                         triangle[i].p2.x += x;
                         triangle[i].p2.y += y;
                         triangle[i].p3.x += x;
                         triangle[i].p3.y += y;
                         cout << "平移后的三角形顶点为为" << "(" << triangle[i].p1.x << "," << triangle[i].p1.y << ")" << "、(" << triangle[i].p2.x << "," << triangle[i].p2.y << ")" << "、(" << triangle[i].p3.x << "," << triangle[i].p3.y << ")" << endl;
                     }
                 }
             }
             else if (cmd == "rotate")
             {
                 cin >> angle;
                 ; i < p; i++)
                 {
                     if (name1 == point[i].name)
                     {
                         rotate(&point[i], angle);
                         cout << "旋转后的点为" << "(" << point[i].x << "," << point[i].y << ")" << endl;
                     }
                 }
                 ; i < l; i++)
                 {
                     if (name1 == line[i].name)
                     {
                         rotate(&line[i].p_start, angle);
                         rotate(&line[i].p_end, angle);
                         cout << "旋转后的直线端点为" << "(" << line[i].p_start.x << "," << line[i].p_start.y << ")" << "、(" << line[i].p_end.x << "," << line[i].p_end.y << ")" << endl;
                     }
                 }
                 ; i < t; i++)
                 {
                     if (name1 == triangle[i].name)
                     {
                         rotate(&triangle[i].p1, angle);
                         rotate(&triangle[i].p2, angle);
                         rotate(&triangle[i].p3, angle);
                         cout << "旋转后的三角形顶点为为" << "(" << triangle[i].p1.x << "," << triangle[i].p1.y << ")" << "、(" << triangle[i].p2.x << "," << triangle[i].p2.y << ")" << "、(" << triangle[i].p3.x << "," << triangle[i].p3.y << ")" << endl;
                     }
                 }
             }
             else cout << "comand is error!" << endl;
             break;
         }
         default:{cout << "输入错误!" << endl; break; }

         }
     }

     ;
 }

 void rotate(POINT *pt, double angle)  //逆时针为正
 {
     double x, y,ang;
     x = pt->x;
     y = pt->y;
     ang = angle*;
     pt->x = x*cos(ang) - y*sin(ang);
     pt->y = x*sin(ang) + y*cos(ang);
 }

运行结果:

Code for the Homework1Code for the Homework1Code for the Homework1