2016-08-24 75 views
1

我需要将运动从加速度计转换为适当的值才能旋转SceneKit对象。我的代码到原始的x,y,z值转换为弧度:以3D旋转方式转换加速度计

let theta : Float = atan2(x, sqrtf(powf(y, 2)+powf(z, 2))) 
    let psi  : Float = atan2(y, sqrtf(powf(x, 2)+powf(z, 2))) 
    let phi  : Float = atan2(sqrtf(powf(x, 2)+powf(y, 2)), z) 

我挣扎将其转换成一个完整的360度角旋转对象。

任何帮助?

+0

那你真正想要的?如果你想要一个360度的角度,你想要什么?在现实世界中,你有360x180度,因为它在3D中 –

+0

嗨,我的解释可能有点偏离,因为我的数学和物理学都很古老。我有一个SceneKit对象,我希望相对于其x和y轴上的加速度计(由BLE接收的数据)的位置旋转。相对于Scenekit对象的中心质量。所以我假设我需要x和y全部360度。 – user5308141

回答

1

在SceneKit你可以用X,Y,直接ž欧拉角:

let object:SCNNode = ... 
object.eulerAngles = SCNVector3(x: CGFloat(x), y: CGFloat(y), z: CGFloat(z)) 
+0

您使用iOS内置的内置加速度计。我正在使用通过BLE访问的单独加速计。我发布的等式如何等于四元数? – user5308141

+0

好吧,我改变它使用欧拉x,y,z角度。 – Palle

+0

感谢您的洞察力。虽然我不能百分百地确信我的欧拉角度计算是正确的,但我的模型具有相同的方向。 – user5308141