如何找到圆上两点之间的角度?

5
我有圆的中心点坐标 centerX 和 centerY,以及半径。现在我有一个坐落在圆上的点 (x1, y1)。我想知道这个点所对应的圆心角度数。
我尝试使用以下公式来获取点 (x1, y1) 所对应的角度,但它并不是通用解法。
radian = Math.Atan2(y1 - Cy, x1 - Cx);
angle = radian * (180 / Math.PI);

请参考截图了解我的需求。 enter image description here 请问有人能够建议我哪里出错了吗?

1
我认为这是因为atan2给出的答案在-180度到180度之间,而你想要0到360度。 - meowgoesthedog
我认为这里涵盖了数学内容找到两点之间的角度 - Liam
1个回答

10
Atan2的MSDN文档页面可知,它返回-180到180度(-pi到pi弧度)之间的结果。另一方面,你需要0到360度。为此,如果角度值为负数,只需将360加到最终答案中即可。
radian = Math.Atan2(y1 - Cy, x1 - Cx);
angle = radian * (180 / Math.PI);
if (angle < 0.0) 
   angle += 360.0;

1
既然跨度已经在*[-180, 180]*之间,如果答案是负数,用户是否只需将180加到最终答案中? - Sometowngeek
1
@sometowngeek 不行。例如,当atan2给出-90(正好在中心上方)时,OP需要的相应结果是270度。加上180会得到90,这是不正确的。 - meowgoesthedog
有没有直接的解决方案来覆盖360度? - Bharathi
1
我刚刚删除了我的第二条评论,因为我意识到在做任何事情之前我需要喝上早晨的咖啡(我的大脑此时运转缓慢)。 - Sometowngeek
我试图将其与如何从中心点获取点的角度?进行比较 - 这使用Python。 - Sometowngeek
@Bharathi 我认为没有。严格来说,Atan2本身并不是一个“直接”的解决方案 - 它首先处理四个不同象限的四种不同情况。而你是否有想要直接解决方案的具体原因呢? - meowgoesthedog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接