2

これがこの質問をするのに適切な場所であることを願っていますthis one と同じですが、グラフィックではなく純粋な数学として表現されています(少なくとも、問題を正しく数学に翻訳したことを願っています)。

考慮事項:

  • 直交する 2 つのベクトル: Up (ux、uy、uz) と Look (lx、ly、lz)
  • Look に垂直な平面 P (したがって Up を含む)
  • Y1 は、ルックに沿った Y (垂直軸) の P への投影です。

質問: Y1 と Up の間の角度の値は?

数学者が同意するように、これは非常に基本的な質問ですが、Y を P に射影する方法を視覚化することができずに、少なくとも 2 週間頭を悩ませてきました。

行列を使用したソリューションではなく、三角関数のソリューションを探しています。ありがとう。

編集:ルックでなければならない回転軸に対して、角度の符号を決定する必要があることがわかりました。リンクされた質問に最終的なコードを投稿しました(上記のリンクを参照)。助けてくれた人に感謝します。お時間をいただきありがとうございます。

4

5 に答える 5

2

私はこれを紙の上でやっているだけです。それが正しいことを願っています。

Up と Look が正規化されている、つまり長さが 1 であると仮定しましょう。平面 P に原点が含まれ、L がその法線であるとします。Y は (0, 1, 0)

Y を P に射影するには、その P までの距離を見つけます...

d = Y dot L = ly

...次に法線を -d でスケーリングして Y1 (つまり、Y の P への投影) を取得します。

Y1 = (lx * ly, ly * ly, lz * ly)

ここで、Y1 を正規化します。つまり、(1 / 長さ) でスケーリングします。その長さが 0 の場合、運が悪いです。

Y1 と Up の内積 = 角度のコサイン。そう

angle = acos(Y1 dot Up)
于 2010-06-17T20:48:00.083 に答える
1
  • 直交する 2 つのベクトル: Up (ux、uy、uz) と Look (lx、ly、lz)
  • Look に垂直な平面 P (したがって Up を含む)
  • Y1 は、ルックに沿った Y (垂直軸) の P への投影です。

Up と Look は単位ベクトルであると仮定します。Y=(0,1,0)とする。
Y1を探しましょう。

Y1 = Y - (Y*ルック) * ルック Y1 = Y - ly * ルック Y1 = ( -ly lx, 1 - ly ly, -ly*lz )

Look が (0,1,0) または (0,-1,0) の場合、Y1 は (0,0,0) になることに注意してください。

Detmar が言ったように、Y1 を正規化し、Y1*Up の arccos を見つけることによって、Y1 と Up の間の角度を見つけます (* は内積です)。

于 2010-06-17T21:38:10.573 に答える
0

3D 空間のベクトルについて知っておく必要があります。それら、特にドット積とクロス積の基本的な理解があなたを整理すると思います。初等ベクトルの教科書を探します。

直交する 2 つのベクトル: Up (ux、uy、uz) と Look (lx、ly、lz)

直交ベクトルの内積はゼロです。

Look に垂直な平面 P (したがって Up を含む)

Look into Up の外積を取ると、Up とともに Look に垂直な平面を定義する 3 番目のベクトルが得られます。

Y1 は、ルックに沿った Y (垂直軸) の P への投影です。

ここで何を得ているのかわかりませんが、Look を使用した任意のベクトルの内積は、Look 方向の成分の大きさを示します。

于 2010-06-17T19:49:47.613 に答える
0

これは、ベクトル演算を使用した比較的単純な問題です。ベクトル射影の方程式を使用してY1 を取得し、内積の三角方程式を使用してY1 と上の間の角度を取得します。

この方程式は、ほぼすべての言語で簡単に実装できますが、この種の質問をしている場合は、より負荷の高いベクトル計算を行うつもりかもしれません。その場合、3 つ目の方法を見つけることをお勧めします-パーティー ライブラリ。

于 2010-06-17T20:00:50.337 に答える
0

Y = (0,1,0) の場合

Y1 = (-ly lx, 1 - ly ly, -ly*lz)

|Y1| = sqrt(Y1x^2 + Y1y^2 + Y1z^2)

|上へ| = sqrt(Upx^2 + Upy^2 + Upz^2)

バンク角 = (Y1x Upx + Y1y Upy + Y1z Upz)/(|Y1| |Up|)

于 2010-06-17T22:02:24.987 に答える