码迷,mamicode.com
首页 > 其他好文 > 详细

实时控制软件设计 第一次作业

时间:2015-11-30 23:46:33      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream> #include <cstring> #include <math.h> #include <Eigen/Dense> using Eigen::MatrixXd; using namespace std; class Point {  public:  double x;  double y;  void Showpoint(void);  void movexy(MatrixXd p);//平移算子  void rotang(double ang);//旋转算子 }; void Point::Showpoint(){  cout<<‘(‘<<x<<‘,‘<<y<<‘)‘; } void Point::movexy(MatrixXd p){  cout<<x<<‘,‘<<y<<endl;  x+=p(0,0);y+=p(0,1);  cout<<x<<‘,‘<<y<<endl; } void Point::rotang(double deg){  cout<<x<<‘,‘<<y<<endl;      MatrixXd rot(2,2);//旋转矩阵      rot(0,0)=cos(deg);         rot(0,1)=sin(deg);         rot(1,0)=-sin(deg);         rot(1,1)=cos(deg);         x=rot(0,0)*x+rot(0,1)*y;         y=rot(1,0)*x+rot(1,1)*y;         cout<<x<<‘,‘<<y<<endl; } //点类定义完成   class Element {  public:  char name[20];//名称  int n;  Point pi[3];  void Showelement(void); };

void Element::Showelement(){  cout<<name;  int i;  for(i=1;i<=n;i++)pi[i-1].Showpoint(); } //元素类定义完成

Element Move(Element e,MatrixXd p){  int i;  for(i=1;i<=e.n;i++)e.pi[i-1].movexy(p);  return e; } //元素平移 Element Rotate(Element e,double deg){  int i;  for(i=1;i<=e.n;i++)e.pi[i-1].rotang(deg);  cout<<"旋转命令已执行"<<endl;  return e; } //元素旋转

MatrixXd Getpoint(char str[]){  MatrixXd p(1,2);  int u;             int i,j;             char a[10];             for(i=0;i<=49&&str[i]!=‘(‘;i++);             for(j=0;j<=49&&str[j]!=‘,‘;j++);             for(u=0;u<=10&&i!=j-1;u++)             {                 i++;                 a[u]=str[i];             }                          p(0,0)=atof(a);             for(i=j;i<=49&&str[i]!=‘)‘;i++);             for(u=0;u<=10&&j!=i-1;u++)             {                 j++;                 a[u]=str[j];             }             p(0,1)=atof(a);             return p; } //从字符串获取点

int main() {   MatrixXd p1(1,2),p2(1,2),p3(1,2),p4(1,2);   //用于存放输入点以及位移向量   char str1[20],str2[20],str3[20],str4[20],str5[20],str6[20];   double ang;   Point P1,P2,P3,P4;       Element e1;   cout<<"请输入元素(名称、点数、点坐标):";   cin>> e1.name;   cin>>e1.n;   switch(e1.n){    case 1:     cin>>str1;p1=Getpoint(str1);e1.pi[0].x=p1(0,0), e1.pi[0].y=p1(0,1);     break;     case 2:      cin>>str1;p1=Getpoint(str1);e1.pi[0].x=p1(0,0), e1.pi[0].y=p1(0,1);      cin>>str2;p2=Getpoint(str2);e1.pi[1].x=p2(0,0), e1.pi[1].y=p2(0,1);     break;    case 3:     cin>>str1;p1=Getpoint(str1);e1.pi[0].x=p1(0,0), e1.pi[0].y=p1(0,1);     cin>>str2;p2=Getpoint(str2);e1.pi[1].x=p2(0,0), e1.pi[1].y=p2(0,1);     cin>>str3;p3=Getpoint(str3);e1.pi[2].x=p3(0,0), e1.pi[2].y=p3(0,1);     break;    default:cout<<"输入错误";   } //根据点数获取内容并构造Element对象

cout<<"请对当前输入元素输入操作命令:"; cin>>str4;cin>>str5;cin>>str6; if(str4[0]==‘m‘&&str4[1]==‘o‘&&str4[2]==‘v‘&&str4[3]==‘e‘){  cout<<"命令为move"<<endl;  p4=Getpoint(str6);  Element e2;e2=Move(e1,p4);  e2.Showelement();  cout<<endl; } if(str4[0]==‘r‘&&str4[1]==‘o‘&&str4[2]==‘t‘&&str4[3]==‘a‘&&str4[4]==‘t‘&&str4[5]==‘e‘&&str4[6]==0){  ang=atof(str6)*3.1415926/180;  cout<<"命令为rotate"<<endl;  Element e2;e2=Rotate(e1,ang);  e2.Showelement();  cout<<endl; }       }技术分享

实时控制软件设计 第一次作业

标签:

原文地址:http://www.cnblogs.com/mememagic/p/5008803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!