別のベクトルから提供された角度に最も近いセットで2Dベクトルを見つけようとしています。
したがって、たとえば、 v(10, 10)
90度の角度に沿って最も近い他のベクトルを見つけたい場合はv(20, 10)
、見つける必要があります。2つのベクトル間の正しい方位を返すと思うメソッドを作成しました。
float getBearing(
const sf::Vector2f& a, const sf::Vector2f& b)
{
float degs = atan2f(b.y - a.y, b.x - a.x) * (180 / M_PI);
return (degs > 0.0f ? degs : (360.0f + degs)) + 90.0f;
}
これは問題なく機能しているようですが、上下に配置すると、180が返されますが、これは問題ありませんが、360は奇妙です。真上にある場合は0を返す必要がありますか?そのための最良の方法は、360をチェックして、0を返すことだと思います。
私の問題は、通過した角度、たとえば90度と、から返された角度の違いを理解できないことgetBearing
です。返されるベアリングがすべての状況で正しいかどうかさえわかりません。
誰かが私のベアリング方法の明白な間違いを修正し、2つのベアリングの違いを得る方法を提案するのを手伝ってもらえますか?私はインターネットで探していましたが、それを行う方法はたくさんあり、そのほとんどは他の言語で示されています。
ありがとう。