第一次编程作业

作业要求链接
github


第一次编程作业暂时完成了简单的要求,但仍然存在一些问题:

  • 输入的图形的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;
}

运行结果如图:

posted @ 2015-11-30 21:55  AkisAya  阅读(231)  评论(2编辑  收藏  举报