Расчет степеней неточен - PullRequest
5 голосов
/ 09 марта 2020

Я использую следующий код для преобразования радиан в градусы и выполнения некоторых арифметических операций c для того же.

private double getDegrees(double rad)
{
    double deg = rad * Mathf.Rad2Deg;

     double degree = (-135 - deg) % 360;

     return degree;
}

Значение рассчитывается неточно. Я использую тот же код в Python, и результат довольно точный, как показано ниже:

def getDegree(rad):
    return (-135 - math.degrees(rad)) % 360

Как получить точные градусы с c#?

Input: -2.54 Output: 10.750966993188058
Input 2.57   Output 77.6960764459401
Input -0.62  Output 260.9199271359733
Input 0.52   Output 195.1409838350769

Примечание. Вывод после (-135 - deg) % 360;

Вывод из c# выглядит следующим образом:

Input -2.54  Output 11.0295281217168
Input 2.56   Output -282.127098553015
Input -0.63  Output -98.8646242270579
Input 0.51   Output -164.592296943409

1 Ответ

4 голосов
/ 09 марта 2020

Поскольку оператор % будет возвращать отрицательные значения в C#, когда входные данные отрицательные, вам придется преобразовать их обратно в положительные, добавив 360:

private double getDegrees(double rad)
{
     double deg = rad * Mathf.Rad2Deg;

     double degree = (-135 - deg) % 360;

     return degree < 0 ? degree + 360 : degree;
}

Попробуйте это онлайн

...