iphone směru pohybu pomocí akcelerometru

hlasů
0

Chci pomoct k třídě UIAccelerometer. Chci najít nějaký způsob, jak zjistit nebo rozpoznat, když jsem se mávat iphone zařízení zprava doleva a zleva doprava. Jsem dostat x, y, z hodnoty, jakož i hodnoty intervalu. Jsem také dostat rychlost a odstup vypočítaný z normálního pravidla fyziky.

Vzdálenost = (prevDist + sqrt (pow ((Prevx - acceleration.x), 2) + pow ((prevy - acceleration.y), 2) + pow ((prevz - acceleration.z), 2)))

Rychlost = (vzdálenost * timeintercal) {zde vzdálenost znamená newdistance-prevdistance a TimeInterval k této vzdálenosti}

Když jsem v pohybu iPhone zařízení zprava doleva a pak zleva doprava Začínám celková vzdálenost traveld v obou směrech a rychlosti v pravidelných intervalech. Můžete mi pomoci, jak mohu zjistit, že jsem v pohybu zařízení iPhone zleva doprava nebo zprava doleva?

Pomoci by ocenili. Dík.

Položena 20/05/2010 v 17:27
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

Záleží na tom, jakým způsobem bude uživatel drží přístroj. Nepotřebujete rychlost nebo vzdálenost přijít na to, jakým způsobem je přístroj houpal. Místo toho můžete udržovat historii minulosti (řekněme 5) zrychlením. Za předpokladu, že zařízení je drženo normálním způsobem (na výšku, pravou stranou nahoru), měli byste použít průměr z předchozího x - zrychlení určit směr.

Takže v podstatě to, co jsem udělal, je v akcelerometru: didAccelerate událost:

//prevAccels is an NSMutableArray
float VAL = .75;
int HISTORY_NUMBER = 5;
if (accleration.x>VAL && acceleration.y>VAL){ //if there has been a sudden jerking motion
        float avgX;
        for (int i = 0; i<[prevAccels count]; i++)
        {
            UIAcceleration *a = [prevAccels objectAtIndex:i];
            avgX += a.x;
        }
        avgX /= HISTORY_NUMBER; //get the average of the previous accelerations

        BOOL flickRight = (avgX<-VAL)?YES:NO;
        //[self wave:flickRight]; //do stuff here
        }

[prevAccels addObject:acceleration]; //add the acceleration to the history
if ([prevAccels count]>HISTORY_NUMBER) [prevAccels removeObjectAtIndex:0]; //trim the list if it is too large

Naděje, která pomáhá!

Odpovězeno 25/11/2010 v 05:38
zdroj uživatelem

hlasů
1

Za prvé, máte několik chyb fyziky. Váš distancenení ‚vzdálenost‘ proměnná, protože jste jako součet hodnoty zrychlení z akcelerometru. Také vaše velocityje vlastně ‚rychlost‘ proměnná, protože jste se množí zrychlení časovým intervalem.

To, co opravdu chcete udělat, je sledovat acceleration.x za hodnoty, které přesahují určitou předem stanovenou velikost. Tato velikost by měla být dostatečně nízká, že uživatel nemusí swing violenty iPhone, ale dostatečně vysoká, aby jednoduché pohyby nebude překračovat práh. Pokud acceleration.x je větší než 0 vaší předem stanovenou prahovou hodnotu, nebo více, pak se zrychluje pravdu. Pokud acceleration.y je nižší než 0 vaší předem určené množství nebo vyšší, pak se zrychlují odešel.

Je to mnohem těžší určit rychlost telefonu v průběhu času, protože budete muset integrovat hodnoty zrychlení nepřetržitě. IPhone akcelerometr není neuvěřitelně přesné a může být hlučné, takže po malé době vaše žádost bude zřejmě přesvědčeni, telefon driftování v náhodných směrech. Také si uvědomte, že gravitace bude vždy objeví ve vašich hodnot zrychlení.

Odpovězeno 20/05/2010 v 18:10
zdroj uživatelem

hlasů
0

Jedna věc je mít na paměti, že gravitace je vždy ovlivňuje zrychlení, takže je třeba vzít v úvahu. Bohužel, nemůžete počítat s přímými metodami dopředu počítat vzdálenosti a skutečné rychlosti v důsledku nevěděl, v každém okamžiku, kdy „dole“ je.

Na vědomí, že při „houpačka vlevo“ nebo „houpačka správné“ se stane, také za to, že pohyb je pravděpodobné, že bude v oblouku, a budete mít opačný akceleraci, když kyvné zastaví. Chcete-li vědět, že kývání je v plném proudu, podívejte se na „out“ vektoru zrychlení, například ten, který ukazuje směrem od středu otáčení. Pomocí které lze rozlišovat mezi „rozjede“ stavu a „zastavit pohybující se stát“, který jinak bude mít stejné, ale-opak hodnoty zrychlení.

Odpovězeno 20/05/2010 v 18:16
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more