我正在开展一个项目,我必须在其中使用凸包,以及格雷厄姆扫描的具体方法。问题已经解决,直到我想要对点进行排序。 所以故事是我收集了一些点,它们来自Point类型,它们的坐标是亲戚。意味着它们来自鼠标事件x和y。所以我已经将鼠标位置收集为点的x和y。我想找到与枢轴点相关的角度。有没有人有一段代码来计算这个角度? 非常感谢,下面的图片就是我需要的:
答案 0 :(得分:7)
使用
Math.atan2(dy, dx)
其中dy
和dx
表示点和枢轴点之间的垂直和水平差异。
要记住的一些注意事项:
参考(0弧度)按照惯例指向右侧,而不是图像中的左侧。如果您真的想从左侧开始测量,则必须Math.PI - angle
进行转换。
Math
- 三角函数以弧度为单位。要将结果转换为度数,您可以使用Math.toDegrees
。
在数学世界中,增加y值指向上方。在你的形象中,他们指向下方。
答案 1 :(得分:2)
我会使用dot product的双重定义来计算这个,当你跳过垂直线上发生的令人讨厌的点,并处理象限
(原谅我的记法,因为数学在降价方面效果不好......)
其中A
和B
都是包含x
和y
成分的2D向量,而theta
是它们之间的角度:
dot(A, B) = ax * bx + ay * by
和强>
dot(A, B) = |A| * |B| * cos(theta)
...其中|A|
是A
的长度,可以使用Pythagorean theorem计算:
|A| = sqrt(ax^2 + ay^2)
因此:
theta = acos((ax * bx + ay * by) / (|A| * |B|))
答案 2 :(得分:1)
从连接任意两点p1&的线的水平线获得角度。 P2: Angle = atan((p1.y - p2.y)/(p1.x - p2.x)
所以,你的黑角= atan((454-243)/(286-108)) 注意:当y轴从左上角开始而不是左下角
时,y符号反转角度将以弧度为单位,多次转换为度数(180 / pi)