1

私はOBBアルゴリズムの衝突検出アルゴリズムに取り組んでいましたが、それが機能するところまで来ましたが、ハッキングされたコード(Ogre3dノードを使用)を使用して、ボックス空間で同等の行を実際には効果のない方法で見つけていますが、いくつかの小さなアルゴリズムを使用して、できるだけ簡単に実行したいと思っています。

基本的に、2 つの点と 1 つのボックス (簡単にするために、それぞれに 1 つの点のソリューションを使用できます) があり、これら 2 つの点が線を構成します。ボックスは好きなように回転できるので、ボックスを回転させて軸を揃える必要があります。これを行うには、同じ軸に合わせた空間に回転するポイントも必要です。2 次元で作業していたときにこれを行うことができましたが、3D で解決策を見つけるのに苦労しています。

鉛筆を粘土の箱に突き刺し、箱を回転させて軸を揃え、軸を揃えて計算することで簡単に説明できる概念を理解していますが、線を回転させる背後にあるコードが問題を引き起こしています. どんな助けでも大歓迎です:)

4

1 に答える 1

0

3D のボックスがある場合、3 つの単位ベクトル a、b、および c によって生成されたものと考えることができます。これらはそれぞれ 3 空間に存在し、いくつかの原点 O とともに存在します。前処理のステップとして、始めましょう。 O が原点であり、ボックス内の点が 2 つのベクトル u = (x0, y0, z0) と v = (x1, y1, z1) で定義されていると仮定します。あなたが今答えたいと思っている質問は、回転変換を適用してボックスを回転させ、a、b、c がそれぞれ x、y、z 軸に軸合わせされると仮定すると、点は何になるでしょうか。 u と v は?

これについては間違っているかもしれませんが、簡単な計算でこれを行うことができると思います。通常の正準基底から、ボックスのベクトルによって定義される基底に変換するために行う変換について考えるところから始めることができます。この行列は次の式で与えられます。

      | | | 
M = ( a b c )
      | | | 

つまり、列が a、b、および c である行列です。

行列 M が得られたので、この変換を逆にする (つまり、単位ベクトル a、b、および c を軸に沿った単位ベクトルにマッピングする) 行列を、M の逆行列、M -1と考えることができます。ただし、バウンディング ボックスを定義するベクトル a、b、および c を正規直交に選択した場合 (これは、ベクトルが直交していると仮定すると、それらを正規化することで実行できます)、M -1 = M T、転置によって与えられる M の

        - a -
M^T = ( - b - )
        - c -

つまり、最初の行が a、2 番目の行が b、3 番目の行が c である行列です。これらのベクトルが与えられると、ボックスを M T u および M T vとして回転させた場合に点 u および v がどこにあるかを把握できます。どちらも計算が難しくない式です。

お役に立てれば!

于 2011-01-18T06:46:35.260 に答える