根据距离和方位计算点/坐标

时间:2015-03-25 08:41:16

标签: c# math coordinate

数学不是我的强项,我觉得我在这里有些不和,但我无法弄清楚是什么。

我只是尝试在给定一些变量和常量的情况下填充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)来计算一边的偏移,但这也不起作用。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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