zoukankan      html  css  js  c++  java
  • 第二次编程作业

      1 #include <iostream>
      2 #include<Eigen/Dense>
      3 #include<cmath>
      4 #define PI 3.1415926
      5 using namespace std;
      6 using namespace Eigen;
      7 class Point{
      8     public:
      9         double x;
     10         double y;
     11         
     12         Point(double a=0,double b=0);
     13         void SetP(double a,double b);
     14         
     15 };
     16 Point::Point(double a,double b){
     17     x=a;
     18     y=b;
     19 }
     20 void Point::SetP(double a,double b){
     21     x=a;
     22     y=b;
     23 }
     24 
     25 class WorldFrame{
     26     
     27 };
     28 class TaskFrame{
     29     public:
     30         double x;
     31         double y;
     32         double ang;
     33     
     34         TaskFrame(double a=0,double b=0,double d=0);
     35         void WtoT(Point &p);
     36         void TtoW(Point &p);
     37         void TtoJ(Point &p,double a1,double a2);
     38 };
     39 
     40 TaskFrame::TaskFrame(double a,double b,double A){
     41     x=a;
     42     y=b;
     43     ang=A;
     44 }
     45 
     46 void TaskFrame::WtoT(Point &p){
     47     MatrixXd m(3,3);
     48     MatrixXd pt(1,3);
     49     double deg;
     50     deg=ang*PI/180;
     51     m(0,0)=cos(deg);
     52     m(0,1)=sin(deg);
     53     m(0,2)=0;
     54     m(1,0)=-sin(deg);
     55     m(1,1)=cos(deg);
     56     m(1,1)=0;
     57     m(2,0)=x,
     58     m(2,1)=y;
     59     m(2,2)=0;
     60     pt(0,0)=p.x;
     61     pt(0,0)=p.y;
     62     pt(0,2)=1;
     63     pt*=m;
     64     p.x=pt(0,0);
     65     p.y=pt(0,1);    
     66 }
     67 void TaskFrame::TtoW(Point &p){
     68     MatrixXd m(3,3);
     69     MatrixXd pt(1,3);
     70     double deg;    
     71     deg=ang*PI/180;
     72     m(0,0)=cos(deg);
     73     m(0,1)=sin(deg);
     74     m(0,2)=0;
     75     m(1,0)=-sin(deg);
     76     m(1,1)=cos(deg);
     77     m(1,1)=0;
     78     m(2,0)=x;
     79     m(2,1)=y;
     80     m(2,2)=0;
     81     pt(0,0)=-p.x;
     82     pt(0,0)=-p.y;
     83     pt(0,2)=1;
     84     pt*=m;
     85     p.x=pt(0,0);
     86     p.y=pt(0,1);
     87 }
     88 void TaskFrame::TtoJ(Point &p,double a1,double a2){
     89     double l,deg1,deg2,deg3;
     90     l=sqrt(p.x*p.x+p.y*p.y);
     91     deg1=atan(p.y/p.x);
     92     deg2=acos((a1*a1+l*l-a2*a2)/(2*a1*l));
     93     deg3=acos((a1*a1+a2*a2-l*l)/(2*a1*a2));
     94     p.x=(deg1+deg2)*180/PI;
     95     p.y=deg3*180/PI+180;
     96 }
     97 class JointFrame{
     98 
     99 };
    100 
    101 class Robot{
    102     private:
    103         double arm1,arm2,deg1min,deg2min,deg1max,deg2max;
    104     public:
    105         Robot(double a1=1,double a2=1,double d1min=0,double d2min=0,double d1max=180,double d2max=360);
    106         void SetRobot(double a1=1,double a2=1,double d1min=0,double d2min=0,double d1max=180,double d2max=360);
    107         void PTPMove(WorldFrame wf,TaskFrame tf,Point p);
    108         void PTPMove(TaskFrame tf,Point P);
    109         void PTPMove(JointFrame jf,Point P);
    110         void print(Point &p);
    111 };
    112 
    113 Robot::Robot(double a1,double a2,double d1min,double d2min,double d1max,double d2max){
    114     arm1=a1;
    115     arm2=a2;
    116     deg1min=d1min;
    117     deg2min=d2min;
    118     deg1max=d1max;
    119     deg2max=d2max;
    120 }
    121 void Robot::SetRobot(double a1,double a2,double d1min,double d2min,double d1max,double d2max){
    122     arm1=a1;
    123     arm2=a2;
    124     deg1min=d1min;
    125     deg2min=d2min;
    126     deg1max=d1max;
    127     deg2max=d2max;
    128 }
    129 void Robot::PTPMove(WorldFrame wf,TaskFrame tf,Point p){
    130     tf.WtoT(p);
    131     tf.TtoJ(p,arm1,arm2);
    132     print(p);
    133 }
    134 void Robot::PTPMove(TaskFrame tf,Point p){
    135     tf.TtoJ(p,arm1,arm2);
    136     print(p);
    137 }
    138 void Robot::PTPMove(JointFrame jf,Point p){
    139     print(p);
    140 }
    141 void Robot::print(Point &p){
    142     if(p.x>=deg1min||p.y<=deg1max){
    143         cout<<"机器人的关节坐标为:("<<p.x<<','<<p.y<<')'<<endl;
    144     }
    145     else cout<<"无法旋转到该位置"<<endl; 
    146 }
    147 
    148 
    149 
    150 int main(int argc, char** argv) {
    151     Robot myRobot(10,10);
    152     WorldFrame WF;
    153     TaskFrame TF1(0,0,0),TF2(2,2,30),TF3(1,3,60);
    154     JointFrame JF;
    155     Point P1(0,0),P2(1,1),P3(2,2),P4(2,1),P5(3,7);
    156     myRobot.PTPMove(JF,P1);
    157     myRobot.PTPMove(WF,TF1,P2);
    158     myRobot.PTPMove(TF1,P3);
    159     myRobot.PTPMove(TF2,P4);
    160     myRobot.PTPMove(TF3,P5);
    161     return 0;
    162 }
    运算结果:
    
    
  • 相关阅读:
    Hive架构原理
    Hive与HBase的区别
    2019-11-14:命令执行漏洞防御,PHP反序列化漏洞产生原因,笔记
    2019-11-13:任意代码执行,基础学习, 笔记
    2019-11-12:文件包含基础学习,笔记
    2019-11-11:文件上传,文件包含基础,笔记
    普法贴
    2019-11-7:练习上传getshell,通过菜刀连接
    String中intern的方法
    在cmd里面使用mysql命令
  • 原文地址:https://www.cnblogs.com/hangfengz/p/5047411.html
Copyright © 2011-2022 走看看