1. ホーム
  2. language-agnostic

[解決済み] 2つの角度の差を求めるにはどうすればよいのでしょうか?

2022-04-23 09:51:38

質問

ある座標を中心に-PI -> PIの範囲にある2つの角度があるとき、その間にある2つの角度のうち最も小さいものの値は何か。

PIと-PIの差は2PIではなく、0であることを考慮する。

中心から2本の線が伸びている円を想像してみてください。 小さい方の角 そして、外側にある角、つまり大きい方の角です。この2つの角度を足すと、1つの円になります。それぞれの角度がある範囲に収まることを考えると ロールオーバーを考慮した、小さい方の角度の値は?

解決方法は?

これは、任意の角度に対して符号付きの角度を与えるものです。

a = targetA - sourceA
a = (a + 180) % 360 - 180

多くの言語では modulo 演算は、配当と同じ符号の値を返します(C、C++、C#、JavaScriptなど。 全リストはこちら ). これには、カスタム mod というような関数があります。

mod = (a, n) -> a - floor(a/n) * n

とか、そういう。

mod = (a, n) -> (a % n + n) % n

角度が[-180, 180]の範囲内であれば、これも動作します。

a = targetA - sourceA
a += (a>180) ? -360 : (a<-180) ? 360 : 0

もっと冗長な言い方で。

a = targetA - sourceA
a -= 360 if a > 180
a += 360 if a < -180