#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(,);y+=p(,);
cout<<x<<','<<y<<endl;
}
void Point::rotang(double deg){
cout<<x<<','<<y<<endl;
MatrixXd rot(,);//旋转矩阵
rot(,)=cos(deg);
rot(,)=sin(deg);
rot(,)=-sin(deg);
rot(,)=cos(deg);
x=rot(,)*x+rot(,)*y;
y=rot(,)*x+rot(,)*y;
cout<<x<<','<<y<<endl;
}
//点类定义完成 class Element
{
public:
char name[];//名称
int n;
Point pi[];
void Showelement(void);
}; void Element::Showelement(){
cout<<name;
int i;
for(i=;i<=n;i++)pi[i-].Showpoint();
}
//元素类定义完成 Element Move(Element e,MatrixXd p){
int i;
for(i=;i<=e.n;i++)e.pi[i-].movexy(p);
return e;
}
//元素平移
Element Rotate(Element e,double deg){
int i;
for(i=;i<=e.n;i++)e.pi[i-].rotang(deg);
cout<<"旋转命令已执行"<<endl;
return e;
}
//元素旋转 MatrixXd Getpoint(char str[]){
MatrixXd p(,);
int u;
int i,j;
char a[];
for(i=;i<=&&str[i]!='(';i++);
for(j=;j<=&&str[j]!=',';j++);
for(u=;u<=&&i!=j-;u++)
{
i++;
a[u]=str[i];
} p(,)=atof(a);
for(i=j;i<=&&str[i]!=')';i++);
for(u=;u<=&&j!=i-;u++)
{
j++;
a[u]=str[j];
}
p(,)=atof(a);
return p;
}
//从字符串获取点 int main()
{
MatrixXd p1(,),p2(,),p3(,),p4(,);
//用于存放输入点以及位移向量
char str1[],str2[],str3[],str4[],str5[],str6[];
double ang;
Point P1,P2,P3,P4; Element e1;
cout<<"请输入元素(名称、点数、点坐标):";
cin>> e1.name;
cin>>e1.n;
switch(e1.n){
case :
cin>>str1;p1=Getpoint(str1);e1.pi[].x=p1(,), e1.pi[].y=p1(,);
break;
case :
cin>>str1;p1=Getpoint(str1);e1.pi[].x=p1(,), e1.pi[].y=p1(,);
cin>>str2;p2=Getpoint(str2);e1.pi[].x=p2(,), e1.pi[].y=p2(,);
break;
case :
cin>>str1;p1=Getpoint(str1);e1.pi[].x=p1(,), e1.pi[].y=p1(,);
cin>>str2;p2=Getpoint(str2);e1.pi[].x=p2(,), e1.pi[].y=p2(,);
cin>>str3;p3=Getpoint(str3);e1.pi[].x=p3(,), e1.pi[].y=p3(,);
break;
default:cout<<"输入错误";
}
//根据点数获取内容并构造Element对象 cout<<"请对当前输入元素输入操作命令:";
cin>>str4;cin>>str5;cin>>str6;
if(str4[]=='m'&&str4[]=='o'&&str4[]=='v'&&str4[]=='e'){
cout<<"命令为move"<<endl;
p4=Getpoint(str6);
Element e2;e2=Move(e1,p4);
e2.Showelement();
cout<<endl;
}
if(str4[]=='r'&&str4[]=='o'&&str4[]=='t'&&str4[]=='a'&&str4[]=='t'&&str4[]=='e'&&str4[]==){
ang=atof(str6)*3.1415926/;
cout<<"命令为rotate"<<endl;
Element e2;e2=Rotate(e1,ang);
e2.Showelement();
cout<<endl;
} }

实时控制软件设计 第一次作业 Draw的更多相关文章

  1. 《实时控制软件设计》之Github提交作业步骤

    在掌握GIT/GITHUB基本操作后,接下来把第一次的编程作业提交到 https://github.com/RTCSD15/HOMEWORK1 ,把第二次的编程作业提交到https://github. ...

  2. 实时控制软件设计作业_01——汽车ABS系统分析

    制动防抱死系统(antilock brake system)简称ABS.作用就是在汽车制动时,自动控制制动器制动力的大小,使车轮不被抱死,处于边滚边滑(滑移率在20%左右)的状态,以保证车轮与地面的附 ...

  3. 《实时控制软件设计》第一周作业 欧梓峰 U201317662 (更新)

    CNC 插补计算程序分析 前言:插补(Interpolation),即机床数控系统依照一定方法确定刀具运动轨迹的过程.一般是已知起点坐标.终点坐标和轨迹,由数控插补计算程序实时的算出各个中间的坐标来拟 ...

  4. 实时控制软件设计第一周作业-汽车ABS软件系统案例分析

    汽车ABS软件系统案例分析 ABS 通过控制作用于车轮制动分泵上的制动管路压力,使汽车在紧急刹车时车轮不会抱死,这样就能使汽车在紧急制动时仍能保持较好的方向稳定性. ABS系统一般是在普通制动系统基础 ...

  5. 实时控制软件设计 第二次作业 myRobot

    #include<iostream> #include <Eigen/Dense> #include <math.h> #include <vector> ...

  6. 《实时控制软件设计》之Automation Studio开发环境

    Automation Studio是贝加莱公司的控制软件开发平台,软件可运行在贝加莱的基于PC的控制器上,基于Automation Studio我们可构建一个完整的控制软件构建.测试和仿真运行平台.本 ...

  7. C语言成语设计第一次作业

    一 1.求圆面积和周长 输入圆的半径,计算圆的周长和面积. 2.流程图 3.测试数据及运行结果 测试数据:r=7 运行结果 4.实验分析 问题:第一次输入提示时未加双引号 解决办法:发现问题后加了双引 ...

  8. 主要由顶点容器构成的平面图形类(Shape)——(第一次作业Draw类定义升级)

    // https://github.com/orocos/orocos_kinematics_dynamics/blob/master/orocos_kdl/src/frames.hpp // Vec ...

  9. 字符串处理——(第一次作业Draw输入命令处理部分升级)

    #include<iostream> #include<sstream> //使用istringstream必须包含的头文件 #include<string> #i ...

随机推荐

  1. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

  2. Asp.net MVC3表格共用分页功能

    在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...

  3. docker --命令

    1.开启服务 sudo docker start 服务名 2.预览列出所有的容器 sudo docker ps -a 3.进入文件 cd 4.预览文件目录 ls 5.预览文件内容 more 6.拷贝文 ...

  4. box-sizing 属性、min-width属性、max-width属性

    1.box-sizing  这个属性是CSS3新增的属性.IE8开始兼容.box-sizing: border-box; border-box,就是边框的这个小盒.这个属性命令,width数值指的是b ...

  5. CentOS vsftpd搭建快速流程

    1.yum install vsftpd 2.chkconfig vsftpd on 3.service vsftpd start 4.adduser -d /home/bp -g ftp -s /s ...

  6. C# 发送HttpWebRequest获得网络图片的大小、尺寸

    可以通过HttpWebRequest的方式发送一个网络图片的请求,再通过HttpWebResponse接收返回的数据,分析数据流得到图片的大小以及尺寸,代码如下: /// <summary> ...

  7. hdoj 1576

    //1Y真是爽啊 题意:要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1).  分析:根据题意a=b*x   a=m ...

  8. SSH项目(1)

    1.新建项目,添加jar包 tomcat jsp struts.hibernate.spring 2.配置 web.xml <?xml version="1.0" encod ...

  9. mysql的卸载方法

    sudo rm /var/lib/mysql/ -R 删除mysql的数据文件 2 sudo rm /etc/mysql/ -R 删除mqsql的配置文件 3 sudo apt-get autorem ...

  10. MFC-01-Chapter01:Hello,MFC---1.1 Windows 编程模型

    1.1 Windows编程模型 为传统的操作系统编写的程序使用的是过程化模型,即程序从头到尾按顺序执行.例如C程序,从main函数入口开始执行,中间调用不同的函数一直到程序结束返回,这种过程是程序本身 ...