从圆心找到一个点的角度

13

如果我有一个720 x 720像素的图片,看起来像这样:

enter image description here

那么,如果给定触摸点的坐标x和y,且假设中心点的坐标为360, 360,则如何计算触摸点的角度呢?我看到很多计算都假设原点是(0, 0)(即左上角),导致我的结果不正确。我假设0始终位于顶部而没有旋转。


你目前找到了什么?如果你的问题只是关于中心坐标,我们很乐意帮助你! - Jean Logeart
1
传统上,0 度表示向右,90 度表示向上,180 度表示向左,270 度表示向下。(我可能误解了您的措辞。) - user1881400
4个回答

19

这是通用公式:

angle = atan2(mouseY - cirleCenterY, mouseX - circleCenterX);

13

可能这样更清晰明了:

(Math.toDegrees( Math.atan2(fromLeft - 360.0, 360.0 - fromTop) ) + 360.0) % 360.0

增加一个360度的旋转并应用模运算可以得到正角度,而 atan2 函数不能实现这一点。


这似乎是这里提出的任何解决方案中最接近的一个。 我在先前的评论中误解了,如果我将x触摸坐标替换为fromLeft,y替换为fromTop,我至少可以得到一个正角度回来。 单击大约在3点钟位置,结果大约为90度 但是,如果我在6点钟点击,我会得到接近360度的结果,这是不可预期的。9点钟报告了正确的270度。 看起来这非常接近,但仍然存在一些计算12和6点钟的问题。 - Kyros
如果我在12点点击,我得到180,而在6点我得到0,所以它们在某种程度上被颠倒了。 - Kyros
已更正“fromTop - 360.0”为“360.0 - fromTop”。在JavaWIDE上进行了测试。 - minopret
1
你测试过这段代码吗?atan2 的定义是(反直觉地)为 atan2(y, x),但你传递的是 (x, y)... - Bill
@Bill 谢谢。我现在同意明确说明此问题中使用的坐标轴是值得的。它们的方向与数学中的x-y坐标通常不同。它们的方向与Java2D、Postscript等通常相同。这就是为什么我将我的参数命名为fromLeftfromTop的原因。关于测试:是的,我认为你现在会同意,左侧720,顶部360的点在90度处;左侧360,顶部720的点在180度处。 - minopret

0
java.lang.Math.atan2(y-360,x-360);

0

屏幕坐标不遵循三角函数的规则。

使用 java.lang.Math.atan2(-(y-360),x-360);


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