2015-03-25 4 views
0

Математика не мой сильный костюм, и я думаю, что у меня что-то запуталось, но я не могу понять, что.Вычислить точку/координату с расстояния и опоры

Я просто пытаюсь заполнить 2 новые координаты с учетом ряда переменных и констант.

если я Origin координата 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

 Смежные вопросы

  • Нет связанных вопросов^_^