以给定(s,t)角度绘制球体上的点

时间:2017-05-03 05:57:45

标签: math unity3d mapping virtual-reality

已经有一个问题而且它有一个答案here,但它并没有像我期望的那样工作。

# Assume my radius is 1 for simplicity

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

当t = 0时,无论我的是什么,

(x,y,z)=(0,0,1)  

# Since sin 0 = 0 on x 
# and y and z is independent of s

所以,这就是我的世界

enter image description here

但实际上当s增加时,球体上的点变化,不会保持在(0,0,1)。例如。如果我的s =( - 45)度和t = 0,球体上的点应该是(0,0.707,0.707)对吗?

更新:这就是我需要的:

(s,t)   |  (x,y,z)
---------------
(0,0)   |  (0,0,1)
(45,0)  |  (.707,0,0.707)
(90,0)  |  (1,0,0)
(180,0) |  (0,0,-1)
(270,0) |  (-1,0,0)
(0,-45) | (0,0.707,0.707)
(0,45)  | (0,-0.707,0.707)

但是我不能从上面的公式得到那些结果......!我该怎么办?

1 个答案:

答案 0 :(得分:3)

使用您的公式t=0表示您处于极点,因此半径为零。无论s是什么,输出应始终为(x,y,z)=(0,0,1)。如果您需要标准球面坐标,请使用:

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

s = <0,360> [deg]
t = <-90,+90> [deg]

(s=45deg,t=0deg)它应该返回(x,y,z)=(0.707,0.707,0.000)

PS。我不确定您为什么在 OP 中使用混合坐标y,z而不是x,y

<强> [EDIT1]

要匹配您的图片参考框架,请尝试使用以下选项:

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

s = <0,360> [deg]
t = <-90,+90> [deg]