問題タブ [quaternions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
4794 参照

math - あるクォータニオンのヨー部分を別のクォータニオンのヨー部分で補正する

次の問題があります: モーション キャプチャ デバイスからのクォータニオン (q1) は、2 番目の追跡対象オブジェクトによって導出された別の方向クォータニオン (q2) からのヨー角度 (およびヨーのみ!) によって修正される必要があるため、ピッチとロールがq1 の偏角は前と同じですが、q1 は q2 のヨーを持ちます。

実用的な解決策は、クォートをマトリックスに変換することです。次に、計算を行って回転角度を抽出し、次にヘディング補正を行います。ただし、これにより、特定の軸の方向に直接移動すると「反転」が発生します (たとえば、0° - 359° の後)。便利ではない他の変換も試しました。

行列またはオイラー角に変換せずに四元数で直接計算を行う可能性はありますか (つまり、修正された四元数を追跡対象の四元数として設定できます)?

前述のように、補正にはアップ軸 (ヨー) 周りの回転のみを含める必要があります。数学クラスに関するプログラミングの可能性はあまりありません (Virtools の VSL スクリプトは、残念ながらこの方向ではかなり制限されています)。誰かアドバイスはありますか?

0 投票する
2 に答える
2703 参照

opengl - グローバル ローテーションにローカル ローテーションを追加する

多くの数式と変換を試しましたが、期待どおりの結果が得られませんでした。

シナリオは非常に単純です。

3DS Max やその他の 3D ソフトウェアは、ローカル回転の増分をグローバル絶対回転に「変換」する方法を教えてください。

理解に役立つ例: 3DS Max - Maya - Modo (3 つすべてで同じ結果が得られたので、この結果は正しいと思います。) 絶対回転順序を XYZ と仮定します。

これらの変換の後、この順序で、World Absolute 回転を見て、私が見るものはX:40.524 Y:-28.024 Z:-21.881

彼らはどのようにその結果を達成しますか? どんな式?行列、オイラー角、四元数などを使用して、どうすれば同じ結果を得ることができますか?

ありがとうございました。

PS: 簡単な解決策は、クォータニオンまたはマトリックスを使用し、ローカル回転をグローバルに追加してから、絶対結果を取得することです。しかし、この方法では回転順序を制御できないため、うまく機能しません。結果は常に数式の順序を使用して値を取得します。

0 投票する
2 に答える
9570 参照

java - このクォータニオンローテーションコードはどのように機能しますか?

クォータニオンローテーションがどのように機能するかを理解しようとしています。このミニチュートリアルhttp://www.julapy.com/blog/2008/12/22/quaternion-rotation/を見つけましたが、彼は私がトレーニングできないといくつかの仮定をしています。 、「軸の周りでベクトルを回転させるだけで、各軸の周りの回転ベクトルを計算する」方法のように、彼はどのようにangleDegreesX、angleDegreesY、angleDegreesZを計算しますか?

誰かが実用的な例や説明を提供できますか?

0 投票する
1 に答える
1810 参照

c++ - クォータニオンの回転が機能しない

クォータニオンを使い始めたばかりですが、クォータニオンを使用して単純な FPS カメラを適切に動作させるのに苦労しています。

基本的に、マウスを動かそうとすると、画面上に描いた三角形が狂ってしまい、目に見えない速さで画面上を移動します。マウスを動かすまで、移動キー (wsad) は期待どおりに機能していますが、その後、すべてが台無しになります。問題はローテーションにあると思いますが、ここ数日間、この問題に頭を悩ませていましたが、役に立ちませんでした。

何が起こっているかのビデオは次のとおりです。Quaternion Test Video

  • マウス入力を見るには、最初から見てください。
  • キーボード入力 (進む、戻るなど) を表示するには、0:51 秒にスキップします。

参考までに、私が使用している 3 つの主要なクラスを次に示します。
Quaternion.h
CameraSceneNode.h
CameraSceneNode.cpp

最も関連性の高いセクションは、tick()(回転クォータニオンを更新する場所) とrender()(シーンの回転と移動で構成される「カメラ」をレンダリングする場所) です。

tick()メソッドは次のとおりです。

そしてここにrender()方法があります:

また、カメラを呼び出す前にrender()、次のコードを実行します。

tick(..)との両方render()が、メインのゲーム ループからすべてのフレームで呼び出されます。このクラスには、移動方向とカメラの回転の変更を受け入れる関数がありますCameraSceneNode(つまり、movement_バッファ またはxRot_とを変更しyRot_ます)。

情報が不十分でしたら申し訳ありません。一部の関数 ( などfillMatrix(..)) は、上記で参照した 3 つの .h/.cpp ファイルで定義されています。Quaternion クラスを何度か確認しましたが、正しいように見えます。しかし、繰り返しますが、私が使用しているすべてのコードは私には正しいように見えるので、誰が知っていますか:S

私はこれで完全に機知に富んでいます。なぜこれがうまくいかないのか、誰かが光を当てることができれば、とても感謝しています!!

乾杯

ジャレット

0 投票する
3 に答える
2514 参照

delphi - グローバルローテーション

GLSceneには、ローカル方向を中心とした回転のための 3 つのパラメーター (RollAngle、PitchAngle、TurnAngle) があります。下の画像で、キューブをグローバル方向 (オレンジ色の軸) を中心に回転させるにはどうすればよいですか?

ここに画像の説明を入力

0 投票する
2 に答える
12616 参照

quaternions - クォータニオン逆数を計算する

こんにちは私はクォータニオンの逆数を計算する方法を理解しようとしています。コード例は素晴らしいでしょう。

乾杯

0 投票する
2 に答える
2831 参照

c# - XNA Quaternion.createFromAxisAngle

XNA でフライト シミュレータ プログラム (Star fox 64 に類似) を作成していますが、ローテーションに問題があります。私の考えは、速度のベクトルと位置のベクトルを持つことです。私が許可しているコントロールは、オイラーの角度が問題を引き起こすようにするため、クォータニオンを使用したいと考えています。

私はまだグラフィックスのレンダリングにあまり慣れていませんが、Quaternion.createFromAxisAngle(vector, roll) (ロールは速度ベクトルの周りの回転です) を使用できると思っていましたが、正しく機能していません。基本的に、ピッチまたはヨーを回転させようとしても何も起こりません。ロールすると機能しますが、期待したほどではありません。これは createFromAxisAngle メソッドの正しい使い方ですか? ありがとう。

これが私の船の更新位置コードです:

0 投票する
2 に答える
1566 参照

math - クォータニオン回転から反対のビューを計算する方法は?

通常は 4 つの値で記述されるように、クォータニオン回転がありますa b c d。オブジェクトを正面から見るように x 軸を変換するとします。今度はこの回転を変更したいので、オブジェクトを後ろから見ます。基本的には視点を前から後ろに変えたいのですが、この回転を使ってそれを行います。

反対の回転はどのように計算できますか?

0 投票する
1 に答える
528 参照

animation - Opengl ES の四元数

私は棒人間を作成するために OpenGL を使用していますが、これはばかげた質問のように思えるかもしれませんが、四元数を使用して回転を表す場合、回転を原点以外の別の点の周りにしたい場合はどうすればよいですか?単位四元数を使用する必要がありますか? . 私の推測では、回転してから平行移動し、回転の中心を変更することもできます。単位クォータニオンは使用しません。これは正しい道ですか?