Tag: 核心动作

iPhone的方向 – 如何找出哪个方向是?

我试图在屏幕上总是面向“向上”绘制2D图像。 如果用户正在旋转他们的手机,我想确保我的2D对象不随设备旋转; 它应该总是“站立”。 我想补偿用户向左或向右倾斜,而不是倾斜或向自己倾斜。 我正在使用CoreMotion从设备中获取音调,滚动和偏航,但我不明白如何将点转换为方向,特别是在用户旋转设备时。 理想情况下,我可以将这3个数字转换成一个单独的值,这个值总是能告诉我哪一个方法已经启动,而不必重新学习所有的三angular函数。 我已经看了3D茶壶的例子,但它并没有帮助,因为这个例子是二维,我不需要倾斜/朝着倾斜。 另外,我不想使用指南针/磁力计,因为这需要在iPod Touch上运行。

Core Motion控制的SceneKit相机如何避免晃动?

我使用本答案中描述的CMDeviceMotion扩展将SceneKit相机设置为当前的CMDeviceMotion姿态: func deviceDidMove(motion: CMDeviceMotion?, error: NSError?) { if let motion = motion { let orientation = motion.gaze(atOrientation: UIApplication.sharedApplication().statusBarOrientation) cameraNode.orientation = orientation } } 这工作很好,但是,我想阻止旋转(滚动),只允许相机转身(偏航)和俯仰。 我试图将四元数转换回欧拉angular,并简单地离开滚动0: cameraNode.eulerAngles = SCNVector3( x: orientation.pitch(), y: orientation.yaw(), z: 0) 但是,这只适用于偏航运动的一半。 另一半,相机颠倒了。 我怀疑这是涉及欧拉angular的万向节锁问题。 四元数对我来说有点像黑魔法,但是有没有办法直接在四元数水平上去掉滚动分量,这样我可以避开欧拉angular?

使用四元数来代替滚动,俯仰和偏航来跟踪设备的运动

请耐心解决我长期以来的问题,我想尽可能使之清楚。 我想要做的是,当使用相机拍摄照片时,获取姿态(滚动音高和偏航),然后将姿态值保存到nsuserdefaults。 保存后,方向改变,然后尝试通过不断比较姿态值(保存的和当前的)来使手机达到与拍摄图像相同的姿态。 为了界面的目的,用户界面在屏幕上有3个点(每个姿态参数一个),以指导拍摄的正确方向。 在达到正确态度时,屏幕上显示匹配标志。 我一直在find滚动,俯仰和偏航的值: CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion; myRoll = radiansToDegrees(atan2(2*(quat.y*quat.w – quat.x*quat.z), 1 – 2*quat.y*quat.y – 2*quat.z*quat.z)) ; myPitch = radiansToDegrees(atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 – 2*quat.x*quat.x – 2*quat.z*quat.z)); myYaw = radiansToDegrees(2*(quat.x*quat.y + quat.w*quat.z)); 当我注意到在偏航值有一些差距,我search,可以从这里find: 链接 ,那 从四元数的偏航,俯仰和滚转,你将会遇到同样的问题,就好像你正在使用偏航,俯仰和滚转。 你必须在你的代码中四处使用四元数,并忘记偏航,俯仰和滚转 所以现在我想我必须再次编码一切…请你能如此友好的指向我为此目的使用四元数的示例代码? 这是我正在处理的代码: 在ViewController.m中,在图像中:didFinishSavingWithError: [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) { CMQuaternion quat = […]