2

我正在尝试为 iPhone 4 构建一个应用程序,该应用程序使用户能够“指向”硬编码的目的地,并且目的地所在的位置会出现一个点。

首先,我使用指南针制作水平指南针(这将涵盖左/右旋转):

// Heading
nowHeading = heading.trueHeading;

// Shift image (horizontal compass)
float shift = bearing - nowHeading;
destinationImage.center = CGPointMake(shift+160, destinationImage.center.y);

我将点移动 160 像素,因为屏幕宽度为 320 像素。我现在的问题是,如何扩展此代码以上下处理?这意味着如果我将手机指向桌子下方,点将不会显示.. 我必须指向(如拍照)目的地才能将其绘制在屏幕上。我已经实现了加速器。但我不知道如何结合这些组件来解决我的问题。

4

2 回答 2

1

方位应取决于相机的视野。对于 iPhone 4,水平角度视图为 47.5,因此 320 点/47.5 = xxx 点/度,使用它来水平移动。您还必须为加速度计添加一个自适应滤波器,您可以从 Apple的AccelerometerGraph项目中获得一个。

你有一个轴(轴承)的旋转,你应该从加速度计获得另外两个轴的旋转。两个轴的 atan2 为您提供第三个轴的旋转。转到UIAcceleration并想象一个轴在物理上刺穿设备,如果有帮助的话,double xAngle = atan2(acceleration.y, acceleration.z);那么一旦你将旋转倒置,你就可以重复你对水平和垂直视野所做的事情,例如:iPhone 为 60。

这将是一个粗略的实现 :) 但实现平稳移动是困难的。您可以做的一件事是使用陀螺仪获得更快的响应并使用加速度计定期校正其信号。请参阅此演讲以了解未来的麻烦:Android 设备上的传感器融合。这是一个专门介绍卡尔曼滤波器的网站。如果你敢于使用四元数,我推荐 Andrew J. Hanson 的“可视化四元数”。

于 2011-05-14T17:26:40.180 回答
0

听起来你正在尝试做一种增强现实风格。如果说。是否有这里建议的几个库和示例代码:

增强现实

于 2011-05-14T15:45:01.903 回答