在圆上给定点的情况下获取以弧度为单位的角度


14

我正在做一个绕圆盘旋转的表盘。

点击之前

使用此转盘,您可以将鼠标移到圆的任何位置,以将转盘的位置调整到圆上与单击角度相同的一点。例如,如果您单击上方的转盘,请单击下面粉红色所示的位置,则将转盘移至该点的上方但在圆圈上。

单击后(粉红色)

我知道如何在给定的半径和角度(以弧度为单位)的情况下获得圆上点的位置。那就是这个公式

x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;

但是,我正在做相反的事情-我有一个点击点,我想将它变成圆上的一个点(控制旋钮所在的位置)。我正在尝试使用此点(和给定的半径)来计算以弧度为单位的角度,以便可以将控制旋钮以相同的角度放置在圆上。

我可以使用方便的公式来完成此操作吗?


您是否正在寻找公式来获得点之间的夹角?
William Mariager

你能在两点之间得到一个角度吗?我可以计算斜率,但我的猜测是我需要第三个点来创建三角形并使用反三角函数来解决这个问题。
编辑者

我发布了一个答案,说明了如何做到这一点。
William Mariager

3
您真正拥有的是两个向量之间夹角。它们都起源于圆的中心并且具有相同的大小(圆的半径)。
MichaelHouse

这是背后的数学原理反三角函数atan是的缩写arctanatan2只是一个接受单个参数并为您进行除法的函数。
voithos

Answers:


25

atan2函数。

它为您提供(0,0)与(x,y)之间的夹角,x并且y是函数参数。

编辑:如果圆的中心不是(0,0),那么,请执行以下操作:atan2(y - cy, x - cx)


我的圆心是否不重要(0,0)吗?我猜我只是将参数偏移atan2为@Luis,如下所示?
编辑者

只需翻译减去即可。参见编辑。
jcora 2012年

3
-1:atan2的第一个参数是y
Luis Estrada

2
谢谢@LuisEstrada,我只是更正了它。(希望您将其
设为

+路易斯·埃斯特拉达(Luis Estrada)对不起,这很遗憾,但是我不得不感谢你。我已经尝试调试了一天半的程序。事实证明,对的争论atan2是落后的!
Carcigenicate's

8

您需要旋钮的中心和光标的点以及atan2函数。然后,您可以像这样使用它:

 angle = atan2(mouseY - knobCenterY, mouseX - knobCenterX)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.