根据距离和方位计算 point/coordinate

Calculate point/coordinate from distance and bearing

数学不是我的强项,我想我在这里有一些混淆,但我不知道是什么。

我只是想在给定一些变量和常量的情况下填充 2 个新坐标。

如果我将原点坐标设置为 5,5,将目标坐标设置为 10,5,我可以使用以下两个函数计算出该距离 = 5,并且从原点到目的地的方位角为 90:

private static double GetDistance(PointF point1, PointF point2)
{
        double a = (double)(point2.X - point1.X);
        double b = (double)(point2.Y - point1.Y);

        return Math.Sqrt(a * a + b * b);
    }
public static double GetBearing(PointF coord1, PointF coord2) 
    {
        double result = 0.0;

        result = Math.Atan2(coord2.X - coord1.X, coord2.Y - coord1.Y) * (180 / Math.PI); //- Math.Atan2(coord4.y - coord3.y, coord4.x - coord3.x)) 

        if (result < 0)
        {
            result = result + 360;
        }
        return result;
    }

给定 xd=1 的偏移距离和 180 的偏移方位角(即与目的地直接相反的方向),我希望能够做的是绘制位置 4,5。我还希望能够在 90 和地块 5,6 中提供不同的偏移轴承。

这是我尝试过的方法,但我得到的值完全没有意义。

public static PointF CalculateCoordinate(double Angle, double Distance)
    {
        PointF coord = new PointF(Convert.ToSingle(Distance * Math.Cos(Angle)), Convert.ToSingle(Distance * Math.Sin(Angle)));
        return coord;
    }

CalculateCoordinate(GetBearing(Destination, Origin),1) 直接将轴承反转 180。我试过这个 CalculateCoordinate(90,1) 来计算向侧面的偏移量,但这也不起作用。

我哪里错了,我敢肯定这是非常愚蠢和简单的事情。

我看到了两个错误。首先,Atan2第一个参数取Y值,第二个参数取X值:

Math.Atan2(coord2.Y - coord1.Y, coord2.X - coord1.X) * (180 / Math.PI);

其次,您在 GetBearing 中将弧度转换为度数,但在 CalculateCoordinate 中您没有将角度从度数转换为弧度,例如:

Math.Cos(Angle * (Math.PI / 180))