转换从 CMMotionManager() 获取的 3D 位置以在 2D CG 坐标系上设置角度

Translate 3D position taken from CMMotionManager() to set angle on 2D CG Coordinate System

我不知道这是我必须计算的基础数学,还是我对俯仰、滚动和偏航值缺乏经验。目前我有一个图像对象根据我的加速度计值移动。

 //Move the ball based on accelerator values
        delta.x = CGFloat(acceleration.x * 10)
        delta.y = CGFloat(acceleration.y * 10)

        ball.center = CGPointMake(ball.center.x + delta.x, ball.center.y + delta.y)

我可以通过姿态计算俯仰,得到角度。我想要做的是仅当 phone 的角度为特定角度(比方说 45 度)时,才将我的 "ball" 排在屏幕中央。我怎样才能移动我的球,使其根据给定的特定角度在中心对齐?

您的屏幕高度为 Η 像素。 您的屏幕宽度为 W 像素。

屏幕水平中心为x = W / 2

根据你的问题,我假设你希望球中心在屏幕平坦时在顶部 (x, 0) 和屏幕垂直时在底部 (x, H) 之间变化。

如果您的 phone θ 的角度在 0π 之间变化,则 y = θ / π * H

ball.center = CGPoint(x: W / 2, y: θ / π * H)

您所需要的只是根据陀螺仪读数

计算θ的三角函数