Ios 平移从CMMotionManager()获取的三维位置,以在二维CG坐标系上设置角度
我不知道这是我必须计算的基本数学,还是我对俯仰、横摇和偏航值缺乏经验。目前,我有一个图像对象,它根据我的加速计值移动Ios 平移从CMMotionManager()获取的三维位置,以在二维CG坐标系上设置角度,ios,swift,math,graphics,cgpoint,Ios,Swift,Math,Graphics,Cgpoint,我不知道这是我必须计算的基本数学,还是我对俯仰、横摇和偏航值缺乏经验。目前,我有一个图像对象,它根据我的加速计值移动 //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 + d
//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)
我可以通过姿态计算出俯仰角,得到角度。我想做的是,只有当手机的角度是某个角度,比如说45度时,我才把我的“球”对准屏幕中央。如何移动球,使其根据给定的特定角度在中心对齐?您的屏幕高度为
Η
像素。
您的屏幕宽度为W
像素
屏幕的水平中心为x=W/2
我从你的问题中假设,当屏幕为平面时,你希望球的中心在顶部(x,0)
之间变化,当屏幕为垂直时,球的中心在底部(x,H)
之间变化
如果手机的角度θ
在0
和π
之间变化,则y=θ/π*H
ball.center = CGPoint(x: W / 2, y: θ / π * H)
你所需要的只是根据陀螺仪读数计算出
θ
,你似乎在根据加速计值设置球的速度。使用这种方法,当接近特定角度时,不可能将其强制到特定位置。在这种情况下,你只能将速度设为零。这可能是正确的概念,但为什么要将角度乘以高度呢?通过这样做,y值以千为单位。也就是说,如果θ是以度为单位的角度。谢谢,我用它来处理,但是如果你不把y乘以2,那么它就不会进入视图的底部。我的假设是,你以弧度为单位,因此用θ除以π,这是一个更新。如果θ以弧度为单位,那么仍然需要将H乘以2,否则球将只到达视图的中间,而不是底部。