Java 找到与枢轴相关的点的角度
这几天来,我一直在做一个项目,我必须在其中使用凸包,以及格雷厄姆扫描的具体方法。这个问题已经解决了,直到我想把问题分类的地方。 故事是,我收集了一些点,它们来自于类型点,它们的坐标是相关的。表示它们来自鼠标事件x和y。所以我收集了鼠标的位置作为点的x和y。我想找到与轴心点相关的角度。有人有计算这个角度的代码吗? 非常感谢,下面的图片是我需要的: 使用Java 找到与枢轴相关的点的角度,java,math,trigonometry,Java,Math,Trigonometry,这几天来,我一直在做一个项目,我必须在其中使用凸包,以及格雷厄姆扫描的具体方法。这个问题已经解决了,直到我想把问题分类的地方。 故事是,我收集了一些点,它们来自于类型点,它们的坐标是相关的。表示它们来自鼠标事件x和y。所以我收集了鼠标的位置作为点的x和y。我想找到与轴心点相关的角度。有人有计算这个角度的代码吗? 非常感谢,下面的图片是我需要的: 使用 Math.atan2(dy, dx) 其中,dy和dx表示点和枢轴点之间的垂直和水平差异 要记住的几个注意事项: 参照(0弧度)按惯例指向右侧
Math.atan2(dy, dx)
其中,dy
和dx
表示点和枢轴点之间的垂直和水平差异
要记住的几个注意事项:
- 参照(0弧度)按惯例指向右侧,而不是像图像中那样指向左侧。如果你真的想从左边测量它,你必须做
来转换它Math.PI-angle
- 数学-三角函数以弧度为单位工作。要将结果转换为度,可以使用
Math.toDegrees
- 在数学世界中,增加y值会指向上。在您的图像中,它们指向下方
角度将以弧度为单位,以(180/pi)的倍数转换为度。我将使用的双重定义来计算这个,因为你跳过了垂直线上发生的令人讨厌的点,并处理象限 (请原谅我的记法,因为数学在减价中不太好用…) 其中
A
和B
都是具有x
和y
分量的二维向量,theta
是它们之间的角度:
dot(A, B) = ax * bx + ay * by
和
dot(A, B) = |A| * |B| * cos(theta)
…其中,| A |
是A
的长度,可使用以下公式计算:
因此:
theta = acos((ax * bx + ay * by) / (|A| * |B|))
请注意,通过使用
atan
您需要手动计算角度位于哪个象限。(例如,(454-243)/(286-108)
看起来与点反转时相同:(243-454)/(108-286)
)数学。atan2
可以为您解决这个问题。“当你跳过垂直线上发生的令人讨厌的事情时",或者,他可以简单地使用数学。atan2为他解决这个问题。在advanced中感谢该算法工作得非常好,您提到的问题是因为Java计算屏幕左上角一个点的Y,这使得Y在向下移动时增加,如果我得到角度的绝对值,它是完美的。非常感谢为了帮助。嗯。不过我不会在角度上使用Math.abs
。那么-45
和+45
看起来是一样的。如果你想摆脱负角度,试着使用+360
和%360
。
theta = acos((ax * bx + ay * by) / (|A| * |B|))