如何使用CoreMotion在空间中获取设备方向
-
21-12-2019 - |
题
我在这里有一个思考和搜索问题,找不到看起来的良好方向...... 我希望通过使用设备运动,开发一种算法来在360图像(SPEID)中移动。
因此,如果用户指向他面前的设备,他会得到所确定的图像的起源点。当他向他周围移动设备时,全景图像按照它移动。
我可以调查的任何想法或源?
谢谢,祝你们幸福快乐:)
解决方案
我看到两种简单的方法来实现这一点,没有太多的数学麻烦:
- 使用euler角度,即 Cmattitude
- gimbal lock 当用户开始以混沌方式移动他们的设备时。
- 相同适用于关于完整3D视图的可扩展性。
- 使用 cmdevicemotion
- 磁场并不总是可用的或往往是卑鄙的不精确。
- 将其扩展到3d视图可能是一个麻烦。
这两种方法都应该很容易实现,因此我将从其中一个开始。如果你想要拥有更复杂的解决方案,你需要深入了解数学。在这种情况下,PPossible解决方案可以是使用当前设备普通的。例如查找普通向量到iOS设备),将其投影到地球表面平面上并为圆柱形全景带来角度的达景。
在这种情况下,球体投影甚至更容易,因为您可以直接使用Nomal Vector。
其他提示
感谢Kay,我可以在正确的轨道上实现这种效果。
我正在制作这个答案,只是为了为那些寻找同样的事情提供更多细节。
首先,您需要创建一个cmmotionManager对象。然后使用startdevicemotionupdateStoqueue来处理运动事件。
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
[self processMotion];
}];
.
在流程中,您只需要基于前一个:
获得态度:// Get attitude difference with previous one
CMAttitude *currentAttitude = self.motionManager.deviceMotion.attitude;
[currentAttitude multiplyByInverseOfAttitude:self.referenceAttitude];
.
感谢您,您知道自上次更新以来用户所做的新角度。 然后在您处理视图的位置,您将新的欧拉角转换为移动图像所需的像素量。 只需谨慎的欧拉角度在-180,180之间变化,并在Apple中给出。这可能是方便:
#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))
.
所以在我的情况下,我只是计算新的x偏移,因为我只是在x轴上移动。
希望这有帮助。
不隶属于 StackOverflow