問題タブ [euler-angles]

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 投票する
2 に答える
1757 参照

c++ - 2D 画像でのオイラー角回転モデルの描画

現在、2D イメージ内にオイラー角の 3D 表現を描画しようとしています (OpenGL または 3D グラフィック ウィンドウはありません)。画像出力は以下のようになります。

オイラー角

基本的に、回転行列または一連のオイラー角を取り、それらを上記のように 2D 画像に出力できる研究またはアルゴリズムを探しています。これは、OpenCV を使用する C++ アプリケーションに実装されます。オブジェクトの状態に基づいて、OpenCV ウィンドウにアノテーション情報を出力するために使用されます。

回転行列から単位ベクトルを分解し、それらの x、y コンポーネントを抽出して (0,0) からデカルト空間に線を引くことができるはずなので、これは考えすぎだと思います。私はこの考えで正しいですか?

編集:正投影を探しています。上の画像は正しいカメラ/視野角を持っていると想定できます。

どんな助けでも大歓迎です。

ありがとう、

編集: ソース コードの例は、私のレポで見つけることができます。ヘッダー: https://bitbucket.org/jluzwick/tennisspindetector/src/6261524425e8d80772a58fdda76921edb53b4d18/include/projection_matrix.h?at=master

クラス定義: https://bitbucket.org/jluzwick/tennisspindetector/src/6261524425e8d80772a58fdda76921edb53b4d18/src/projection_matrix.cpp?at=master

これは最良のコードではありませんが、機能し、受け入れられた回答で説明されている射影行列を取得するために必要な手順を示しています。

また、実際の射影行列の youtube vid もここにあります (スケールと変換が追加されています): http://www.youtube.com/watch?v=mSgTFBFb_68

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

rotation - オイラー角から「ツイスト」角度を見つける方法

編集:私がやろうとしていることをさらに明確にする必要があると思います:

ツイストを制御するワイヤ デフォーマを使用して、Maya で前腕のリグをセットアップしました。ワイヤ デフォーマは skinCluster の上にあります。手首のジョイントには、「ツイスト」と呼ばれる追加の角度アトリビュートがあり、手首と同じ位置にあるが肘のジョイントの方向を維持する親ジョイントにリンクされています。ツイスト アトリビュートは、ワイヤの dropoffLocatorTwist[1] アトリビュートにも接続されています。ドロップオフが 100 の場合、ワイヤは前腕を無限にひねりますが、関節は依然として手首と手の「ポーズ」を表しています。skinCluster からのオーバーローテーションを補正するために、重複した手首と手の階層を追加し、ツイストをその回転 x に接続しました。

今、私はそれをさらに推し進めたいと思っています。アニメータの負担を軽減するために、余分なツイスト アトリビュートを削除し、ジョイント自体の 3 つのオイラー回転値すべてを補間して、ツイスト値を生成します。アニメーターがチャンネル ボックスに直接値を設定するか、手首を相対的に回転させるだけで値を設定すると仮定すると、これらの値は簡単に 1000pi (度単位) を超える可能性があります。ポリゴン メッシュが十分に密集している場合、ワイヤ デフォーマはアーティファクトなしでその大きさまでカーブに沿ってツイストを簡単に実行できます。問題は、オイラー回転を補間して、ポーズとねじれの両方を正確に表す単一の角度値を取得する方法です。各オイラー値に、行列内の行ベクトルに付随するオイラー回転の接線の内積を掛けて、曲線の接線と手首の行列を補間しようとしました。

twist=rx*(マトリックスの接点行 1)+ry*(マトリックスの接点行 2)+rz*(マトリックスの接点行 3)

特に、Y 軸周りの回転が苦手です。その理由と、ツイストを -pi <-> pi に制限することなく、オイラー回転をツイスト角度に適切に分解する方法を教えてもらえますか?

以前の質問:

Maya ワイヤ (カーブ) デフォーマを使用しており、ジョイントのオイラー回転に基づいて、ワイヤの接線に沿ってツイスト値を見つけたいと考えています。Maya のジョイントは実際にはトランスフォーム マトリックスですが、ユーザーがオイラー回転コンポーネントの度数として可能な最大 float 値を入力できるように構成されています。これらのオイラー値 (xyz) を取得し、それらを組み合わせて、軸が親行列の最初の行 (またはワイヤの接線) である軸角度回転と、角度は、その軸の周りのバインドされていないツイスト値であり、メッシュの無制限のフリップレスツイストを可能にします。問題は、x、y、および z の値を補間して、結果の角度がねじれのみを表すようにする方法が見つからないことです。もっと簡単に言えば、「x」を見つけたい x 軸が回転したオイラー回転の回転値で、'y'、'z'、または 3 つのコンポーネントすべての間の何かで表されます。x の値をより少ないが同等の値 (ex 270 == 90、しかし 270 が必要) に失うことなくこれを行う方法はありますか?

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

3d - 2 つの差を使用して他の 2 つのオイラー角を回転させる

スプラインを使って動くカメラを作ろうとしています。カメラの位置はうまく機能しますが、移動中にカメラの目をターン自体に合わせたいです。

たとえば、カメラは x0 y0 z0 から x1 y1 z1 に移動します。これで、私の目のベクトルは通常 (x1-x0、y1-y0、z1-z0) になりました。他の 2 つのベクトル (横方向と上方向のベクトル) を回転させて、目のベクトルに一致させ、それらの間の 90 度の角度を破壊しないようにするにはどうすればよいですか?

ヨー/ピッチ形式の方が簡単であれば、それも問題ありません。2 つの間で変換できます。または、私が達成したいことに対する別のアプローチですか?

たとえば、スプラインの法線 (3 ポイントのバイザー曲線) を計算することでそれを実行できると思います。各ステップでは、その法線を中心にカメラがどれだけ回転するかを計算できます。しかし、もしあれば、より簡単でより一般的な方法を好むでしょう。

ここで私が何をしているかを見ることができます。(惑星をクリック) この例では、古い眼球ベクトルと新しい眼球ベクトルをピッチ/ヨーに変換し、違いを見つけて、これを使用して他のベクトルを回転させますが、場合によっては他のベクトルがまったく変化しない可能性があるため、これは明らかに間違っています (目は一方に対して垂直に回転しています)

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

javascript - Three.js カメラの回転順序

一人称シューティング スタイルのコントロールを使用して、ゲームパッドを使用して Three.js でカメラを回転させようとしています。

ブラウザはゲームパッドを検出して入力を認識しますが、カメラの回転順序が間違っています。カメラのローカル Y 軸を中心に回転すると、ローカル X 回転も考慮されますが、これは望ましくありません。

私はこの男と同じ問題を抱えているようですが、彼の問題は Three.js r54 を使用して解決され、私は r60 を使用しています。彼はそれを機能させるように設定camera.eulerOrder = "YXZ";しましたが、現在の同等物camera.rotation.order = "YXZ";は私には機能しないようです.

Three.js の組み込みの「FirstPersonControls」クラスは知っていますが、コントローラーの入力を受け入れず、後で他の非移動コントロールを押し込むのが面倒になるため、私には適していません。私は gamepad.js も知っていますが、それを使用することに興味はありません。

誰でも助けることができますか?

私のローテーションコード:

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

opengl - ヨー、ピッチ、ロールをワールド座標の x、y、z ベクトルに変換します

OpenGL (java LWGJL) でいくつかの単純な 3D グラフィックスに取り組んでおり、ヨー、ピッチ、ロールを移動ベクトルの x、y、z コンポーネントに変換する方法を見つけようとしています。ピッチとヨーだけでこれを行う方法は知っていますが (ここで説明されているように)、この式にロールを統合する方法を説明するものは何も見つかりませんでした。

3D 空間でベクトルを定義するために必要なのはヨーとピッチだけであることは承知していますが、この例ではロールも必要です。A基本的な WASD 構成 (ローカル左、Wローカル前方、ローカル上) でカメラに対するさまざまな動きにバインドされたキーがあるSPACEため、ロールはカメラの動きに影響します (たとえばD、pi/2 のロールで押す (デフォルト)はカメラを右に移動します(ワールド座標で)がD、円周率で押すとカメラがワールド座標で上に移動します)。

これまでのコードは次のとおりです。

これはいくつかの回転では機能しますが、多くの場合、正しくない結果になります。

質問は次のとおりです。

ヨー、ピッチ、およびロールを考慮して、目的の方向 (押されたキー) に基づいてモーション ベクトルの x、y、および z コンポーネントを正常に計算するようにコードを変更するにはどうすればよいですか?

生の三角関数 (私がやろうとしているように)、行列を含むソリューション、またはほとんど何でも使用しても問題ありません。

編集:

オイラー角に関するウィキペディアの記事にリンクするだけで回答しないでください。私はそれを読みましたが、それを自分の状況に適用する方法を理解するのに十分な数学のバックグラウンドがありません.

編集#2:

カメラの向きを変えるまでの間、向きを保存するためにオイラー角のみを使用しています。実際のカメラ操作には、回転行列を使用します。必要に応じて、オイラー角を削除して、行列のみを使用できます。重要なのは、向きをベクトルに変換できることだけです。

編集#3:

コメントで説明されているように、前方ベクトルに回転行列を掛けて解決策を見つけました。

ただし、これにはまだ問題があります。

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

rotation - 3 つのオイラー角を 1 つの値に変換する

x、y、zオイラー角を1つの値に変換/結合する方法を誰かが知っているかどうか尋ねたいですか? これには何か機能がありますか?検索しましたが、行列または四元数への変換が見つかりましたが、これらは複数の値 (つまり、回転とベクトル) を出力します。私は正しいですか?

ジェスチャ認識の統計分析のために SPSS にデータを入力しようとしています。各ジョイントに 3 列 (x、y、z 回転) を挿入しますが、各ジョイントに 1 つの列が必要なため、分析のために 1 つの値が必要です。それらを正しく分類します..何か提案はありますか?

どうもありがとうございました!よろしく

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

matlab - Roll-Pitch-Yaw 角度を使用した画像の変換 (画像修正)

モバイルカメラプラットフォームから撮影した画像を修正する必要があるアプリケーションに取り組んでいます。プラットフォームはロール、ピッチ、ヨーの角度を測定します。この情報から何らかの変換を行うことで、画像が真上から撮影されたように見せたいと考えています。

言い換えれば、カメラの向きを変えて遠くから撮影した、地面に平らに置かれた完全な正方形を変換して、後で正方形が完全に対称になるようにしたいのです。

OpenCV(C++) と Matlab を使用してこれを実行しようとしましたが、これがどのように行われるかについて基本的なことが欠けているようです。

Matlab では、次のことを試しました。

ここで、R_z/y/x は標準の回転行列 (度で実装) です。

一部のヨー回転では、すべて正常に機能します。

結果は次のとおりです。

Z 画像軸を中心に 10 度回転した画像

X 軸または Y 軸を中心に同じ量だけ画像を回転させようとすると、次のような結果が得られます。

X 画像軸を中心に 10 度回転した画像

ただし、10 度回転させて、ある巨大な数で割ると、問題なく見え始めます。しかし、繰り返しになりますが、これはまったく研究価値のない結果です。

X 画像軸を中心に 10/1000 度回転した画像

X 軸または Y 軸を中心に回転すると、変換がワイルドになる理由を誰かが理解するのを手伝ってくれませんか? 乱数やその他の手品で割らずにこれを解決する方法はありますか? これは、ある種のオイラー パラメータを使用して解決できる可能性がありますか? どんな助けでも大歓迎です!

更新: 完全なセットアップと測定

完全を期すために、完全なテスト コードと初期イメージ、およびプラットフォームのオイラー角が追加されています。

コード:

初期画像:

ここに画像の説明を入力

BODY 座標フレームでのカメラ プラットフォームの測定値:

私が理解していることから、ヨー角は変換に直接関係していません。しかし、私はこれについて間違っているかもしれません。

追加情報:

セットアップが使用される環境には、参照として確実に使用できる線 (海の写真) が含まれていないことを指定したいと思います (通常、水平線は写真に写りません)。また、最初の画像の正方形は、変換が正しいかどうかを確認するための手段として使用されるだけであり、実際のシナリオにはありません。

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

ios - iPhone 拡張現実のオイラー角の回転 – ロールの問題

私は iOS 拡張現実アプリケーションに取り組んでいます。マーカーベースではなく、ロケーションベースです。

GPS、コンパス、加速度計を使用して、緯度、経度、高度、およびヨー、ピッチ、ロールの 3 つのオイラー角を取得します。NSLog() を使用して、これらの 6 つの変数に有効なデータが含まれていることを知っています。

私のアプリケーションは、カメラ ビュー上にいくつかの 3D オブジェクトを表示します。ロール角以外のすべてを使用する限り、問題なく動作します。

その 3 番目の角度を追加すると、opengl ワールドに適用される回転がうまくいきません。メインの OpenGL draw メソッドでそのようにします

このアプローチには何か問題があると思いますが、私は確かに専門家ではありません。たぶん、3 つの異なる回転行列ではなく、ある種の独自の回転行列を作成する必要がありますか?

そう簡単には出来ないのではないでしょうか?結局のところ、ほとんどのデスクトップ ビデオ ゲーム、FPS などでは、ユーザーがマウスを使用してヨーとピッチを変更できるようにするだけなので、角度は 3 ではなく 2 つだけです。現実はあらゆる角度で動くことができます。

しかし、繰り返しになりますが、私がオンラインで見たすべての AR チュートリアルは、「ロール」を適切に処理できませんでした。携帯電話を「ローリング」すると、ロール補正戦略を使用して、AR を完全に台無しにするか、まったく何もしません。

私の質問は、電話センサーを使用して3つのオイラー角があると仮定すると、それらを3d openglビューにどのように適用すればよいですか?