ベクトル B がベクトル A とベクトル C の小さな角度の間にあるかどうかを判断するための高速で効果的な方法を探しています。次の理由により、非常に単純です。
- どのベクトルも正規化されていると想定することはできず、それらを正規化することは避けたい余分なステップです。
- どちらが角度が小さいかという明確な概念がないので、線のどちらが良いか悪いかは一概には言えません。
- A と B が同一線上にあるか、正確に 180 度離れている可能性があります。その場合は false を返します。
- 私は 3D 環境で作業していますが、これを 2D に簡略化するのは簡単です。このテストは、できるだけ高速に実行する必要があるアルゴリズムで使用されます。
垂直ベクトルがどちらを指すかを決定する簡単で効率的な方法があれば、テストに 2 つの内積を使用できます。
私が検討してきた別のアプローチは、これまでのところあまり成功していませんが、マトリックスを使用することです。理論的には、マトリックス変換について理解していることから、A と C を基底ベクトルとして使用できるはずです。次に、B に行列 I を掛けると、X と Y が両方とも正であるかどうかによって、B がどの象限にあるかをテストできるはずです。このアプローチを機能させることができれば、1 つの行列乗算が 2 つの内積よりも高速であり、どちらの側が最小の角度であるかを心配する必要がないため、おそらく最適です。
問題は、私のテストでは、単純に A と C を基数として使用し、それを通常どおり乗算して正しい動作を得ることができないことです。ここで何が間違っているのか本当にわかりません。「ベクトル空間」という用語に何度か出くわしましたが、これは、直交基底または正規直交基底を必要としない行列変換と非常によく似た概念のように思えます。マトリックスと同じですか?そうでない場合、より良いアプローチがあるかもしれません。それをどのように使用しますか?
私が話していることをより視覚的に説明するために:
@Aki Suihkonen私はそれがうまくいかないようです。実行できるモックケースをコーディングして、何かを理解できないかどうかを確認しました
この場合、
斧 2.9579773 エイ 3.315979
Cx 2.5879822 Cy 5.1630249
4 つの象限を中心に回転する BI の場合、ベクトルは空間を分割します。
私が得た兆候: - Q1 の--
場合 - Q2+-
の場合 - Q3+-
の場合 - Q4 の場合--
環境内で画像と同じ方向に回転したと仮定すると、回転したと確信しています。