web-dev-qa-db-ja.com

球のエッジに点をプロットする

フラッシュの背景から来たので、いくつかの単純な2Dトリガーについては十分に理解しています。 2d with I circleでは、を使用して角度と半径を指定して、エッジにアイテムを配置する数学を知っています。

x = cos(a) * r;
y = sin(a) * r;

これで、3D空間に点がある場合、球の半径がわかり、z軸の周りに配置する角度と、たとえばy軸の周りに配置する角度がわかります。私の3D空間でx、y、z座標を見つけるための数学は何ですか(私の原点が0,0,0であると仮定します)?サークルトリガーから数学を借りることはできると思いますが、解決策が見つからないようです。

24
James Hay

3Dでの位置は、2つの角度(+半径、この場合は一定)で与えられます。

x = r * cos(s) * sin(t)
y = r * sin(s) * sin(t)
z = r * cos(t)

ここで、sはz軸の周りの角度であり、t高さの角度で、z軸から「下」に測定されます。

次の図は、角度が何を表すかを示しています。xy平面で0〜2 * PIの範囲のs =theta、およびt =phi0からPIの範囲。

enter image description here

69
second

受け入れられた答えは負のx値をサポートしていないようでした(おそらく私は何か間違ったことをしました)が、念のため、 このウィキペディアのエントリ で定義された座標系でISO規則からの表記を使用すると、この連立方程式は作業:

import math

x = radius * sin(theta) * cos(phi)
y = radius * sin(theta) * sin(phi)
z = radius * cos(theta)

radius = math.sqrt(math.pow(x, 2) + math.pow(y, 2) + math.pow(z, 2))

phi = math.atan2(y, x)
theta = math.acos((z / radius))
1
legel