Math.Atan2 在转换为度数时给出了错误的值
Math.Atan2 gives incorrect value when converting to degrees
我正在尝试测量两点之间相对于 X 轴的角度,以度为单位。
通过查看有关堆栈溢出的其他帖子,我一直在使用以下代码:
private double GetAngleBetweenTwoPoints(double x1, double y1, double x2, double y2)
{
return Math.Atan2(y2 - y1, x2 - x1) * 180.0 / Math.PI;
}
问题是,这似乎适用于某些值,但不适用于其他值。例如,正确传入 (0, 0, 1, 1) returns 值 45。但是,传入 (0, 0, 2, 1) returns 26.565051177078 而我期望的是 22.5。
我做错了什么?
0.5的反正切是26.565度,不是22.5度。
您可以通过取 26.565 度的正切值看到这一点,它给出的数字非常接近 0.5,而 22.5 度的正切值大约为 0.414。
(注意,正切是循环的,还有无数其他值 x
其中 tan x
为 0.5,但这与此问题无关。)
(1,1)
角的半角线是通过半径[=13的圆上(1,1)
和(sqrt(2),0)
的中点的角平分线=].因此,您正在为 22.5°
.
的角度寻找点 (0.5+\sqrt(0.5), 0.5)
我正在尝试测量两点之间相对于 X 轴的角度,以度为单位。
通过查看有关堆栈溢出的其他帖子,我一直在使用以下代码:
private double GetAngleBetweenTwoPoints(double x1, double y1, double x2, double y2)
{
return Math.Atan2(y2 - y1, x2 - x1) * 180.0 / Math.PI;
}
问题是,这似乎适用于某些值,但不适用于其他值。例如,正确传入 (0, 0, 1, 1) returns 值 45。但是,传入 (0, 0, 2, 1) returns 26.565051177078 而我期望的是 22.5。
我做错了什么?
0.5的反正切是26.565度,不是22.5度。
您可以通过取 26.565 度的正切值看到这一点,它给出的数字非常接近 0.5,而 22.5 度的正切值大约为 0.414。
(注意,正切是循环的,还有无数其他值 x
其中 tan x
为 0.5,但这与此问题无关。)
(1,1)
角的半角线是通过半径[=13的圆上(1,1)
和(sqrt(2),0)
的中点的角平分线=].因此,您正在为 22.5°
.
(0.5+\sqrt(0.5), 0.5)