2016-09-15 3 views
1

Lorsque j'utilise le cadre Core Motion, j'obtiens des valeurs comprises entre 1 et -1 pour les valeurs d'axe CMMotionManageraccelerometerData.Comment convertir les valeurs de la force g de l'accéléromètre en degrés

Si vous tenez le téléphone avec l'écran face à vous, puis faites-le pivoter de 90 degrés vers la gauche, vous obtiendrez une valeur de -1 g dans la direction X. Tournez-le à droite, et vous verrez une valeur de 1g.

Je veux que ces valeurs soient représentées en degrés, comment puis-je effectuer cette conversion?

+0

Je ne vois aucune relation entre ceux-ci. 1g signifie seulement 90 degrés en fonction du rayon de l'axe, de la vitesse et de la durée de la rotation. Je suis sûr que votre téléphone a d'autres capteurs que vous pouvez utiliser pour déterminer cet angle, comme la boussole. – Havenard

+0

1g est juste une force. il ne dit rien sur la durée d'application de cette force et ne peut pas être utilisé pour donner une direction. vous pouvez tourner le téléphone de 1 degré avec 1g de force, ou vous pouvez le faire tourner complètement avec 1g de force aussi bien. –

+1

@MarcB le 1g est la force de gravité lorsque le téléphone est au repos, ce n'est pas la force résultant du mouvement de rotation, donc il est constant. – Paulw11

Répondre

1

J'ai trouvé que je n'ai pas besoin de faire une telle conversion, car vous pouvez obtenir un angle à partir de l'instance CMMotionManager depuis le deviceMotion.gravity.

Les angles étant:

self.motionManager = [[CMMotionManager alloc] init]; 
[self.motionManager startDeviceMotionUpdates]; 

CMDeviceMotion *deviceMotion = self.motionManager.deviceMotion; 
const CGFloat currentXDegrees = radiansToDegrees(deviceMotion.attitude.roll); 
const CGFloat currentYDegrees = radiansToDegrees(deviceMotion.attitude.pitch); 

Merci à tous ceux qui ont répondu.