• 第二次练习


    #include <iostream>
    #include <math.h>
    #define PI 3.1415926
    using namespace std;
      
    class Point{
        private:
            double x;
            double y;
        public:
            Point(){}
            Point(double a,double b){
                x=a;
                y=b;
            }
            double getX(){
                return x;
            }
            double getY(){
                return y;
            }
            void setX(double a){
                x=a;
            }
            void setY(double b){
                y=b;
            }
              
    };
      
     
    class Frame{
        private:
            Point origin;
            double degree;
        public:
            Frame(){}
            Frame(Point orig,double deg){
                origin=orig;
                degree=deg;
             }
            Point getPoint(){
                return origin;
            }
            double getDegree(){
                return degree;
            }
              
    };
    class Joint{
        private:
            double deg1;
            double deg2;
        public:
            Joint(){}
            Joint(int a,int b){
                deg1=a;
                deg2=b;
            }
            void setDeg1(double rad){
                deg1=rad*180/PI;
            }
            void setDeg2(double rad){
                deg2=rad*180/PI;
            }
            double getDeg1(){
                return deg1;
            }
            double getDeg2(){
                return deg2;
            }
              
    };
      
      
    class Solver{
        private:
            Joint joint;
            Frame frame;
        public:
            Point move(Point p1,Point p2){
                double tempx=p1.getX()+p2.getX();
                double tempy=p1.getY()+p2.getY();
                Point point(tempx,tempy);
                return point;
            }
            Point rotate(Point p,double deg){
                double tempx;
                double tempy;
                tempx=p.getX()*cos(PI*deg/180)-p.getY()*sin(PI*deg/180);
                tempy=p.getX()*sin(PI*deg/180)+p.getY()*cos(PI*deg/180);
                Point point(tempx,tempy);
                return point;
            }
              
            Point FrameStandardize(Frame fr,Point po){
                Point point1=rotate(po,fr.getDegree());
                Point point2=move(point1,fr.getPoint());
                return point1;
            }
            FrameToJoint(Point po,double arm1,double arm2){
                double len= sqrt(po.getX()*po.getX()+po.getY()*po.getY());
                  
                if(len>=(arm1+arm2)||len<=abs(arm1-arm2)){
                    cout<<"坐标超范围,机器人无法达到"<<endl;
                }else{
                    double rad1=acos((arm1*arm1+len*len-arm2*arm2)/(2*arm1*len));
                    double rad2=acos((arm1*arm1+arm2*arm2-len*len)/(2*arm1*arm2));
                    double rad11=atan(po.getY()/po.getX());
                    double rad22=PI;
                    joint.setDeg1(rad1+rad11);
                    joint.setDeg2(rad2+rad22);
                    cout<<"关节1应转动角度为:"<<joint.getDeg1()<<" 关节2应转动角度为:"<<joint.getDeg2()<<endl;
                }
                          
            }
            FrameReturn(Frame fr){
            }
            JointToFrame(Point po){
                  
            }
              
    };
    class Robot{
        private:
            double arm1;
            double arm2;
            double arm1Range;
            double arm2Range;
        public:
            Robot(){}
            Robot(double a,double b){
                arm1=a;
                arm2=b;
            }
            void PTPmove(Frame fr,Point po){
                Solver solver;
                Point point;
                  
                point=solver.FrameStandardize(fr,po);
                solver.FrameToJoint(point,arm1,arm2);
                      
            }
    };
       
    int main(){
        Robot myRobot(4,3);  
          
        Point origin(0,0);
        Point origin1(2,3);
        Point origin2(6,1);
        Point origin3(5,9);  
          
        Point point1(-5,1);
        Point point2(-3,-1);
        Point point3(4,2);
        Point point4(3,7);  
          
        Frame WF(origin,0);
        Frame TF1(origin1,30);
        Frame TF2(origin2,60);
        Frame TF3(origin3,90);
          
        myRobot.PTPmove(WF,point1);
        myRobot.PTPmove(TF1,point2);
        myRobot.PTPmove(TF2,point3);
        myRobot.PTPmove(TF3,point4);
          
          
        return 0;
    }

  • 相关阅读:
    读书笔记-js
    读书笔记-设计模式
    读书笔记-并发和多线程
    读书笔记-泛型有限通配符
    读书笔记-类和类加载器
    项目: 推送水木文章到Kindle
    项目:DoubleFaceCamera
    项目:BluetoothChat
    项目:简单记事本
    项目: 连连看
  • 原文地址:https://www.cnblogs.com/zhuwenbo/p/5046802.html
Copyright © 2020-2023  润新知