【发布时间】:2012-05-21 16:22:08
【问题描述】:
我需要计算 iphone 在太空中的速度,例如打孔速度。
我的第一个问题是:加速度值accelerometer:didAccelerate是否具有此过滤操作:
gravity_x = acceleration.x * kFilteringFactor + gravity_x * (1.0 - kFilteringFactor);
gravity_y = acceleration.y * kFilteringFactor + gravity_y * (1.0 - kFilteringFactor);
gravity_z = acceleration.z * kFilteringFactor + gravity_z * (1.0 - kFilteringFactor);
float gravityNorm = sqrt(gravity_x * gravity_x + gravity_y * gravity_y + gravity_z * gravity_z);
accelX = acceleration.x - gravity_x / gravityNorm;
accelY = acceleration.y - gravity_y / gravityNorm;
accelZ = acceleration.z - gravity_z / gravityNorm;
和使用CoreMotion的一样motionManager.deviceMotion.userAcceleration.x;
motionManager.deviceMotion.userAcceleration.y;
motionManager.deviceMotion.userAcceleration.z; ?
接下来,根据相同的问题,我执行以下操作
const float accuracy=10;
float accx = (float) ((int) (accelX * accuracy))/ accuracy;
float accy= (float) ((int) (accelY * accuracy))/ accuracy;
float accz= (float) ((int) (accelZ * accuracy))/ accuracy;
对于舍入值,然后,我认为,我获得当前速度
float dx = accx*9.81+prevX*9.81;
float dy = accy*9.81+prevY*9.81;
float dz = accz*9.81+prevZ*9.81;
speed_after_x = dx/2*myAccelerometer.updateInterval+speed_before_x;
speed_after_y = dy/2*myAccelerometer.updateInterval+speed_before_y;
speed_after_z = dz/2*myAccelerometer.updateInterval+speed_before_z;
根据iphone accelerometer speed and distance
那么
prevX=accx;
prevY=accy;
prevZ=accz;
speed_before_x=speed_after_x;
speed_before_y=speed_after_y;
speed_before_z=speed_after_z;
最后将速度计算为向量的长度
float speed = sqrt(speed_after_x*speed_after_x+speed_after_y*speed_after_y+speed_after_z*speed_after_z);
if (max_speed<speed) max_speed = speed;
但是标签中包含的速度值总是在增加。我的意思是如果我移动设备然后停止,速度值不会变为 0。加速度不会在 0 处自我补偿吗?
【问题讨论】:
-
这不会自行取消:
((int) (accelX * accuracy))/ accuracy;。就像 ((10 * 100) / 100 == 10。如果您的意图是对数字进行四舍五入,然后将其转换回浮点数,则有更好的方法。 -
精度为 10,以避免在设备握持时快速改变加速度值。
-
是的,但是将一个数相乘然后除以同一个数就等于什么都不做。 (A * B) / B = A。
-
我不认为这就是为什么速度不会变成0的原因,无论如何,我必须使用
acceleration.timestamps delta,不完全是updateInterval -
哦,我知道,这就是为什么它是评论而不是答案。
标签: iphone ios core-motion acceleration