問題タブ [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 投票する
1 に答える
501 参照

c - CLAPACKまたは代替Cスタイルクォータニオンライブラリのクォータニオン

一連の空間計算を、基本的にCコードをコンパイルして実行する組み込み環境に移植しています。

以前はVNL(新しいプラットフォームでは機能しないテンプレート化されたC ++ライブラリ)を使用していた多くの線形代数関数をCBLASとCLAPACKに置き換えました。それらのAPI(すべてのパラメーターはポインターであり、テンプレートはありません)は、私が行っていることに最適です。

ただし、問題は、CLAPACKユーザーガイドのどこにもクォータニオンベースの関数が表示されないことです。セクションが欠落していて、どこかにクォータニオンサポートがありますか?もしそうなら、私に機能を教えてください。具体的には、オイラー角と3x3行列との間の逆数、乗算、および変換を探しています。

CLAPACKにこの種のサポートがない場合、クォータニオン計算を行う同様の設計特性を持つ別のライブラリはありますか?

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

java - クォータニオンと glMultMatrix による描画 (OpenGL)

また問題が発生しました。数日以来、私はジンバルロックなしで Java でカメラを書き込もうとしています。これを解決するために、OpenGL の Quaternions と glMultMatrix を使用しようとしています。また、ライブラリ「LWJGL」、特にクラスMatrix4fVector4f、および Quaternions も使用しています。クォータニオンを計算するコードは次のとおりです。

そして、これを私は四元数を行列に変換します:

変換されたクォータニオンは、たとえば次のようになります。

この後、次のコードでシーンを描画します。

私の問題は、カメラが動かないか、十分に動かないことです。これは、プレーヤー モデルしか見えず、他には何も見えないためです (プレーヤー モデルの後に描画するシーンには、別の立方体もあります)。

正確に何が間違っているのかわかりません。描画ですか、回転ですか、変換ですか。私を助けてください。

編集:

それは私のOpenGLの初期化です:

何が間違っているのですか?

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

java - クォータニオンの「通常の回転」は、軸角度に変換されたときに奇妙な値を与えます

カスタムQuaternionの実装に問題があるようです。 私のクォータニオン実装をJavaでダウンロードします

このスニペットをローチすると、Main()メソッドでクォータニオン角度の進化を確認できます。

次の結果が得られました:

では、なぜ角度の値は最初に360度になり、次に0に向かって減少するのでしょうか。Quaternion#toAxisAngle()メソッドの式2 * Acos(Quaternion.w)を使用して角度を計算しましたが、?実装は悪くないかもしれませんが、0、10、...、350、360、0、10、...、350、360、0、10などを返すように角度を計算するにはどうすればよいですか?

そして最後に、実際の角度を計算する方法はありますか?したがって、その角度は値を超えます:0,10,20,30、...、360,0,10,20 ...?


ただし、これをJOGLプログラムで使用して、毎回クォータニオン乗算を計算し、結果のクォータニオンでtoMatrix()メソッドを呼び出すだけで、単純な6色の立方体を定期的に回転させることができました。何が機能したか(JOGL固有の実装の詳細に注意を払わないでください):

よろしく

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

c++ - クォータニオン回転 OpenGL

quaternionたとえば、プレーヤーの方向とこの回転の周りの角度を表す を作成するとします。そのため、アプリケーションでは飛行機を飛ばすつもりです。クォータニオンは、プレイヤーの方向とこの方向の周りの角度を表します。

次に、私の質問は、プログラムでオブジェクトを回転させる方法です。プレーヤーのクォータニオンをマトリックスに変換してから、これを glMultMatrix に変換しますか?

これがすべて良い場合、誰かが私の理論が正しいかどうかを投稿できます。そうでない場合は、読むためのソース資料または私が何をすべきかについての良い理論を投稿してください。

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

c++ - OpenGL で 0 を横切って回転する

OpenGL でクォータニオンを使用してオブジェクトを回転させていますが、5 度から -5 度に回転すると (単位平面を横切る)、モデルが「遠くまで」回転するという問題があります。つまり、平面全体で 10 度ではなく、5 から -5 まで 350 度全体を回転させます。これは、0度回転して「パスゴー」するたびに、各軸を中心とした回転で発生しますが、修正方法がわかりません。

私のコードは次のようになります。ここで、ロール、ピッチ、ヨーは、オブジェクトの回転のオイラー角を表します。

助言がありますか?

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

c++ - 位置、四元数、およびスケール コンポーネントによる行列乗算

私のコードの一部は、xyz 位置、xyz スケール、およびクォータニオンを格納することにより、4x3 行列に相当するものを格納します。以下のコード スニペット:

これらのオブジェクトの 2 つを (行列乗算のように) 一緒に乗算したいのですが、それぞれを行列に変換し、その方法で乗算を行い、次にそれを実行するよりも高速で優れた方法があるかどうか疑問に思っています。結果の位置、回転、およびスケールを再度抽出しますか?

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

vector - クォータニオンからの方向ベクトル?

3D キャラクターの上腕の回転を表すクォータニオンがあります。そのキャラクターの腕の新しい位置を表すはずの線もあります。その線の位置は、2 つの 3D 点によって与えられます。

これは私が持っている唯一のデータであり、2 つの方向ベクトルを取り、腕を新しい位置に移動するために必要な回転を表すクォータニオンを返す 3D パッケージ (デジタル ルーン) のメソッドを呼び出そうとしています。

問題は、軸が混同されていて、通常は動作していないかのように、奇妙な動作が見られることです。また、3D 男の腕を表す Quaternion オブジェクト (3D パッケージからのもの) には、W、X、Y、および Z があります。X、Y、および Z は方向ベクトルを表しますか? それが関数を適切に呼び出す必要があるからです。私はこれを線の端点から計算した方向ベクトルと一緒に使用していますが、私が言ったように、それはおかしいように見えます.

X、Y、Z が方向ベクトルでない場合、方向ベクトルを計算できるようにクォータニオンから 2 つのエンドポイントに変換する方法を教えてください。

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

camera - クォータニオン カメラを使用する場合、どのように回転を計算できますか?

クォータニオン カメラが与えられた場合、プレイヤーが異なる表面法線 (壁) の上を歩くことができる場合、その回転をどのように計算できますか。

プレイヤーが 3D 空間の天井や壁を歩くことができるゲームに取り組んでいます。ジンバル ロックを回避するために、クォータニオン カメラ システムを使用することにしました。up(0,1,0)、right(1,0,0)、forward(0,0,1) ベクトルのセットを指定して、クォータニオンを作成します。プレーヤーは、ヘディングの場合はアップ ベクトルを中心に回転し、ピッチの場合は右ベクトルを中心に回転します。

重力ベクトルを変更しなくても、カメラは正常に機能し、プレイヤーは標準的な FPS ゲームであるかのように環境内を動き回ることができます。

簡単にするために、プレーヤーがキーを押して、現在の法線とは異なる最も近いコリジョン サーフェスから法線を取得し、それを新しい重力ベクトルとして割り当てることができるとします。

残念ながら、私はブレインブロックに遭遇し、この新しい重力ベクトルから新しい上、右、および前方ベクトルを適切に取得し、それらを現在の回転クォータニオンに適用する方法を理解できません。問題に取り組みます。それが役立つ場合は、カメラの移動と回転のコードを以下に示します。

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

opengl - 補間を使用したOpenGL ArcBallの回転とアニメーション?

私の OpenGL アプリケーションでは、ArcBall 回転を使用して、マウスを使用してオブジェクトを回転する必要があります。

この記事を読んだ後、クォータニオンを使用する必要があることに気付きました - http://www.gamedev.net/page/resources/_/technical/math-and-physics/quaternion-powers-r1095

そして、ここで使いやすい実装を見つけました - http://www.codeproject.com/KB/openGL/virtualtrackball.aspx

しかし、私の問題は、保存された 2 つのステータス間でオブジェクトをアニメーション化する必要があることです。あれは -

状態 (1) = (位置 X1、位置 Y1、位置 Z1、回転 1);

状態 (2) = (位置 X2、位置 Y2、位置 Z2、回転 2);

*これらの「回転」は回転行列です

そして、アニメーションは n ステップで行われます。

このビデオに示されているようなもの - http://www.youtube.com/watch?v=rrUCBOlJdt4

3 つの軸 (ロール、ピッチ、ヨー) に 3 つの別々の角度を使用していた場合、角度を簡単に補間できます。しかし、ArcBall は回転 Matrix を使用するため、どうすれば State 1 と State2 の間の回転を補間できますか?

助言がありますか ?

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

java - 2 つの四元数の角度を取得する際の問題

さて、私は 2 つのクォータニオンの角度を取得しようとしています。ほぼ完全に機能しますが、

そして、私は私の人生の理由を理解できません。(注:evec印刷物に残った古い変数名でした)

とにかく、ここに私のコードがあります:

237 から 119 へのジャンプを停止し、360 まで上昇し続けるにはどうすればよいですか?