2015-03-25 87 views
0

数学不是我的强项,我想我在这里混淆了一些东西,但是我不知道是什么。从距离和方位计算点/坐标

我只是想给一些变量和常量填充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)来计算偏移到一边,但是这不是工作要么。

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

回答

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)) 
+0

谢谢。我会看看这些补偿。 X&Y的逆转似乎有必要让它输出正确的方位。如果坐标1 = 1,1和坐标2 = 1,5,我没有得到0的输出,这是人们期望的“直线上升”?也许这更加复杂,我试图解决这个问题的困惑。 – GavinP 2015-03-25 12:11:53