为什么我在使用 Math.Atan2 时得到不正确的结果

Why am I Getting Incorrect Results When I use Math.Atan2

提问人:ItsCrumbz 提问时间:9/14/2023 最后编辑:ItsCrumbz 更新时间:9/14/2023 访问量:61

问:

该程序需要两个点来求两点之间的距离,并找到从点 1 到点 2 的角度。距离部分工作正常,但是当我使用 Math.Atan2 找到角度时,我得到了一个不恰当的答案。

    //these are the variables the store the points
    static float point1X = 2;
    static float point1Y = 2;
    static float point2X = 4;
    static float point2Y = 4;
    
    //This is the code I use to find the distance
    float deltaX = point1X - point2X;
    float deltaY = point1Y - point2Y;

    float step1 = MathF.Pow(deltaX, 2f) + MathF.Pow(deltaY, 2f);
    float distance = MathF.Sqrt(step1);

    //this is the code used to find the angle
    float radians = (float)Math.Atan2(deltaY, deltaX);
    float angle = radians * (float)(180 / Math.PI);

    Console.WriteLine(distance + " " + angle);
    

我尝试了 (2,2) 和 (4,4) 点。我得到的角度结果是-135。我还尝试了 (5,5) 和 (4,4) 点,它们得到了 45 分。

C# 数学 ATAN2

评论

1赞 JosephDoggie 9/14/2023
Atan2 通常会返回弧度。你把这些换算成度数了吗?请编辑并显示实际的代码调用。此外,通常,输入是一个 x 和一个 y,这大概是点之间的“增量”,我将其解释为 +2/+2 应该是第一象限,所以你应该编辑问题并展示你是如何做到的。
1赞 jmcilhinney 9/14/2023
请花一些时间在帮助中心学习如何正确提问。您不会发布代码图片。
0赞 JosephDoggie 9/14/2023
是的,请将代码写成具有正确格式的文本。谢谢

答:

1赞 MvG 9/14/2023 #1

当你写时,这个增量是从点 2 开始到点 1 结束的符号距离。你的直觉可能恰恰相反:从 1 开始,到 2 结束。所以你应该交换这种差异。y 也一样。deltaX = point1X - point2X

从 3 到 8 有多少个步骤?有 8 - 3 = 5 个步骤。看,结束减去开始也是你在日常情况下会用到的。

评论

0赞 ItsCrumbz 9/14/2023
哦,我明白你的意思了。我试过了,它有效,订单是问题所在!