9
votes

Distance déplacée par accéléromètre

Je veux déplacer des objets sur l'écran de l'iPhone (rectangle, encercler et ainsi de suite) en déplaçant l'iphone. Par exemple, je déplace l'iPhone le long de l'axe X et l'objet se déplace le long de l'axe des x. La même chose pour y, z-axe.

Comment puis-je faire cela? Puis-je obtenir un algorithme?

merci.

P.s: J'ai cherché un moment et on dirait que cela est possible avec accéléromètre.


0 commentaires

3 Réponses :


3
votes

Pas facile à faire avec précision. Un accéléromètre ne rapporte que accélération em>, pas de mouvement. Vous pouvez essayer (numériquement) Intégrer l'accélération au fil du temps, mais vous êtes susceptible de vous retrouver avec des erreurs cumulatives, ce qui conduit à un mouvement inattendu.

pseudocode, évidemment non testée: p>

init:
    loc = {0, 0, 0}    ; location of object on screen
    vel = {0, 0, 0}    ; velocity of object on screen
    t = 0              ; last time measured

step:
    t0 = time          ; get amount of time since last measurement
    dt = t0 - t
    accel = readAccelerometer()
    vel += accel * dt  ; update velocity
    loc += vel * dt    ; update position
    displayObjectAt(loc)


2 commentaires

Donc, vous dites que ce n'est pas une chose pratique à faire sur iPhone?


Correct. Les liens dans la réponse de Ali montrent que cela ne fonctionnera probablement pas utilement.




2
votes

Pourquoi n'utilisez-vous pas l'accélération elle-même à la place de la distance déplacée? Par exemple; Si votre accélération est de 1,4 g à l'est, votre objet doit passer à l'est de 14pixels par seconde jusqu'à ce que votre accélération change.

Pour que le mouvement de l'objet soit similaire à une force relative et que je pense que c'est plus réaliste. Dispositif de déplacement plus rapide, force plus grande pour effectuer un objet.

Aussi regarder:

http://www.freescale.com/files/sensors /doc/app_note/an3397.pdf

et

Utilisation de l'accéléromètre, du gyroscope et de la boussole à Calculez le mouvement de l'appareil dans le monde 3D


1 commentaires

Lorsque vous ferez un mouvement, par exemple à gauche, vous obtiendrez une sortie comme celle-ci: -1g 0g 0g 0g 1g car lorsque vous arrêtez le mouvement, vous obtiendrez une force qui sera négative à la force initiale qui a créé un mouvement. Vous devez en quelque sorte filtrer et ce n'est pas facile.