Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Oiling my tablet
Message
De
29/04/2013 06:35:40
 
 
À
29/04/2013 06:16:07
Information générale
Forum:
Javascript
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
01572116
Message ID:
01572126
Vues:
35
>>>>>>>Hi,
>>>>>>>
>>>>>>>Working on a web page that uses HTML5 DeviceOrientation which ties in to GeoLocation to provide 'bearing to destination'
>>>>>>>
>>>>>>>The problem I have is that most devices are very sensitive to device orientation - when I'm walking my indicator 'jitters' and because of this I want to dampen the incoming stream to provide a smoother display.
>>>>>>>
>>>>>>>I thought the obvious first step would be to maintain a buffer of x number of readings and use the average which should provide the desired result. But when the device is stationary no more input occurs and I need a way to settle on the final reading.
>>>>>>>
>>>>>>>Got a couple of approaches I might try but I'm wondering if anyone here can come up with a good algorithm..........
>>>>>>
>>>>>>If I understand what you're saying ...
>>>>>>
>>>>>>The latest reading is the correct one. Why not work with a timeout ?
>>>>>>
>>>>>>You receive one input (reading), store it - but don't display it
>>>>>>The next input overwites the previous, etc
>>>>>>When timeout
>>>>>> - if there is input, display and clear the input
>>>>>> - if there is no input, don't do anything
>>>>>
>>>>>Hmm.
>>>>>
>>>>>Firstly, although I haven't checked specifically, the readings are coming at least every 100ms (and probably quite a bit faster)
>>>>>When walking and carrying the device in what is effectively a straight line (except when returning from the pub) the readings vary by +/- ~15 degrees.
>>>>>Even if I display say every one second the latest reading is not likely to be accurate and the end result is that I'm pointed in the wrong direction for a longer period of time.
>>>>>
>>>>>I think I need to measure the number of events/sec to get a better idea on how to proceed.....
>>>>>
>>>>>Averaging over say ten readings does dampen the effect but when the device is stationary the exact (latest) reading would be preferable to the last average....
>>>>>
>>>>>FWIW this obviously isn't a JScript specific thing - a C# based solution could be adapted.
>>>>
>>>>
>>>>What happens when the device is stationary ? Do still get readings or do they stop ?
>>>>
>>>>If you prefer an average - store the readings in a stack. After a sec (or half a sec), look how many readings there are in the stack.
>>>>You may not need all the readings in the stack to calculate the average - maybe the last 5 or so and clear the rest of the stack
>>>>
>>>>As to the stationary device - if the readings keep coming - keep using the stack. But before you display anything new, compare that with the data that was displayed previously. If it's the same, don't display
>>>>
>>>>If you are stationary (and the readings keep coming), the readings will all be equal and the average will be equal to the last reading
>>>
>>>I'm pretty sure that the readings stop if the device is stationary - which is what makes it harder. I'm thinking I need only average the stack when a new GPS reading comes in (which is far less frequent) - that would avoid the need for a separate timer. Also, I'm not sure whether it's a good idea to clear the stack after taking an average. Popping the oldest and pushing the newest (i.e. always maintaining a fixed length stack) might work better.
>>
>>In that scenario - a queue is also an option
>>Enqueue the data, then
>>
>>while ( queue.Count > n )
>>       queue.Dequeue( ) ;
>>
>>
>>>
>>>I'm going to get some timings (and verify that readings stop when stationary). I'll let you know the results......
>
>Testing on a Nexus 7:
>Orientation keeps coming in when device is stationary.

That's one problem solved - the data will be the same - so an average is ok

>GPS updates occur every 20 seconds. Get about 150 orientation updates in the same period.
>But I'm nervous that I won't get the same behaviour with other devices (e.g. Ipad)
>
>AFAIK, queues and stacks in JScipt work with an array type? - just depends on pop/push or shift/unshift. But there is a Queue.js library which I haven't looked at.


> >AFAIK, queues and stacks in JScipt work with an array type?

I think so -

> But there is a Queue.js library which I haven't looked at.

had a look - it uses an array
Gregory
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform