3

我想让用户控制在静态球体表面上移动的对象。使用两个按钮来顺时针和逆时针旋转物体的方向,因为它像小行星一样不断向前移动。

在场景工具包中,SCNNode 有三个不同的方向属性,我真的不知道从哪里开始。我了解如何执行除围绕球体旋转之外的所有操作。

4

1 回答 1

4

您正在寻找球体表面的参数化。你可以在网上找到这个(但如果你不知道输入搜索的魔法词可能会很棘手)。查看MathWorld上的条目。

球体的表面由两个角度变量参数化,分别称为st。请注意,一个变量将从 0 运行到 2 pi,而另一个变量将仅从 0 运行到 pi。这是一个很容易错过的问题。要将这些角度转换为矩形 (x, y, z) 坐标,请使用以下公式:

x = r cos(s) sin(t)
y = r sin(s) sin(t) // Yes it's sin(t) twice, that's not a typo.
z = r cos(t)

我发现以下可视化很有帮助。平面(例如 xy 平面)中的曲线扫过一个从零到 pi 的角度,半个旋转并对应于参数s。如果设置t等于 pi/2,因此 sin(t) = 1,那么您可以看到 x 和 y 如何变成圆形截面的标准直角坐标。参数扫出半圈后s,可以将该半圈从零一直旋转2 pi,形成一个完整的球体,该全扫对应参数t

如果您通过坐标表示对象的位置,(s, t)那么在大多数情况下,您可以使用上面的公式安全地转换为直角坐标,而不必担心任一参数的域;但是,如果st无限制地增长(例如,因为您的物体连续运行很长时间),可能值得花一点额外的努力来规范化参数。我不确定非常大的输入如何sin或表现如何。cos

于 2015-01-10T00:40:38.210 回答