J'ai besoin de calculer la vitesse de l'iphone dans l'espace, la vitesse de perforation par exemple.
Ma première question est: Les valeurs d'accélération accelerometer:didAccelerate
avec ces actions de filtrage:
Comment calculer les valeurs de vélocité correctes à partir de l'accéromètre
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;
même que l'utilisation de
CoreMotion motionManager.deviceMotion.userAcceleration.x; motionManager.deviceMotion.userAcceleration.y; motionManager.deviceMotion.userAcceleration.z;
?
Ensuite, selon les mêmes questions, je fais ce qui suit
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;
pour les valeurs d'arrondi, puis, comme je le pense, j'obtenir la vitesse actuelle
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;
selon iphone accelerometer speed and distance
puis
prevX=accx;
prevY=accy;
prevZ=accz;
speed_before_x=speed_after_x;
speed_before_y=speed_after_y;
speed_before_z=speed_after_z;
et enfin de calculer spe ed comme vecteur de longueur
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;
Mais la valeur de la vitesse, qui est dans l'étiquette dire contenant, augmente toujours. Je veux dire que si je déplaçais l'appareil et que je m'arrêtais, la valeur de vitesse ne passe pas à 0. L'accélération ne se compense-t-elle pas à 0?
Est-ce que cela ne s'annule pas: '((int) (précision AccelX *))/précision;'. Comme ((10 * 100)/100 == 10. Si votre intention est d'arrondir le nombre et de le renvoyer à un flotteur, il y a de meilleures façons de le faire: – Diziet
la précision est de 10, pour éviter les variations rapides des valeurs d'accélération – Aft3rmath
Oui, mais multiplier un nombre puis diviser par le même nombre équivaut à ne rien faire (A * B)/B = A. – Diziet