控制围绕球体旋转的物体
我想让用户控制一个在静态球体表面上移动的物体。 使用两个按钮顺时针和逆时针旋转物体的方向,因为它不断向前移动,类似于小行星。
在场景工具包中,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)
我发现以下可视化有用。 平面中的曲线(例如,xy平面)扫出从零到pi的角度,半个旋转并且对应于参数s
。 如果设置t
等于pi / 2,那么sin(t)= 1,那么你可以看到x和y如何变成圆形截面的标准直角坐标。 在s
参数扫出半个圆后,您可以将该半圈从0到2 pi 一直旋转,以形成一个完整的球体,并且该完全扫描对应于参数t
。
如果用坐标(s, t)
表示对象的位置(s, t)
那么在大多数情况下,您可以使用上面的公式安全地转换为直角坐标,而不必担心任何一个参数的域; 然而,如果s
或t
无限制地增长(例如,因为你的物体长时间连续运行),那么将参数标准化的额外努力可能是值得的。 我不确定非常大的输入有多少sin
或者cos
行为。
- 如何将CGRect转换为MapRect
- 链接器错误 – 使用Cardboard SDK创建MainAppain __EXPECTED_EXACTLY_ONE_VR_MAIN_APP_STATEMENT__
- 在NSArray内的NSDictionary中排列NSDates?
- SKSpriteNode UserInteractionEnabled不起作用
- 使用GPUImage在OpenGL ES着色器中使用bool返回types
- Android版iOS快速查看框架
- iOS TableView使用Swift预取数据源
- 带dynamictypes标签的AutoLayoutdynamicUITableView单元格高度
- 如何在iOS,table C的tableview中的每个部分中仅实现单个单元格选择
- Jenkins不能从项目文件夹运行xcodebuild
- iOS NSDateFormatter dateFromString只在一个实例中返回nil