#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. Maven中的DependencyManagement和Dependencies

    Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式.通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素.使用p ...

  2. JS学习笔记--仿手机发送内容交互

    学习JS笔记----记录上课中学习的知识点,分享下老师教的内容: 1.html内容 <div id="box"> <div id="message&qu ...

  3. 在Mac上安装Sublime Text3的插件

    首先安装插件管理器Package Control 打开Sublime, 按下快捷键 ctrl+', 然后粘贴下面的代码,然后按回车键: import urllib.request,os; pf = ' ...

  4. intent参数的回传

    1. public class MainActivity extends Activity { private EditText editText1, editText2, editText3; pr ...

  5. 获取下拉框的文本值和value值

    http://www.cnblogs.com/djgs/p/3691979.html?utm_source=tuicool&utm_medium=referral 现在有一个Id为AreaId ...

  6. AJAX(一、基本知识)

    AJAX:Asynchronous ([ə'sɪŋkrənəs; eɪ-])Javascript (['dʒɑ:və,skrɪpt])and XML 异步的Javascript和XMLAJAX不是新的 ...

  7. ExtJs 之 ComboBox级联使用

    刚接触ExtJs不到一周,项目使用ExtJs框架,有个版块用到了combobox的级联(两级),遇到了一系列的问题,两天来一直查API.网络资料,终于解决了. 先列出遇到的一系列问题(也许你也遇到过! ...

  8. LINUX RHCE 笔记

    磁盘类: 新增一个SCSI磁盘,LINUX无法看到(不重启)echo "- - -" >  /sys/class/scsi_host/host2/scan就看到了. part ...

  9. 记一次联想A820t救砖线刷

    因为是看着教程刷的(有大神放出教程,只管伸手拿来就好啦)但是照着教程做的过程中出现了一些问题还是值得注意的,在这里总结一下,给新手提供一点建议 教程比较长,我放到博客的文件中,需要的自己下载一下.或者 ...

  10. Coding源码学习第三部分(EaseStartView.m)

    首先接上篇的要做一个NSEnumerator 类的延展阅读. 枚举(NSEnumerator) (1)依附于集合类(NSArray,NSSet,NSDictionary),没有用来创建实例的接口. ( ...