2015-03-25 89 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