問題タブ [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 に答える
140 参照

math - 行列/四元数の問題

そのため、モデルビュー マトリックス (Y 軸でのみ回転する必要があります) と回転マトリックス (Y 軸でのみ回転する必要があります) の 2 つのマトリックスを取得しました。

ここで、投影 (見ているビュー) の角度と回転行列の角度を知る必要があり、その結果に基づいて値 (0 から 8 の間) を割り当てる必要があります。

または、2 つの回転を加算して 0 から 8 の間の値を取得できる他の方法。

基本的に、90 d を見て敵が 180 d 歩いている場合、描かれた敵のスプライトが右に移動するのがわかります。

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

quaternions - オリエンテーションクォータニオンが2つある場合、一方から他方に移動するために必要な回転クォータニオンを見つけるにはどうすればよいですか?

ゲームでクォータニオンを使用していますが、2つの方向のクォータニオンがある場合、最初のクォータニオンq1から2番目のクォータニオンq2に移動するために必要な回転クォータニオンをどのように取得できるのでしょうか。私は独学で学んでいるので、語彙に明らかな解決策が欠けている可能性があります。

方程式では、最初のものから別のものに回転するときに私がしていることは次のとおりです。q2 = r * q1

ただし、rは不明です。代数の規則はここでも重要ですか?その場合、クォータニオンを別のクォータニオンで分割することになります。これは、インターネット上で適切な説明を見つけることができません。

ゲームメーカーというプログラムを使っています

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

matlab - C++の「engine.h」を使用してMatlabでクォータニオンをプロットする

カルマンフィルターを使用するC++のアルゴリズムがあります。コードのどこかで、クォータニオンq'を予測してから、カルマンフィルターqでクォータニオンを更新します。

予測されたクォータニオンと修正された(更新された)クォータニオンの進化を伴う2つのグラフィックをMatlabにプロットしたいので、処理中にクォータニオン情報をMatlabに送信するために「engine.h」ライブラリを使用しています(実際に送信するのは4x1マトリックスです) 。

だから私の質問は:私が視覚的に情報を抽出できるようにMatlabでクォータニオンをプロットするための最良の方法は何ですか?角度を別々にプロットする方が良いでしょうか?

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

quaternions - クォータニオン微分を行うためのより良い方法を探しています

クォータニオン(4x1)と角速度ベクトル(3x1)があり、このWebで説明されているように、微分クォータニオンを計算する関数を呼び出します。コードは次のようになります。

これで、差分クォータニオンがqに格納され、この差分クォータニオンを追加するだけでクォータニオンが更新されます。

この方法は、剛体の動きを予測するのに適していますか、それとも角速度でクォータニオンを予測するためのより良い方法がありますか?これは機能しますが、期待した結果が得られません。

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

qt - QQuaternionとQSliderによる回転

QQuaternionとQPushButtonを使用してObjectrotationを実装しました。plus_x_buttonが押されている限り、スロットrotate_plus_x()がアクティブになります。それぞれminus_xの場合。

ここで、QPushButtonの代わりにQsliderを使用して機能を実現したいと思います。-180°から180°の範囲ですが、Qsliderの値が変更され、QQuaternionが変更できない角度を拡張するため、奇妙な結果が得られるという問題があります。あなたはそれを達成する方法を考えていますか?if文で試してみました。何かのようなもの:

残念ながら、機能していません。あなたはそれを達成するためのアイデアを持っていますか?

ありがとうございました

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

matlab - Matlab でクォータニオンからオイラー角を取得する

四元数の X、Y、Z、および W コンポーネントを 4 つの分離したベクトルで経時的に持っています。

3 つのオイラー コンポーネントを 3 つの異なるサブプロットに経時的にプロットするために、オイラー角に変換したいので、これらのような 3 つのベクトルが必要です。

これを取得するための matlab の直接的な方法はありますか (4 つのベクトルを入力し、上記の 3 つのベクトルを出力する関数を意味します)、またはタイムステップごとに変換を行うコードを記述する必要がありますか? 前もって感謝します。

0 投票する
9 に答える
44865 参照

matrix - クォータニオンが回転に使用されるのはなぜですか?

私は物理学者であり、いくつかのプログラミングを学んでおり、行列/ベクトル形式で物事を書く代わりに、回転にクォータニオンを使用している多くの人々に出くわしました。

物理学では、クォータニオンを使用しない非常に良い理由があります(ハミルトン/ギブスなどについて時々語られる奇妙な話にもかかわらず)。物理学では、説明に優れた分析動作が必要です(これは正確に定義された意味を持ちますが、通常のイントロクラスで教えられるものをはるかに超える技術的な方法であるため、詳細には触れません)。クォータニオンにはこのような優れた動作がないことが判明したため、それらは有用ではなく、ベクトル/行列は有用であるため、これらを使用します。

ただし、解析構造を使用しない厳密な回転と記述に限定して、3D回転はどちらの方法(または他のいくつかの方法)でも同等に記述できます。

一般に、X 2 = X ' 2という制約に従って、点X =(x、y、z)を新しい点X'=(x'、y'、z')にマッピングする必要があります。そして、これを行うことはたくさんあります。

素朴な方法は、これが定義する三角形を描画して三角法を使用するか、点(x、y、z)とベクトル(x、y、z)の間の同型写像と関数f(X)=X'を使用することです。行列MX=X'、またはクォータニオンを使用する、または他の方法(x、y、z)T。(a、b、c)(x'、y'、 z')など。

数学の観点から、これらの説明はすべてこの設定で同等です(定理として)。それらはすべて、同じ数の自由度、同じ数の制約などを持っています。

では、なぜクォータニオンがベクトルよりも優先されるように見えるのでしょうか。

私が見る通常の理由は、ジンバルロックや数値の問題ではありません。

これはオイラー角の問題にすぎないため、ジンバルロックなしの議論は奇妙に思えます。これは座標の問題でもあり(極座標のr = 0での特異点(ジャコビアンはランクを失う)のように)、これは局所的な問題であり、座標を切り替えて縮退から回転することで解決できます。または2つの重なり合う座標系を使用します。

これらの両方(および代替案)がどのように実装されるかについては詳細にわからないため、数値の問題についてはよくわかりません。クォータニオンの再正規化は、回転行列の場合よりも簡単であることを読みましたが、これは一般的な行列の場合にのみ当てはまります。回転には、これを簡単にする追加の制約があります(これは、クォータニオンの定義に組み込まれています)(実際、自由度が同じであるため、これは真である必要があります)。

では、ベクトルや他の代替手段よりもクォータニオンを使用する理由は何ですか?

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

javascript - クォータニオンにスカラー乗算を適用する方法

そのため、いくつかの c++ を javascript に変換していますが、D3DX が四元数演算子をどのように定義しているかを知る必要があります。

スカラー演算 quat * 0.5f はこのままですか?

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

javascript - Three.js Object3d cylinder rotation to align to a vector

I have searched far and wide, but can't seem to figure this pretty basic thing out. I have seen other examples on stackoverflow and elsewhere from a year or two ago, but they fail to work with the latest version of Three.js.

Here is a version of what i'm working on: http://medschoolgunners.com/sandbox/3d/.

I'm trying to get the grey cone to exactly align with the unlabeled red vector. Ie. I want the tip of the cone to be exactly aligned with the vector and point out from the origin in that direction.

Here is the code I have right now:

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

c++ - この計算でカメラが点を中心に回転するのはなぜですか?

向きを変えようとすると、カメラがポイントを中心に回転します。たとえば、カメラをY軸で30度回転させると、カメラを右に30度見るのではなく、カメラが見ていた点を中心に回転します。

さて、私の理解では、カメラを動かすには、その量の逆数で世界を動かさなければなりません。したがって、Z軸で+1を移動したい場合は、Z軸でワールド-1を移動します。四元数を使用して方向を表すため、カメラの四元数の逆数を使用して(方向は常に単位四元数であるため、逆数を計算する代わりに共役を使用して最適化します)、世界を適切な量だけ回転させます。

クォータニオンを行列に変換する方法は次のとおりです。ここで、qは逆クォータニオンです。

その後、マトリックスの変換コンポーネントを設定します。

そして最後に、それをモデルビューマトリックススタックに乗算してから、すべてのオブジェクトをレンダリングします。この計算は正しいと確信していますが、期待した結果は得られません。明らかに順ベクトルと右ベクトルが問題なので、私の唯一の質問は、なぜそれらが間違っているのか、そして私が期待する結果を得たい場合、それらをどのように設定する必要があるのか​​ということです。ありがとう。

編集:私はこの男のクォータニオンカメラクラスから解決策を見つけました。最初に、以前と同じように回転行列を作成しますが、次に、行列の列ベクトルを1番目、2番目、3番目の列(それぞれxa、ya、za)から取得します。次に、マトリックスの並進コンポーネントを次のように設定します。

次に、結果のマトリックスをmodelviewマトリックススタックに乗算でき、完全に機能します。