2 つの 0 ~ 360 のコンパス方位の違いを把握するために、この方法があります。
これは、私がどれだけ絶対的に(常に正の出力のように)離れているかを把握するのに役立ちますが、符号を出力に導入するために何をする必要があるかを理解するのに苦労しています。
理想的には、最初の見出しから最後の見出しまでの最短距離が時計回りであるerror
場合、正の符号が必要です。見出し間の最短距離が反時計回りである場合は、error
負の符号を持つこと。
望ましい入出力の例
initial
-- final
--error
0 .... 30 .... 30
30 .................... 0 .... -30
360 ……………… 1 ……………… 1
1 .... 360 .... -1
コード:
/// <summary>
/// Calculate the error from a given initial heading to a final heading
/// </summary>
/// <param name="inital"></param>
/// <param name="final"></param>
/// <returns></returns>
private double GetHeadingError(double initial, double final)
{
double directionA = final - initial;
double directionB = 360 - (final + initial);
double error = 0;
if (Math.Abs(directionA) < Math.Abs(directionB))
{
error = directionA;
}
else
{
error = directionB;
}
return error;
}