Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Jak vyzrát na gravitaci
6. září 2001, 00.00 | Často potřebujeme simulovat, něco tak samozřejmého jako je gravitace. V
tomto článku se dozvíte o různých případech, kde se gravitace používá a
jak tyto případy zapsat do programu, takže ty případy použití..
Často potřebujeme simulovat, něco tak samozřejmého jako je gravitace. V tomto článku se dozvíte o různých případech, kde se gravitace používá a jak tyto případy zapsat do programu, takže ty případy použití..
V plošinovceSnad všechny plošinovky jsou založeny na skocích a pádech, gravitace zde působý vždy přesně dolů, a tak je způsob její reprezentace triviálně jednoduchý. Např. postavičku jež hráč ovládá (dále jen panák), která se pohybuje a na kterou působí gravitace, je reprezentována souřadnicemi x a y, jeho pohyb je reprezentován vektorem zase vyjádřeným souřadnicemi nyní sx a sy.
Každý program běží v určité‚ smyčce a každým průběhem této smyčky se souřadnice panáka zvětší o vektor pohybu, samozřejmě pokud mu nebrání v pohybu nějaká překážka.
x=x+sx;
y=y+sy;
sy=sy+GRAVITY;
a zde je ta slíbená gravitace, tento řádek zvětší rychlost dolů o gravitační zrychlení (konstantu GRAVITY v rozměrech nejspíše FPS/pixel), čím je tato hodnota větší, tím je pád rychlejší a naopak. Pokud ovšem preferujete paranormální jevy nastavte GRAVITY menší nule, pak se panák rozplácne hlavou o strop, pokud nastavíte GRAVITY na 0, potom se gravitace neuplatní a platí beztížný stav. Takto vypadá:
k doplnění uvedu ještě tyto řádky, které zajišťují odpor vzduchu, bez nich se bude panákův pád pořád zrychlovat, ale takto se brzy pád ustálý. Konstanta ODPOR ovšem musí být v rozsahu 0..1.
sx=sx*ODPOR;
sy=sy*ODPOR;
Gravitaci ovšem nebudete v plošinovce aplikovat pouze na panáka, ale i na všechny
další objekty, které mohou podléhat pádu.
Složitější situace nastává, pokud gravitace
vychází z několika hmotných bodů, které‚ se ovlivňují (body jsou zadány souřadnicemi x,y a
hmotností). Musíme tedy něčím začít nejlépe rovnicí gravitace
- gravitační konstanta =
6.67.10-11 N.m2.kg-2
m1,m2 - hmotnosti dvou těles
r - vzdálenost mezi dvěma tělesy
Rovnici pro výpočet vzájemné síly máme, takže Pythagorovou větou vypočítáme
vzdálenost a dosazením do rovnice získáme sílu, kterou podle F = ma -> a
= F/m vydělíme
hmotností objektu a získáme zrychlení, které potom rozdělíme na složky ax,ay
podle rozdílů souřadnic objektů (viz obr.).
Dále přičteme ax,ay k sx,sy a máme výsledný vektor pohybu, a takhle bude vypadat konstrukce v Céčku:
|
Pokud nesimulujeme pouze 2D, ale v 3D program se v některých částech trochu změní, ale v zásadě bude skoro stejný, můžete se přesvědčit (změny jsou označeny silně):
|
Metoda gravity propočítává důsledky gravitace k objektu dalsi na svůj objekt. Pokud budete provádět simulaci v programu je třeba, aby všechny objekty působily na všechny hmotné objekty. Tyto kusy zdrojového kódu jsou spíše ilustrativní a pro použití je doporučuji dále optimalizovat a upravit pro daný příklad. Pokud neděláte zrovna vědeckou simulaci, ale zábavnou hru doporučuji třeba s rovnicí gravitace trochu za experimentovat, například nedělit vzd2, ale pouze vzd, gravitace tak bude dosahovat dále a nárůst její síly následkem přibližování bude rovnoměrnější (lineární). Na závěr přeji hodně štěstí všem, kdož spojují fyziku s programováním.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007