Странный вывод в подшипнике между двумя координатами

У меня есть метод, который, как предполагается, для расчета направления между двумя географическими координатами (в 40.7486, пример формата -73.9864).

У меня, однако, возникает проблема, когда вычисляемый заголовок отличается от заголовка, который я вычисляю с помощью проверенного и проверенного приложения.

Например, начальный угол между следующими точками составляет 074 градуса, однако мой метод возвращает 047.
40.7486, -73.9864
40.9486, -72.9866

Вот соответствующий фрагмент кода.

        /// <summary>
    /// Calculate the inital bearing between two Locations
    /// </summary>
    /// <param name="pointA"></param>
    /// <param name="pointB"></param>
    /// <param name="headingType"></param>
    /// <returns></returns>
    public static double BearingToLocation(Location pointA, Location pointB)
    {
        // Convert both locations from degrees to radians
        pointA = LocationToRad(pointA);
        pointB = LocationToRad(pointB);

        double partOne = exMath.Sin(pointB.Longitude - pointA.Longitude) * exMath.Cos(pointB.Latitude);
        double partTwo = exMath.Cos(pointA.Latitude) * exMath.Sin(pointB.Latitude) - exMath.Sin(pointA.Latitude) * exMath.Cos(pointB.Latitude) * exMath.Cos(pointB.Longitude - pointA.Longitude);
        double heading = AdditionalMath.ToDeg(exMath.Atan2(partOne, partTwo) % 2 * exMath.PI);

        // Solve for compass wrap around
        if (heading < 0)
            heading += 360;

        return heading;
    }

    /// <summary>
    /// Return a new location in radians
    /// </summary>
    /// <param name="pointA"></param>
    /// <returns></returns>
    public static Location LocationToRad(Location pointA)
    {
        return new Location(AdditionalMath.ToRad(pointA.Latitude), AdditionalMath.ToRad(pointA.Longitude), pointA.Altitude);
    }

}

/// <summary>
/// Misc. math functions not available in Elze Kool's lib
/// </summary>
public static class AdditionalMath
{
    /// <summary>
    /// Degrees to radians
    /// </summary>
    /// <param name="x"></param>
    /// <returns></returns>
    public static double ToRad(double x)
    {
        return exMath.PI * x / 180.00F;
    }

    /// <summary>
    /// Radians to degrees
    /// </summary>
    /// <param name="x"></param>
    /// <returns></returns>
    public static double ToDeg(double x)
    {
        return x * 180.00F / exMath.PI;
    }
}

Кто-нибудь может увидеть проблему? Я просмотрел это и не мог найти проблему.

1 ответ

Решение

% выглядит подозрительно в этой строке:

    double heading = AdditionalMath.ToDeg(exMath.Atan2(partOne, partTwo) % 2 * exMath.PI);
Другие вопросы по тегам