ios - 如何在 iOS 中计算加速度的速度和距离

标签 ios physics accelerometer

好吧,这是一个奇怪的问题 - 这个问题以前曾以各种形式被问过,并且总是以以下观点结束:a) 它不会准确,b) 随着时间的推移它会变得不准确。

我明白这一点 - 但我正在做一个实验,看看是否可以通过考虑其他证据来源(例如,如果事先绘制了 map ,那么从指南针与路线相结合可以提供另一个证据来源)。

问题是我的代码显然是垃圾 - 所以我欢迎您提出意见。我怀疑这可能是牛皮纸袋错误!

我的 ViewController.h 看起来像这样:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIAccelerometerDelegate> {

    UIAccelerometer *accelerometer;

    long last_speed;
    long distance_travelled;

    long lastAccel;
    long long lastTime;

    IBOutlet UITextField* speedView;
    IBOutlet UITextField* distanceView;
}

@end

我的 ViewController.m 看起来像这样:

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    lastAccel = 0;
    last_speed = 0;
    distance_travelled = 0;
    lastTime = (long)(NSTimeInterval)([NSDate.date timeIntervalSince1970] * 1000.0);

    accelerometer = UIAccelerometer.sharedAccelerometer;
    accelerometer.updateInterval = 0.1;
    accelerometer.delegate = self;
}

- (void)accelerometer:(UIAccelerometer *)meter
        didAccelerate:(UIAcceleration *)acceleration
{
    long long currentTime = (long)(NSTimeInterval)([NSDate.date timeIntervalSince1970] * 1000.0);
    long long deltaTime = currentTime - lastTime;
    lastTime = currentTime;

    long accel_x = acceleration.x;
    long accel_y = acceleration.y;
    long accel_z = acceleration.z;

    long integrated_acceleration = sqrtl(accel_x*accel_x + accel_y*accel_y + accel_z*accel_z);

    long average_acceleration = (lastAccel + integrated_acceleration) / 2;

    long speed = last_speed + (average_acceleration * deltaTime);
    long average_speed = (speed + last_speed) / 2;
    distance_travelled = distance_travelled + (average_speed * deltaTime);

    last_speed = speed;
    lastAccel = integrated_acceleration;

    [speedView setText:[NSString stringWithFormat:@"%ld", speed]];
    [distanceView setText:[NSString stringWithFormat:@"%ld", distance_travelled]];
}

@end

当代码运行时,速度和距离不断上升,并且从未考虑减速(我减速) - 所以即使我停下来,速度和距离也会继续上升。

即使按照“这会有点不准确”的标准,这也太过分了!

感谢所有的想法和意见(好吧几乎 - 我知道它不会准确!)

最佳答案

您无法使用 UIAccelerometer 计算速度。

请找到链接以获得更多说明:How to calculate speed using accelerometer in ios

关于ios - 如何在 iOS 中计算加速度的速度和距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52480615/

相关文章:

iphone - Sqlite 数据库在 ipad 中部署时返回 8

iphone - 在 ios 中的应用内购买

ios - 加速度计读数有多少字节?

android - 使用摇动 Action 从加速度计获取方向

android - 无法解析类型 org.andengine.entity.shape.IAreaShape。

iOS:我可以从加速度计数据中获取俯仰/偏航/滚动吗?

ios - 如何在 UITableView 的单元格中为 UIImageView 获取 touchesMoved?

ios - Swift - 数组过滤器不删除对象

rotation - 如何旋转圆来响应碰撞?

python - 伊辛模型 2D Python