問題タブ [rotational-matrices]
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.
rotation - Unity のビッグ ローテーション / オリエンテーション クエスト
私はユニティ エクスポーター/インポーター (学校プロジェクト) へのカスタム ブレンダーに取り組んでいますが、より大きな問題があります: ローテーションです。
ブレンダーからオイラー回転および/またはクォータニオンを取得できますが、それらを Unity のオブジェクトの 1 つに適用したい場合、回転が完全に台無しになります。
Y座標とZ座標を交換しようとしましたが、うまくいかないようです。
試してみましたが、ユニティで回転行列を適用することはできません...しかし、何とかそれを理解できれば、それが解決策になるでしょうか?
できるだけ早く普遍的な解決策を見つける必要があります。ありがとう。
... 詳細については、以下のコメントをお読みください。
c++ - 回転行列 - 回転するボックスの周りでボールを回転させます
私は 3D ボックスを持っています: center point = (a,b,c)
, width = w
, height = h
, depth = d
.
中心点は原点ではありません。
私は箱の上にボールを持っています(お互いに触れます)、center
それとradius
.
私は箱を回転させることができます(X軸の周りですが、その中心は同じままです..)そして、ボールが箱にくっついたままになりたいです。そのため、ボールをボックスで回転させる必要があります。
回転角度は 45 度です。
私はこれをやろうとしました:
X 軸を中心に回転行列を定義しました。
ボールの中心ベクトルを掛けます。
だから私は得た:
ボックスを回転させたときにボールが実際に回転しますが、遠すぎます。どうすれば修正できますか?
opencv - cvRodrigues2()を使用してopencvで回転行列と平行移動行列を見つける
カメラを通して見た平面オブジェクトの実際の座標を見つけようとしています。チェス盤を使用してカメラのキャリブレーションを行っています。私はチェス盤の約10個のスナップショットを撮っています(各スナップショットは他のスナップショットとは異なります)。私は opencv で cvCalibrateCamera2(....) 関数を使用しています。ここで得られる出力の 1 つは、Nx3 マトリックスである rotation_vectors です。ドキュメントを見たところ、詳細については cvRodrigues2() 関数を参照してください。そして、 cvRodrigues2() 関数が 1x3 回転ベクトルを 3x3 回転行列に変換することを理解しました。私の質問は、回転行列を計算するために、 N のうちのどの 1x3 回転ベクトルを cvRodrigues2() 関数に入力する必要があるかということです??
10 個のスナップショットはそれぞれ異なる回転ベクトルを持つと思います。世界座標を取得するという本来の目的に使用できる回転行列を計算するには、どの回転ベクトルを使用すればよいでしょうか??
d3.js - D3地理投影で2つの回転を構成しますか?
私が見つけたすべての素晴らしい例に基づいて、インタラクティブな地球を構築するために D3 地理正投影を楽しんでいます。
私のシンプルなモックアップはhttp://bl.ocks.org/patricksurry/5721459で見ることができます
ユーザーが地球儀をトラックボールのように操作できるようにしたい ( http://www.opengl.org/wiki/Trackball )。Mike の例の 1 つ ( http://mbostock.github.io/d3/talk/20111018/azimuthal.html ) から始めて、キャンバス座標を使用し、マウスの位置を「トラックボール座標」で表現するように少し改善しました (つまり、回転これにより、Mike の 1 対 1 の対応ではなく、固定されたマウスの動きが地球の端近くでより多くの回転を与えます (上記で説明した双曲線拡張を使用すると、地球の外側で機能します)。
地球が回転していない位置 (北極が垂直) から始まる場合はうまく機能しますが、地球が既に回転している場合 (北極がページの外を向くように例を操作します)、トラックボール コントロールは非直感的になります。単にトラックボール座標の変化を d3.geo.rotate lat/lon 座標のデルタとして表現するだけではありません。D3 の 3 軸回転には、経度回転 (北極を中心に回転)、緯度回転 (キャンバス平面の水平軸を中心に回転)、「ヨー」回転 (平面に垂直な軸を中心に回転) の適用が含まれます。 - http://bl.ocks.org/mbostock/4282586を参照してください。
私が必要としているのは、2 つの回転行列 (現在投影されているものと、トラックボールをわずかに回転させるための新しい行列) を構成する方法だと思いますが、掘る以外に D3 でそれを行う方法がわかりません。ソース ( https://github.com/mbostock/d3/blob/master/src/geo/rotation.js ) に入力し、回転行列を定義するために計算を試みます。コードは洗練されているように見えますが、コメントはありません。正射投影インスタンスでクロージャを正しく解読できるかどうかはわかりません。
最後の点で、誰かが d3.geo.projection の回転行列形式を知っていれば、おそらく私の問題も解決します。
何か案は?
javascript - ノード階層内のノードをカメラ (ビルボード) に向ける
ノード階層内のノードをカメラに向ける、つまりビルボードにする必要があります。すべてのノードについて、そのワールド マトリックスとワールドの回転をクォータニオンとして保存します。私がクォータニオンについて知っていることにより、私が望む操作は、カメラのクォータニオンとノードの回転クォータニオンの差を取得し、その差によってノードを単純に回転させることです。
私のカメラはオイラー角として保存されているので、最初に X 軸の回転を作成し、次に Z 軸の回転 (Y 軸の回転はありません) を作成し、それらを乗算してカメラのクォータニオンを作成します。
そこから、差を取得し、最終的にそこから回転マトリックスを作成し、それをノードのワールド マトリックスに乗算するための計算を行うだけです。
ただし、これにより、ノードが狂ったように回転し、カメラに面しなくなります。
関連する JavaScript コードは次のとおりです。
私が犯している明らかな間違いはありますか?
rotation - クォータニオンとオイラー角を表すこれら 2 つの回転行列が同じでないのはなぜですか?
以下は、単位四元数 {q0,q1,q2,q3} を中心に角度 alpha だけ回転する表現です。
ここで、beta_x、beta_y、および beta_z は単位四元数の方向余弦、つまり回転軸です。
これに対応する回転行列は次のとおりです。これをR1と呼びましょう。
ここで、代わりにオイラー角を使用して回転行列を表すとします。これをR2と呼びましょう。
R2 は、最初に x 軸を中心に phi だけベクトルを回転させ、次に y 軸を中心に theta だけ、最後に z 軸を中心に psi だけ回転させます。ここで、回転軸が yz 平面にあるとします。これは、x 軸を中心とした回転はなく、y 軸と z 軸を中心とした回転の組み合わせのみであることを意味します。これは phi がゼロであることを意味し、これはR2(3,2) がゼロであることを意味します。
または、x 軸を中心とした回転がないため、cos(beta_x) がゼロであることも意味します。これは、q_1 がゼロであることを意味します。ただし、R1(3,2) を見ると、R2(3,2) とは異なり、ゼロではありません。これら 2 つの表現が同じでないのはなぜですか? 私は何が欠けていますか?
android - TYPE_ROTATION_VECTOR、TYPE_ORIENTATION は、偏差を伴う異なる結果をもたらします
Rotation Vector と Orientation Vector の両方のリスナーを実装しましたが、減価償却されていることはわかっていますが、両方をテストしたかったのです。
Rotation Vector がフュージョン センサーであり、推奨されることは知っていますが、それによると、北 ( getOrientation(rotationMatrix,value) によって返される value[0] は、ベアリング 0 を生成します) は、方向センサーからの北と一致しません。また、プレイストアのさまざまなアプリから集計しましたが、方向センサーの値はそれらに近いようです。
さらに、Rotation_Vector からの方位角の値 [0] を何度も取得すると、getOrientation が急上昇し、-180 から 180 の間で振動し続けます。
PS "getRotationMatrix(float[] R, float[] I, float[]gravity, float[] geomagnetic)" も Rotation Vector と同じ結果になります。
電話の Y 軸と北を指すベクトルの間の角度を決定したいので、それが私の最初の実装でした。提案してください。
matlab - matlab コードの最適化 - 大きな cell 配列内のすべての 3x3 行列を相互に乗算する
概要
mldivide を使用して、3x3 行列と逆 3x3 行列の間で行列乗算を繰り返し実行して、コードの時間効率を向上させようとしています。
バックグラウンド
歩行分析で被験者の下肢に取り付けられたセンサー間
の手と目のキャリブレーションに方向データを使用する前に、ベクトル量子化方法を実装しようとしています...私が従っているアルゴリズムは論文からのものです。必要..."Data Selection for Hand-eye Calibration: A Vector Quantization Approach"
最適化するコード
考えられるすべての「相対移動」(A または B) を解決するより高速な方法を見つけたいと思っていましたが、これには時間がかかりすぎます (C と D は約 2000 要素の長さであるため、A または B のサイズは になります =2000*(2000-1)/2=1999000
)。
これが質問するのに適切な場所であることを願っています.適用できる以前の解決策を見つけることができませんでした. また、私には実際の経験がないため、大きな行列を扱う場合に計算時間が避けられないかどうかはわかりません。
-------------------------------------------------- ----------------------------------------------
*編集*
行列のプロパティ: 以下にコメントされているように、回転型です。それらは特殊直交群 SO(3) [transpose=inverse] にあります。http://en.wikipedia.org/wiki/Rotation_matrix#Properties_of_a_rotation_matrixを参照してください。
テスト方法: ランダムな回転行列 R を作成するには、次のコードを使用します。
SpinConv : 3x3 方向余弦行列から軸角度表現に変換するために使用しています。それはより複雑で、安定性のために必要以上に変換します (最初にクォータニオンに)。リンクは次のとおりです: http://www.mathworks.com/matlabcentral/fileexchange/41562-spinconv/content/SpinConv.m 行う必要があるのは次のとおりです (SpinConv ではなく、メソッドをすばやく実装しただけです)。
*編集#2 * 代わりに、クォータニオンを使用して3x3マトリックスの使用を避けることができることに気づきました:
したがって、クォータニオンは 1x4 ベクトルです。元のコードは次のように変更できます (else ステートメント内):
ここで、qconj、qmult、およびqnormは四元数演算です。
わかりました、申し訳ありません-それが私が持っているすべての情報と可能性です。
android - 解析されたオブジェクトを回転させるために min3d でセンサー回転行列を使用する方法
min3d で .obj ファイルから解析されたオブジェクトを回転させたい。センサーから取得した回転行列を使用する必要があります。私は純粋な OpenGL でこれを行う方法を知っていますが、何を使用するか (おそらく min3d.core.Renderer?) と min3d での方法を理解できません。
私は min3d が好きで、.obj ファイルを非常にうまく解析するので、それを放棄して純粋な openGL を使用したくありません。rotate() メソッドを使用できることはわかっていますが、オイラー角を使用しており、回転行列を使用する必要があります。コードは次のとおりです。