两点之间的角度,0-360,顺时针? [关闭]

问题描述 投票:0回答:2

我想求

0,1
与另一点(下图中
0.3,-0.17
)的夹角(0到360度,顺时针旋转),原点在
0,0

custom atanfull

左边的圆圈纯粹是为了显示我希望角度旋转的方向,以及它们从哪里开始/结束。右图给出了我将提供给代码的输入示例(即

0.3,-0.17
)。绿线是角度。

如上所述,如何在 C++ 或 JavaScript 等编程语言中找到两点之间的角度?

math language-agnostic geometry angle
2个回答
23
投票

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;
}

0
投票

如果围绕对角线翻转图像,即交换 x 和 y 坐标,则角度分布是三角学中常用的分布。因此

angle_in_degrees=atan2(x,y)*180/pi

如果您不想要 [-180°..180°],请加上范围的任何修正。

(请注意,

atan2
参数通常按 (y, x) 的顺序排列,但在这里我们交换它们。)

© www.soinside.com 2019 - 2024. All rights reserved.