第一次编程作业
第一次编程作业暂时完成了简单的要求,但仍然存在一些问题:
- 输入的图形的
name
目前并没有起到什么作用,应该是用类的方式来编写,但是由于C++掌握的不够,对类的应用还不到位,还没有形成这种思维以及编写方式。 - 没有完善的判断,目前程序只有在输入格式完全符合要求才能好好运行,对于输错的情况没有判断。
程序如下:
main.cpp
#include <iostream>
#include "method.h"
#include <cstring>
using namespace std;
int main(){
char name[10];
int point_num;
char point_trans[20]; //用于临时接收坐标值
cout << "请输入图形:"<< endl;
cin >> name;
cin >> point_num;
Vector2d point[point_num]; //根据点生成向量数组
for(int i = 0; i < point_num; i++){
cin >> point_trans;
point[i] = getpoint(point_trans);
}
cout << "请输入操作指令:"<<endl;
char manip[10];
char name_cmp[10];
double angle;
cin >> manip;
cin >> name_cmp;
if(strcmp(manip, "move") == 0){
cin >> point_trans;
Vector2d u = getpoint(point_trans);
for(int i = 0; i < point_num; i++){
point_move(point[i], u);
}
}
else if(strcmp(manip, "rotate") == 0){
cin >> angle;
for(int i = 0; i < point_num; i++){
point_rotate(point[i], angle);
}
}
cout <<"操作后的结果为:"<< endl;
for(int i = 0; i < point_num; i++){
cout << "(" << point[i](0) << "," << point[i](1) << ")";
cout <<" ";
}
cout << endl;
return 0;
}
method.h
#include <Eigen/Dense>
#include <cmath>
#include <cstring>
#define PI 3.14159265
using namespace Eigen;
Vector2d getpoint(char *str){
Vector2d v;
char x[10], y[10];
int i = 1, j = 0;
for (; i<20 && str[i]!=','; i++ ){
x[j] = str[i];
j++;
}
i++;
j = 0;
for (; i<20 && str[i]!=')'; i++){
y[j] = str[i];
j++;
}
v(0) = atof(x);
v(1) = atof(y);
return v;
}
void point_move(Vector2d &v, Vector2d &u){
v = v + u;
}
void point_rotate(Vector2d &v, double &angle){
Matrix2d T;
angle = angle * PI / 180;
T << cos(angle), -sin(angle),
sin(angle), cos(angle);
v = T * v;
}
运行结果如图:
Sola