转换从 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)
您所需要的只是根据陀螺仪读数
计算θ
的三角函数
我不知道这是我必须计算的基础数学,还是我对俯仰、滚动和偏航值缺乏经验。目前我有一个图像对象根据我的加速度计值移动。
//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)
您所需要的只是根据陀螺仪读数
计算θ
的三角函数