У меня есть класс Angle, который имеет этот конструкторУгол Нормализация C#
public Angle(int deg, // Degrees, minutes, seconds
int min, // (Signs should agree
int sec) // for conventional notation.)
{
/* //Bug degree normalization
while (deg <= -180) deg += 360;
while (deg > Math.PI) deg -= 360;
//correction end */
double seconds = sec + 60 * (min + 60 * deg);
value = seconds * Math.PI/648000.0;
normalize();
}
и у меня есть эти значения для тестирования, что конструктор
int[] degrees = { 0, 180, -180, Int32.MinValue/60, 120+180*200000};
int[] minutes = { 0, 0, 0, 0,56};
int[] seconds = { 0, 0, 0, 0,10};
Console.WriteLine("Testing constructor Angle(int deg, int min)");
for (int i = 0; i < degrees.Length; i++)
{
p = new Angle(degrees[i], minutes[i], seconds[i]);
Console.WriteLine("p = " + p);
}
/*Testing constructor Angle(int deg, int min)
p = 0°0'0"
p = 180°0'0"
p = 180°0'0"
p = 0°8'0" incorrect output
p = -73°11'50" incorrect output expected 120 56 10
*/
Я не понимаю, почему есть ошибка здесь? и почему они использовали divide Int32.MinValue на 60 и 120 + 180 * 200000 в качестве этого формата?
комментарии в конструкторе коррекции для кода
UPDATE: Добавлен код normalize()
// For compatibility with the math libraries and other software
// range is (-pi,pi] not [0,2pi), enforced by the following function:
void normalize()
{
double twoPi = Math.PI + Math.PI;
while (value <= -Math.PI) value += twoPi;
while (value > Math.PI) value -= twoPi;
}
Что именно вы спрашиваете? Вы спрашиваете, как обеспечить угол между 0 и 2pi или вы спрашиваете, как ваш выход был достигнут? Если это последний, вам нужно будет показать вашу функцию normalize(). Одной из распространенных проблем с этим типом проблемы является то, что вы учитываете только первые два вращения и не более того. Вы должны убедиться, что ваша функция normalize() учитывает углы больше 4pi. – brcpar
while (deg> Math.PI) deg - = 360; эта строка не имеет смысла ... Вы, конечно, имеете в виду deg> 180 – tolanj
Использование цикла while, чтобы обернуть значения, является идеей _bad_. – ja72