弧度与角度互转

  1. 弧度与角度
    1° = π / 180 ≈ 0.01745 rad
    1rad = 180 / π = 57.30°

    角度制,就是用角的大小来度量角的大小的方法。在角度制中,把周角的1/360看作1度,那么,半周就是180度,一周就是360度。由于1度的大小不因为圆的大小而改变,所以角度大小是一个与圆的半径无关的量。

    弧度制,顾名思义,就是用弧的长度来度量角的大小的方法。单位弧度定义为圆周上长度等于半径的圆弧与圆心构成的角。由于圆弧长短与圆半径之比,不因为圆的大小而改变,所以弧度数也是一个与圆的半径无关的量。角度以弧度给出时,通常不写弧度单位,有时记为rad或R。

  2. 宏定义方式
    #define PI 3.1415926
    
    // 度分秒转弧度
    #define AngleToRadian(d,m,s) ((d)+((m)+(s)/60)/60)/180*PI
    
    // 角度转弧度
    #define ANGLE_TO_RADIAN(a) (a/180*PI)
    // 弧度转角度
    #define RADIAN_TO_ANGLE(r) (r*180/PI)
  3. 函数方式
    /**
     * @brief 角度转换为弧度
     *
     * @param [in] angle 角度
     *
     * @return 转换后的弧度
     */
    double angle_to_radian(double angle)
    {
        return (angle*PI)/180;
    }
    
    /**
     * @brief 弧度转换为角度
     *
     * @param [in] rad 弧度
     *
     * @return 转换后的角度
     */
    double radian_to_angle(double rad)
    { 
        return (rad*180)/PI;
    }
  4. 函数方式(度分秒)
    /**
     * @brief 角度(度分秒)转换为弧度
     *
     * @param [in] degree 度
     * @param [in] minute 分
     * @param [in] second 秒
     *
     * @return 转换后的弧度
     */
    double angle_to_radian(double degree, double minute, double second)
    {
        double flag = (degree < 0)? -1.0 : 1.0;         //判断正负
        if(degree<0)
        {   
            degree = degree * (-1.0);
        }   
        double angle = degree + minute/60 + second/3600;
        double result =flag * (angle * PI)/180;
        return result;
    }
    
    
    /**
     * @brief 弧度转换为角度
     *
     * @param [in] rad 弧度
     *
     * @param [out] 转换后的角度数组[度, 分, 秒]
     *
     * @return
     */
    void radian_to_angle(double rad, double ang[])
    {
        double flag = (rad < 0)? -1.0 : 1.0;
        if(rad<0)
        {   
            rad = rad * (-1.0);
        }   
        double result = (rad*180)/PI;                                       
        double degree = int(result);
        double minute =(result - degree)*60;
        double second = (min - int(minute)) * 60;  
        ang[0] = flag * degree;
        ang[1] = int(minute);
        ang[2] = second;
    }
  5. 参考:https://blog.csdn.net/shanchuan2012/article/details/13509511
    https://blog.csdn.net/sxhelijian/article/details/53169094?utm_source=blogkpcl1