2つの単位ベクトルの間でx、y、zの回転値を取得するにはどうすればよいですか?ドットプロダクトを使うことはできません。なぜならそれは私に1つの価値しか与えないからです。私は回転行列を各軸上で回転させ、それらのためには各軸上に角度差が必要です。 私は2つのコンポーネントのドットプロダクトを試しましたが、ちょっと混乱しました。 これを行うためのすばやく簡単な方法はありますか?たぶん私は2つのコンポーネントのことで間違っていたが、私は知らない。 誰かがこの正確なことをするglslメソッドを知っていればベストだろう!ベクトル間のxyz角度を取得しますか?
答えて
2つのベクトルの間にx、y、zの角度を取得する場合は、2つのベクトルの投影の内積を、目的の軸の直交面にとります。
つまり、2つのベクトルの間にz角度が必要な場合は、オリジナルのxy平面ベクトルを作成します。これを行うには、ベクトルのz成分を無視するベクトルを作成します。
vec3 u = vec3(...); // your input vector
vec3 v = vec3(...); // your other input vector
float x_angle = acos(dot(u.yz, v.yz));
float y_angle = acos(dot(u.xz, v.xz));
float z_angle = acos(dot(u.xy, v.xy));
あなたは内積を使用することになるので、あなたがu.xz
やu.zx
を使用している場合、それは問題ではないことに注意してください。ドットプロダクト内の両方のベクトルに同じ順序を使用するようにしてください。また、ここでコードの3行目から5行目には、式にベクトル長が記述されていないため、単位ベクトルが仮定されています。
acos
を使用すると、引数の値が小さい場合にエラーが発生する可能性があることにも注意してください。これを避けるために、2D投影ベクトルの差をとって、atan2
関数で使用することができます。
編集
究極の目標は、同じ形質を有する他のベクターを再配向するように回転行列を構築することであることを提案で、私は(そうでなければ、任意の軸回転としても知られる)軸角アプローチを使用して示唆しています。この方法は、2つのベクトル(ドット積)と、この角度が掛け合わされる適切な回転軸(交差積)との間の角度を求めることを含む。
最初のステップでは、ドットプロダクトを使用して2つのベクトルの間の角度を求めます。
float angle = acos(dot(u, v)); // for unit vectors
次に、回転軸を見つけるには、クロス積を使用してください。クロス積がu
とv
の両方に垂直なベクトルを生成することがわかっている場合、それらをいずれかの順序で交差させると、適切な軸が得られます。
vec3 axis = cross(u, v); // again, for unit vectors
// normalize this if need be
使用したいと思うでしょう行列の形は、このWikipedia articleの軸と角度から回転行列の見出しの下に見つけることができます。計算をより速く実行するために、一時的な値を保存することをお勧めします。
この行列が構築されたら、それを任意のベクトルで乗算して元の変換を再適用するだけです。
- 1. カメラの動きのベクトルの角度を取得する方法
- 2. Matlabの2つのベクトル間の角度
- 3. C++ベクトルとポイントの間の角度
- 4. 2つのベクトルの間の角度を計算する
- 5. Unity3dベクトル間の角度を示す曲線を描く
- 6. ケラスのベクトル間の距離と角度を計算するLSTM
- 7. Java Vector3 2つのベクトル間の角度を計算する
- 8. 角度 - 子コンポーネントからデータを取得していますか?
- 9. 1つの平面内の2つのベクトルの間の角度を効率的に取得するには?
- 10. HTTPリクエストの実行時間を角度で取得する
- 11. ベクトルxyzコンポーネントからのクォータニオン - Qt
- 12. 行列からすべての対角ベクトルを取得する
- 13. 角度:ng-attr-idでng-modelを取得しますか?
- 14. 2つの3Dポイント間の角度を取得
- 15. 緯度/経度の2つのポイントからXYZ速度を取得する方法は?
- 16. 角度2のシステム時間変更イベントを取得
- 17. 角度コンポーネントからデータを取得
- 18. ジャイロから角度を取得
- 19. 3点から角度を取得
- 20. datetimepickerからの角度取得日付
- 21. 新しいSelection.Pickpointを実行するとき、既存のXYZからどのように距離と角度を取得しますか?
- 22. GLSLの2つのベクトル間の角度の計算
- 23. ビーコン経由で加速度計からXYZ値を取得する方法
- 24. 2つのベクトルの間の角度3D? python
- 25. Matlab atan2 2つの3Dベクトルの間の角度
- 26. 2つの3Dベクトルの間のC++計算角度(0〜360)
- 27. ブートストラップ角度2の前にベースURLを取得します。
- 28. 角度JSにJSONオブジェクトのノード数を取得します
- 29. アンドロイド加速度計からの傾斜角度を取得
- 30. firebaseを使用して現在のユーザーを角度で取得しますか?
これはうまくいきませんでした。私はuとvを同じベクトルにしてベーシックオールアウトしました(out =(0、0、1)、in =(0、0、1)) 。それはまた、他のvectrosとの仕事をしなかった –
新しいベクトルを得るための全体的なプロセスは何ですか?私はあなたの究極の目標が何かを知りたいのです。また、上記のように、あなたがacosを使用している場合は、同じベクトルを持ついくつかの違和感があるかもしれません。たとえば、Luaでは、結果としてNaNを取得しないように入力を固定する必要がありました。 – Nathan
そして、私の目標は、回転軸の回転の違いを取得することです、私は回転行列にこれらの値を挿入し、notherベクトルを回転するためにこれらを使用することができます。回転したベクトルy軸は他のベクトルに揃えられます。 –