这一行
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;
}
这让我感到疯狂,但当然我有一个可行的选择。我只是想知道出了什么问题。
答案 0 :(得分:2)
试试这个
double hdg_and_lee = cal_array[variation] + normalize(corrected.hdg + ((corrCalc.twa > 0 && corrCalc.twa < 180)? -abs(corrected.leeway) : abs(corrected.leeway)));
检查C运算符优先级,尤其是+
与?:
。