2

インターネットで300ページ以上読んだのですが、思い通りの結果が得られなかったか、うまくいかなかったので、ここで助けてもらいたいと思います。擬似コードと数学を使って説明することができます。:)

つまり、点A(原点)があります。ポイントAには、半径、XYZ位置、およびXYZ回転があります(2つの角度で実行できることはわかっていますが、実際には3つの角度で実行する必要があります)。ポイントBの位置は不明です。

その情報を武器に、私の質問は次のとおりです。ポイントBの位置をどのように見つけるのでしょうか。(あるいは、私の質問は、「球上の3Dポイントを見つける方法は?」と言い換えることができます。)

私はすでに2Dでそれを行っており、そこでは機能しました。私が使用した2Dの場合:

x=pointA.x+radius*cos(angle)
y=pointA.y+radius*sin(angle)

純粋な行列は使用しませんが、余弦定理などを使用したいと思います。擬似コードでの私の試み(ひどく失敗しました。XYZ回転を余弦定理と組み合わせる方法が本当にわかりません):

newx=pointA.x+radius*cos(rotationY)*sin(rotationZ+toRadians(90))
newy=pointA.y+radius*cos(rotationZ-toRadians(90))*math.sin(rotationY)*math.cos(rotationX)
newz=pointA.z+radius*math.cos(rotationZ+toRadians(90))*sin(rotationX)

誰かが私を助けてくれたらとてもありがたいです。:)

4

3 に答える 3

1

x = cos(yaw)* cos(pitch)

y = sin(yaw)* cos(pitch)

z = sin(ピッチ)

ロールは必要ありません。

これは完璧ではないと思いますか?ラジアンが必要であり、それがエラーの原因となる可能性があります。すべてのクォータニオンを取得するか、ロールを組み込む必要があると思いますが、中間ソリューションには十分な場合があります。

最近の状況では、x = cos(yaw)* -cos(pitch)のピッチのcosを否定しました

于 2015-04-13T10:16:56.163 に答える
0

原点を中心とし、半径、方位角、仰角がわかっている球があるとします。次に、球面からデカルトへの変換を使用して、デカルト座標を簡単に見つけることができます。

したがって、最初に、A半径と角度を使用して、相対的なBコンポーネントを取得します。デカルトコンポーネントを取得します。次に、これらの相対コンポーネントをAデカルトコンポーネントに追加して、絶対B座標を返すことができます。ある点では役に立たないので、ロール角を考慮しないでください。

于 2012-08-05T20:37:20.863 に答える
0

答えてくれてありがとう。この質問に答えたのはかなり前のことですが、これを読んでくれる人のために、私の実装を共有します。これがLuaです。2つの入力角度を持つPointOnSphere関数(方位角と高度はrotation.xとrotation.yと同じです)(度単位):

function PointOnSphere(origin,rotation,radius)
return {x=origin.x+radius*math.cos(math.rad(rotation.y))*math.cos(math.rad(rotation.x)),y=origin.y+radius*math.sin(math.rad(rotation.x)),z=origin.z+radius*math.sin(math.rad(rotation.y))*math.cos(math.rad(rotation.x))}
end 

この答えは、y軸が上を向いている座標系を使用する場合に関連することに注意してください。

追加の便利なリンクはこれです、それは同様の答えを持つ同じ質問です:https ://math.stackexchange.com/questions/264686/how-to-find-the-3d-coordinates-on-a-celestial-spheres-水面

于 2015-05-24T22:22:58.670 に答える