Pohyb po přímce

Algoritmy Fyzikální Pohyb po přímce

Pohyb po přímceBod A je počáteční bod, na kterém se objekt nachází. Bod B je místem, kam má objekt dojít. Objekt jsem pojmenoval hero (tento obrázek jsem původně maloval pro přesunutí hrdiny v adventuře na bod označený kliknutím myši). To, čeho chceme docílit je, aby jsme získali vertikální a horizontální rychlost. Čili kolik pixelů máme přičíst k hero.x a kolik k hero.y každých několik set milisekund, aby objekt po chvíli došel na správné místo. K tomu se nám krásně nabízí Pythagorova věta. Vypočítáme přeponu pravoúhlého trojúhelníku (na obrázku strana C) a tu vydělíme rychlostí v pixelech, kterou chceme, aby se objekt pohyboval (třeba 10). Tím získáme číslo d, což značí, kolikrát se musí ona horizontální a vertikální rychlost přičíst k hero.x a hero.y, než se objekt dostane do bodu B. Pak už není nic jednoduššího, než vydělit stranu a a stranu b tímto číslem a máme obě rychlosti.

Horizontální rychlost jsem na obrázku označil e a vertikální f. Nyní jen připočítáváme v cyklu horizontální rychlost k hero.x a vertikální rychlost k hero.y a kontrolujeme, jestli už nemáme objekt na bodu B (samozřejmě, že rychlosti jsou reálná čísla a že výsledné souřadnice nebudou úplně přesné, čili musíme počítat s nějakou tolerancí).


 

  Aktivity (1)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 



 

 

Komentáře

Avatar
Michael Olšavský:

Není pro výpočetně (pro pc) jednoduší to udělat přes poměr vzdáleností? Jen mě napadlo, že výpočet pythagorovy věty trvá moc dlouho na rozdíl od základních mat. Operací. :)

 
Odpovědět  +1 25.3.2014 22:28
Avatar
coells
Redaktor
Avatar
Odpovídá na Michael Olšavský
coells:

Ano i ne.

Pokud bys chtěl dojít z A do B v čase T, pak bys jednoduše spočítal a/T a b/T a měl bys krok.
Jenže David Čápka chce spočítat pohyb z A do B při rychlosti R a k tomu už musíš použít výpočet, který uvedl.

Když to převedu do řeči lineární algebry, tak ve skutečnosti spočítá vektor směru pohybu V=B-A, ten si pak převede na normovaný vektor N=V/d(V) a vynásobí ho rychlostí R, takže dostane výslednou hodnotu N*R.

Pokud by mě zajímal pohyb v čase T, pak si spočítám vektoru pohybu V=B-A a ten vydělím T, dostanu V/T. To je jednodušší, ale nesplňuje zadání uvedené v článku.

Výpočet je opravdu správný, navíc hezky vysvětlený pomocí matematiky ze základky, aniž bys zatím musel znát lineární algebru.

 
Odpovědět 25.3.2014 23:10
Avatar
David Hynek
Redaktor
Avatar
Odpovědět 25.3.2014 23:11
Čím víc vím, tím víc věcí nevím.
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na coells
David Hynek:

ale je dobré si umět uvědomit, zda to co chceme spočítat přesně, nelze spočítat i jinak. Michal by na to šel dobře...

Odpovědět 25.3.2014 23:14
Čím víc vím, tím víc věcí nevím.
Avatar
coells
Redaktor
Avatar
Odpovídá na David Hynek
coells:

Je dobré si uvědomovat řadu věcí, ale ještě lepší je to podložit matematikou.
Jdu z A do B rychlostí R, jaká je delta(x) a delta(y) pro jeden krok?
Můžu vidět vzoreček, podle kterého by se to spočítalo jenom pomocí poměrů, případně základních operací?

 
Odpovědět 25.3.2014 23:19
Avatar
David Hynek
Redaktor
Avatar
David Hynek:

krok = (B - A)/R

a co se týká poměrů:

kx = kx + (krok * (x / y))
ky = ky + (krok * (y / x))

Editováno 25.3.2014 23:29
Odpovědět 25.3.2014 23:22
Čím víc vím, tím víc věcí nevím.
Avatar
coells
Redaktor
Avatar
Odpovídá na David Hynek
coells:
a) první příklad
A = (0,0), B = (1, 0), R = 1
krok = (B - A) / R = (1, 0) / 1 = (1, 0)
délka kroku = 1

b) druhý příklad
A = (0, 0), B = (1, 1), R = 1
krok = (B - A) / R = (1, 1) / 1 = (1, 1)
délka kroku = 1,41...

Takže pod úhlem 45 stupňů jde hrdina o 41% rychleji...

Proto mám rád matematiku :-)

 
Odpovědět  +2 25.3.2014 23:30
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na coells
David Hynek:

ano z matematického hlediska máš pravdu. Ale ty nepotřebuješ znát délku c. Pro tebe je "c" zastoupena "a" a "b". Protože stejně umístění postavy se bude zadávat v X a Y. Ale v pohodě, každý na to máme jiný pohled. Matematicky máš pravdu v tom se s tebou přít nehodlám.

Editováno 25.3.2014 23:44
Odpovědět 25.3.2014 23:41
Čím víc vím, tím víc věcí nevím.
Avatar
coells
Redaktor
Avatar
Odpovídá na David Hynek
coells:

OMG, tak ještě jednou to zkusím - tvůj vzoreček je pro POHYB V ČASE, ale pleteš si ho se vzorcem pro POHYB PO DRÁZE. Jestliže se podíváš na můj první příspěvek, najdeš v něm svůj vzorec popsaný pro zadání v čase.

A teď POZOR - jestliže se má hrdina pohybovat konstantní rychlostí bez ohledu na směr, pak délku C znát potřebuješ a musíš pohybový vektor normovat.

Jasněji už to nedokážu vysvětlit...

Pokud máš stále jiný pohled, je to naprosto v pořádku, ale aspoň přestaň mystifikovat ostatní.

 
Odpovědět 26.3.2014 0:02
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na coells
David Hynek:

v klidu... já se s tebou přeci nehádám...

Odpovědět  +1 26.3.2014 0:16
Čím víc vím, tím víc věcí nevím.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.