Эта линияЧто не так с этой кодовой линией?
double hdg_and_lee = cal_array[variation] +
normalize(corrected.hdg + (corrCalc.twa > 0 && corrCalc.twa < 180)
? -abs(corrected.leeway) : abs(corrected.leeway));
возвращает значение cal_array[variation]
, что явно неверно. corrected.leeway
- 0, но corrected.hdg
- 211, variation
- 14, и это то, что оценивает эта линия.
Я изменил его на это, и оно работает, но я думаю, что оно должно совпадать с строкой выше.
double lee = (corrCalc.twa > 0 && corrCalc.twa < 180) ? -abs(corrected.leeway) : abs(corrected.leeway));
double hdg_and_lee;
hdg_and_lee = cal_array[variation] + corrected.hdg + lee;
hdg_and_lee = normalize(hdg_and_lee);
Я просто не вижу, что я сделал не так.
Здесь нормализуется. Он только делает угол между 0 и 360;
double normalize(double angle){
while (angle < 0) angle += 360;
while (angle > 360) angle -= 360;
return angle;
}
Это сводит меня с ума, но, конечно, у меня есть рабочая альтернатива. Я просто хочу знать, что пошло не так.
Почему вы говорите, что они такие же, когда они ** явно ** не являются? –
Два предоставленных вами фрагмента кода не являются эквивалентными. В первом случае вы добавляете 'cal_array [вариация]' к результату 'normalize (...)', но во второй сумме 'cal_array [изменение]' передается как часть угла в 'normalize (. ..) '. –
Я должен был нормализовать все это и внести исправления, но это не меняет тот факт, что первая строка возвращает 14, а вторая версия возвращает 225. Нормализация ничего не делает ни в одном из приведенных случаев. –