Quelle est la bonne façon d'utiliser CMAttitude:multiplyByInverseOfAttitude ?
Dans le cas d'un appareil iOS5 posé à plat sur une table, après avoir démarré CMMotionManager avec :
CMMotionManager *motionManager = [[CMMotionManager alloc]init];
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:
CMAttitudeReferenceFrameXTrueNorthZVertical];
Ensuite, les objets CMDeviceMotion sont obtenus :
CMDeviceMotion *deviceMotion = [motionManager deviceMotion];
Je m'attends à ce que [deviceMotion attitude] reflète la rotation de l'appareil par rapport au Nord géographique.
Par observation, [deviceMotion userAcceleration] indique l'accélération dans le cadre de référence de l'appareil. En d'autres termes, déplacer l'appareil d'un côté à l'autre (en le maintenant à plat sur la table) enregistre l'accélération dans l'axe des x. Le fait de tourner l'appareil de 90° (toujours à plat) et de le déplacer d'un côté à l'autre indique toujours une accélération sur l'axe x.
Quelle est la bonne façon de transformer [deviceMotion userAcceleration] pour obtenir une accélération nord-sud/est-ouest plutôt que gauche-droite/avant-arrière ?
CMAttitude multiplyByInverseOfAttitude semble inutile puisqu'un cadre de référence a déjà été spécifié et que la documentation n'indique pas clairement comment appliquer l'attitude à CMAcceleration.