【问题标题】:Calculate point/coordinate from distance and bearing从距离和方位计算点/坐标
【发布时间】:2015-03-25 16:45:44
【问题描述】:

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

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

如果我将 Origin 坐标设为 5,5,Destination 坐标设为 10,5,我可以使用这两个函数计算出距离 = 5,并且从 Origin 到 Destination 的方位角为 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) 来计算侧面的偏移量,但这也不起作用。

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

【问题讨论】:

    标签: c# math coordinate


    【解决方案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))
    

    【讨论】:

    • 谢谢。我会看看这些修改。 X & Y 的反转似乎有必要让它输出正确的方位。如果 coord 1 =1,1 和 coord 2=1,5,我没有得到 0 的输出,这是人们期望的“直线上升”?也许这进一步加剧了我在尝试解决此问题时的困惑。
    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多