我已知弧的两点坐标(x1,y1)和(x2,y2),还有圆芯坐标(cx,cy),并且算出了半径r我怎么样算出的角度?
我怎么用公式算出来的有象限的区别,有负,有正?
这角度得出来要是在是在0-360这间的?请指教!m_dCircleFAng=asin((y1-cy)/r)*180.0/PI;
m_dCircleEAng=asin((y2-cy)/r)*180.0/PI;;

解决方案 »

  1.   

    asin()的返回值是-PI/2到PI/2;acos()的返回值是0到PI。你要0到360度的结果就需要自己加判断了。
      

  2.   

    你的意识是我要用acos()??
    如何加上判断,4个象限都不一样?
      

  3.   

    要注意你要的角度是怎么定义的。比如你要的是P1绕圆心顺时针旋转到P2位置所扫过的角度,还是P1绕圆心逆时针旋转到P2位置所扫过的角度。
      

  4.   

    或者简单点,假设你的角度是P1绕圆心顺时针旋转到P2位置所扫过的角度。你可以先用acos()算角度,然后算原点指向P1的向量和原点指向P2的向量的叉乘,如果结果是Z轴正方向acos()得到的就是你要的结果;如果是Z轴负方向,就要在acos()的结果基础上再加个PI。
      

  5.   

    不好意思,说错了。“如果是Z轴负方向,就要在acos()的结果基础上再加个PI。”应该是:如果是Z轴负方向,就要用2PI减去acos()的结果。
      

  6.   

    为保证较好的数值稳定性,建议使用atan2
    theta=atan2(y1-cy,x1-cx)-atan2(y2-cy,x2-cx);得到的结果为[-π,π]