我想求
0,1
与另一点(下图中0.3,-0.17
)的夹角(0到360度,顺时针旋转),原点在0,0
。
左边的圆圈纯粹是为了显示我希望角度旋转的方向,以及它们从哪里开始/结束。右图给出了我将提供给代码的输入示例(即
0.3,-0.17
)。绿线是角度。
如上所述,如何在 C++ 或 JavaScript 等编程语言中找到两点之间的角度?
atan2
函数给出点相对于 X 轴的角度,给定点的 x 和 y 坐标。结果通常在 -180 到 180 度之间,但我们稍后可以将其调整为 [0, 360]。
您可以找到从原点延伸的两条线 A 和 B 之间的角度,通过减去它们的 atan 结果:
angle = atan2(a.y, a.x) - atan2(b.y, b.x);
在这里,您的 A 点将是 (0,1),您的 B 点将是 (0.3, -0.17)。
atan2
通常以弧度而不是度数返回角度(请检查您的语言文档以确保)。如果是这种情况,您应该在此处将其转换为度数。
angle = angle * 360 / (2*pi);
angle
现在将介于 -360 和 360 度之间,因此您需要执行额外的检查以使其在所需范围内。
if (angle < 0){
angle = angle + 360;
}
如果围绕对角线翻转图像,即交换 x 和 y 坐标,则角度分布是三角学中常用的分布。因此
angle_in_degrees=atan2(x,y)*180/pi
如果您不想要 [-180°..180°],请加上范围的任何修正。
(请注意,
atan2
参数通常按 (y, x) 的顺序排列,但在这里我们交换它们。)