9
votes

I want to move objects on iPhone screen (rectangle, circle and so on) by moving iPhone. For example, I move iPhone along X-axis and the object moves along X-axis. The same for Y,Z-axis.

How can I do this? Can I get algorithm for it?

Thank you.

P.S: I looked for a while and seems like it is possible using accelerometer.

3

3 Answers

15
votes
3
votes

Not easy to do accurately. An accelerometer only reports acceleration, not movement. You can try (numerically) integrating the acceleration over time, but you're likely to end up with cumulative errors adding up and leading to unintended motion.

Pseudocode, obviously untested:

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
votes

Why don't you use the acceleration itself instead distance moved? For example; If your acceleration is 1.4G east, your object should move to east 14pixels per second until your acceleration changes.

So that object's movement is will be like it is under a relative force and I think it's more realistic. Faster moving device, bigger force to effect object.

Also look:

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

and

Using accelerometer, gyroscope and compass to calculate device's movement in 3D world