+ -
当前位置:首页 → 问答吧 → 如何精确的求出角度?

如何精确的求出角度?

时间:2011-11-29

来源:互联网

我已知弧的两点坐标(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;;

作者: xiongkw   发布时间: 2011-11-29

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

作者: azand   发布时间: 2011-11-29

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

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

作者: xiongkw   发布时间: 2011-11-29

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

作者: azand   发布时间: 2011-11-29

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

作者: azand   发布时间: 2011-11-29

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

作者: azand   发布时间: 2011-11-29