Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找到与枢轴相关的点的角度_Java_Math_Trigonometry - Fatal编程技术网

Java 找到与枢轴相关的点的角度

Java 找到与枢轴相关的点的角度,java,math,trigonometry,Java,Math,Trigonometry,这几天来,我一直在做一个项目,我必须在其中使用凸包,以及格雷厄姆扫描的具体方法。这个问题已经解决了,直到我想把问题分类的地方。 故事是,我收集了一些点,它们来自于类型点,它们的坐标是相关的。表示它们来自鼠标事件x和y。所以我收集了鼠标的位置作为点的x和y。我想找到与轴心点相关的角度。有人有计算这个角度的代码吗? 非常感谢,下面的图片是我需要的: 使用 Math.atan2(dy, dx) 其中,dy和dx表示点和枢轴点之间的垂直和水平差异 要记住的几个注意事项: 参照(0弧度)按惯例指向右侧

这几天来,我一直在做一个项目,我必须在其中使用凸包,以及格雷厄姆扫描的具体方法。这个问题已经解决了,直到我想把问题分类的地方。 故事是,我收集了一些点,它们来自于类型点,它们的坐标是相关的。表示它们来自鼠标事件x和y。所以我收集了鼠标的位置作为点的x和y。我想找到与轴心点相关的角度。有人有计算这个角度的代码吗? 非常感谢,下面的图片是我需要的: 使用

Math.atan2(dy, dx)
其中,
dy
dx
表示点和枢轴点之间的垂直和水平差异

要记住的几个注意事项:

  • 参照(0弧度)按惯例指向右侧,而不是像图像中那样指向左侧。如果你真的想从左边测量它,你必须做
    Math.PI-angle
    来转换它

  • 数学-三角函数以弧度为单位工作。要将结果转换为度,可以使用
    Math.toDegrees

  • 在数学世界中,增加y值会指向上。在您的图像中,它们指向下方


要获得连接任意两点p1和p2的线的水平角度: 角度=atan((p1.y-p2.y)/(p1.x-p2.x)

所以,你的黑角=atan((454-243)/(286-108)) 注意:y轴从左上角开始而不是从左下角开始时,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|))