我似乎无法在网上找到任何关于此的文档,而且我正在谷歌搜索的内容给了我很多相互矛盾的信息......

有帮助吗?

解决方案

iphonedevsdk.com

  

在第一使用的加速度计   和第二代的iPhone(我   假设也是iPod touch上)操作   在两种模式下:+/- 2克,和+/- 8克   (其实,你观察到的,他们   有些报告外加速度   额定范围。精度不   spec'ed该范围之外,虽然。)

     

苹果操作他们在的+/- 2克   模式。有一个权衡:当前   分辨率是名义上0.018克,   根据数据表(虽然我的   第一代iPhone应用   0.018168604,根据AccelerometerGraph的修改版本)。在里面   +/- 8 g模式,分辨率将是四倍较粗略的。

     

我认为苹果公司决定,细   分辨率会比更有用   的更宽的范围。 (我宁愿看到更细   比0.018克分辨率。所以既不   我们是完全满意。)

     

可以不改变与任何模式   这些API的发布功能。以来   他们通过加速为   双,他们在理论上允许   在模式的变化,简单地看   模式时重新缩放A / d值,   之前报告的加速。 (该   明显的地方设置的模式会   在建立呼叫的   应用程序接收加速   信息)。但是,用于向后   兼容性,操作系统将不得不   设置加速度计模式的+/- 2克   在应用程序的开始。   并且没有任何的后台进程   可以允许设置   加速度计模式。

其他提示

在aGauge应用显示此原始数据从加速度计来当您移动设备。它也可以帮助您找到您的设备的“炫”的门槛。

我创建了以下应用程序来尝试测试范围......

UIAccelerometer *objAccelerometer;
UILabel *lblxmin, *lblxmax, *lblymin, *lblymax, *lblzmin, *lblzmax;
UILabel *lblxnow, *lblynow, *lblznow;

float xmin = 0.0, xmax = 0.0, ymin = 0.0, ymax = 0.0, zmin = 0.0, zmax = 0.0, xnow = 0.0, ynow = 0.0, znow = 0.0;

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {   
    //NSLog (@"%f, %f, %f", acceleration.x, acceleration.y, acceleration.z);
    xnow = acceleration.x;
    ynow = acceleration.y;
    znow = acceleration.z;
    if (xnow < xmin) { xmin = xnow; }
    if (ynow < ymin) { ymin = ynow; }
    if (znow < zmin) { zmin = znow; }

    if (xnow > xmax) { xmax = xnow; }
    if (ynow > ymax) { ymax = ynow; }
    if (znow > zmax) { zmax = znow; }

    lblxmin.text = [NSString stringWithFormat:@"%f", xmin];
    lblymin.text = [NSString stringWithFormat:@"%f", ymin];
    lblzmin.text = [NSString stringWithFormat:@"%f", zmin];

    lblxmax.text = [NSString stringWithFormat:@"%f", xmax];
    lblymax.text = [NSString stringWithFormat:@"%f", ymax];
    lblzmax.text = [NSString stringWithFormat:@"%f", zmax];

    lblxnow.text = [NSString stringWithFormat:@"%f", xnow];
    lblynow.text = [NSString stringWithFormat:@"%f", ynow];
    lblznow.text = [NSString stringWithFormat:@"%f", znow];

}

-(void) invokeAccelerometer {   
    objAccelerometer = [UIAccelerometer sharedAccelerometer];
    objAccelerometer.delegate = self;
    objAccelerometer.updateInterval = (1.0 / 10.0);
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    lblxmin = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 40)];
    lblxnow = [[UILabel alloc] initWithFrame:CGRectMake(100, 10, 100, 40)];
    lblxmax = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 100, 40)];

    lblymin = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 100, 40)];
    lblynow = [[UILabel alloc] initWithFrame:CGRectMake(100, 60, 100, 40)];
    lblymax = [[UILabel alloc] initWithFrame:CGRectMake(200, 60, 100, 40)];

    lblzmin = [[UILabel alloc] initWithFrame:CGRectMake(10, 110, 100, 40)];
    lblznow = [[UILabel alloc] initWithFrame:CGRectMake(100, 110, 100, 40)];
    lblzmax = [[UILabel alloc] initWithFrame:CGRectMake(200, 110, 100, 40)];

    [self.view addSubview:lblxmin];
    [self.view addSubview:lblxnow];
    [self.view addSubview:lblxmax];

    [self.view addSubview:lblymin];
    [self.view addSubview:lblynow];
    [self.view addSubview:lblymax];

    [self.view addSubview:lblzmin];
    [self.view addSubview:lblznow];
    [self.view addSubview:lblzmax];

    [self invokeAccelerometer];

    [super viewDidLoad];
}

问题是,当我沿水平/垂直轴旋转 iPod 然后将其翻转时,我得到如下值:

xmin -1.271802

最大1.180959

ymin -1.344477

最大 1.108285

zmin -2.30713

最大z2.325581

如果我拿起 iPod 并摇晃它,我会得到...

x -2.325581 至 2.307413

y -2.325581 至 2.307413

z -2.307413 至 2.325581

你知道它在测量什么吗?

我想出的最好的办法是:

垂直轴

如果向左倾斜 ( <| ),x = -1

如果完全向右倾斜 ( |> ),x = +1

  • <是屏幕面对的方式,|是iPod的底部

y ~ -1 如果屏幕面向您,垂直于地板(“站立”)

y ~ 1 如果背向您(并且颠倒)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top