作业要求: 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); }
运行结果: