0

現在、次の計算を使用して、想定される斜辺 150 と既知のヨー ピッチとロールで x、y、z 座標を取得しています。

float zPos = (float)Math.tan(Math.toRadians(rmPitch-90))*150;
float xPos = (float)Math.cos(Math.toRadians(90-rmYaw))*150;
float yPos = (float)Math.cos(Math.toRadians(rmYaw))*150;

視聴者が 0,0,0 の位置に立って P を見上げていると仮定します。Q は 150 単位離れており、ビューのヨーとピッチを知っています)。

私の数学は、ピッチがまっすぐ上下に近づくまでうまくいくようです。その時点で、x と y は何らかの方法で z を考慮する必要があることに気付きます..助けてください

視聴者が 0,0 に立っているとします。

4

4 に答える 4

1

これを考える最も簡単な方法は、P と z 軸を含む平面に埋め込まれた単位円について考えることです。ここで、ベクトル Q は三角形の一方の辺であり、PQ はもう一方の辺です。だから、あなたの頭の中でその絵で武装してください:

cos(pitch)まず、 z はではなくであるべきtan(pitch)です。次に、ピッチの x、y を修正するには、それらを 倍しますsin(pitch)

これは、ファイ/ピッチが z 軸とベクトルの間の角度になるように意図したと仮定していることに注意してください (xy 平面とベクトルの間のより標準的な角度ではありません)。

于 2013-05-19T20:53:32.157 に答える
1

ピッチがプラス/マイナス 90 度の場合、オイラー角 (つまり、座標系のアジマス、ピッチ、ロール システム) に問題があります。それはあなたが言及しているようで、Grimbal Lockとして知られています。最近、math.stackexchange.com でこれに関する質問をしてから回答したので、おそらくこのリンクが役立つでしょう。

于 2013-05-19T22:49:59.597 に答える
0

dsharlet、tan(pitch-90) を使用すると、期待どおりに機能しているように見えました... cos に切り替えると、(ピッチ + 180) にする必要がありますが、アドバイスに従って、次のコードが機能するようです..反転している必要がありますと軸または何か奇妙な.. tan(pitch-90) と cos(pitch+180) の違いについて少し話してもらえますか

float zPos = (float)Math.cos(Math.toRadians(rmPitch+180))*radius;
float xPos = (float)Math.cos(Math.toRadians(90-rmYaw))*(float)Math.sin(Math.toRadians(rmPitch))*radius;
float yPos = (float)Math.cos(Math.toRadians(rmYaw))*(float)Math.sin(Math.toRadians(rmPitch))*radius;
于 2013-05-21T15:21:32.030 に答える
0

phi は P と z 軸の間の角度なので、z 座標は になりますrho*cos(phi)。同様に x はrho*sin(phi)cos(theta)、y はrho*sin(phi)sin(theta)

于 2013-05-20T04:01:57.163 に答える