iPhone 上的加速器范围是多少?
-
05-09-2019 - |
题
我似乎无法在网上找到任何关于此的文档,而且我正在谷歌搜索的内容给了我很多相互矛盾的信息......
解决方案
从 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 如果背向您(并且颠倒)