我正在尝试为iPhone 4构建一个应用程序,该应用程序使用户可以“指向”硬编码的目标,并在目标所在的位置出现一个点。
首先,我使用罗盘制作水平罗盘(这将覆盖左/右旋转):
// Heading
nowHeading = heading.trueHeading;
// Shift image (horizontal compass)
float shift = bearing - nowHeading;
destinationImage.center = CGPointMake(shift+160, destinationImage.center.y);
我将点移动了160像素,因为屏幕的宽度是320像素。我的问题是,现在我该如何扩展此代码以上下处理?这意味着,如果我将手机指向桌子下方,该点将不会显示..我必须指向目的地(如拍照)才能在屏幕上绘制它。我已经实现了加速器。但是我不知道如何团结这些组成部分来解决我的问题。
最佳答案
方位应取决于摄像机的视野。对于iPhone 4,水平角度为47.5,因此每度320点/47.5 = xxx点,请使用该角度水平移动。您还必须向加速度计添加自适应滤波器,您可以从Apple的AccelerometerGraph项目中获得一个。
您在一个轴(轴承)上有旋转,应该从加速度计上在另外两个轴上旋转。两个轴的atan2可让您在第三个轴上旋转。转到UIAcceleration并想象一个轴会物理刺穿设备(如果有帮助的话),并执行double xAngle = atan2(acceleration.y, acceleration.z);
。因此,一旦旋转方向颠倒过来,您可以在垂直视场上重复水平操作,例如:60苹果手机。
那将是一个粗略的实现:),但是要实现平稳的移动是困难的。您可以做的一件事是使用陀螺仪来获得更快的响应,并使用加速度计定期校正其信号。有关此后的麻烦,请参见此演讲:Sensor Fusion on Android Devices。这是专用于卡尔曼滤波器的website。如果您敢于使用四元数,我建议您使用Andrew J. Hanson的“可视化四元数”。