jct*_*ood 3 orbital-mechanics ios scenekit swift
我想让用户控制在静态球体表面移动的对象。使用两个按钮顺时针和逆时针旋转物体的方向,使其像小行星一样不断向前移动。
在场景工具包中,SCNNode 有三种不同的方向属性,我真的不知道从哪里开始。我了解如何执行除围绕球体旋转之外的所有操作。
您正在寻找球体表面的参数化。您可以在线找到此内容(但如果您不知道要输入的搜索词,这可能会很棘手)。查看MathWorld上的条目。
球体表面由两个角度变量参数化,分别称为s和t。请注意,一个变量将从 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)
Run Code Online (Sandbox Code Playgroud)
我发现以下可视化很有帮助。平面(例如 xy 平面)中的曲线扫过从 0 到 pi 的角度(半圈旋转)并对应于参数s。如果设置t等于 pi/2,则 sin(t) = 1,那么您可以看到 x 和 y 如何变成圆形截面的标准直角坐标。当s参数扫过半圆后,您可以将该半圆从 0 到 2 pi一路旋转,形成一个完整的球体,而该完整扫描对应于参数t。
如果您用坐标表示对象的位置(s, t),那么在大多数情况下,您可以使用上面的公式安全地转换为直角坐标,而不必担心任一参数的域;然而,如果s或t无限增长(例如,因为您的物体连续运行很长一段时间),那么可能值得付出一点额外的努力来标准化参数。我不确定对于非常大的输入如何sin或cos表现。
| 归档时间: |
|
| 查看次数: |
558 次 |
| 最近记录: |