【问题标题】:Plotting a point on the sphere at given (s,t) angles以给定的 (s,t) 角在球体上绘制一个点
【发布时间】:2017-05-03 05:57:44
【问题描述】:

已经有一个问题,它有一个答案here,但是它并没有按我预期的方式工作。

# Assume my radius is 1 for simplicity

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

当t=0时,不管我的s,

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

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

我的世界是这样的

但实际上当 s 增加时,球体上的点会发生变化,不会停留在 (0,0,1)。例如。如果我的 s=(-45)deg 和 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)

但我没有从上面的方程式中得到这些结果......!我该怎么办?

【问题讨论】:

  • 统一用户注意事项:s=transform.eulerAngles.y 和 t=transform.eulerAngles.x

标签: math unity3d mapping virtual-reality


【解决方案1】:

使用您的公式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

[编辑1]

要匹配您的图像参考框架,请尝试使用这些:

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

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

【讨论】:

  • 我在这个问题上写的方程式直接来自这个answer,它们对我不起作用,因此这个问题。那么这个答案有缺陷吗?
  • @ZekeDran 不,他们只是为t 使用不同的参考系,角度从两极而不是赤道开始......所以t=&lt;0,180&gt; [deg]......
  • 啊,我明白了,感谢您的解释... 从正面看时(前视图),我的 x 轴水平向右,y 轴垂直,z-轴测量深度。这样,当我有角度 (0,0) 时,我视线中球体上的点将是 (x,y,z) = (0,0,1),所以当我看上方 45 度时,角度是 (45,0),球体上的点应该是 (0,0.707,0.707)
  • 这很像浏览器屏幕像往常一样映射到 x,y 轴,而第 3 维是 z 轴,标记屏幕上每个元素的深度或高度。它的 z-index 在 css 中。
  • @ZekeDran 我只是用你的my(x,y,z)=your(z,x,-y) 替换我的参考系的轴...x 轴是展位角为零的地方...z 轴是极坐标,其中@987654337 @ 和 ys 方向上旋转 x 90deg
猜你喜欢
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 2011-07-28
相关资源
最近更新 更多