Pro reprezentaci kapaliny byl použit částicový systém. Jde vlastně o to, že kapalina je nahrazena jakýmisi makromolekulami. V následujícím textu jim budeme říkat familiárně kapky.
U každé kapky se uchovávají tyto informace: poloha, rychlost a hmotnost.
Makromolekuly se pak pohybují v diskrétních krocích. Pravidla, podle nichž se určí následující stav celého systému, jsou dána použitým matematickým modelem.
Částicový systém se jeví přirozený pro reprezentaci tryskající kapaliny, i když jsou možné i jiné přístupy.
Každá kapka v průběhu simulace projde jistým vývojem. Nejprve je vytvořena v místě ústí trysky.
Poté je s ní pohybováno na základě použitého matematického modelu. Při použití některých modelů se kapka může rozpadnout na více kapek, či více kapek se může slít v jednu větší.
Pokud kapka narazí na vodní hladinu, její ``život'' tímto končí.
Gravitační model je prostým vyjádřením faktu, že celá simulace probíhá v gravitačním poli. K určení polohy a rychlosti je použita Eulerova metoda:
kde
s je nová poloha,
v je nová rychlost,
s0 je původní poloha,
v0 je původní rychlost,
g je tíhové zrychlení (0, -9.8, 0)
,
t časový krok.
V každém kroku simulace se tyto vztahy aplikují na každou kapku.
V předcházejícím modelu se nebralo do úvahy žádné vzájemné působení ani vzájemná poloha kapek. Kapalina je za normálních okolností těžko stlačitelná.
Tento model se to snaží řešit velice jednoduchým způsobem.
Řekněme, že kapky vyžadují určitý odstup. Pokud jsou
blíže než daný odstup, snaží se druhou kapku ``odstrčit''
do příslušné vzdálenosti. Získáme tedy ``odstrčenou'' polohu kapky.
Pokud je konfliktních kapek více, výslednou polohu kapky dostaneme
aritmetickým průměrem všech ``odstrčených'' poloh.
kde
Dk,od je minimální distance(odstup) kapek k a od ,
sod je nová poloha kapky,
s0 je původní poloha kapky,
k jsou kapky které jsou blíže než Dk,od
n je jejich počet,
sk je původní poloha kapky,
norm() normalizace vektoru na jednotkový vektor.
Distance Di,j se určí dle vztahu:
kde
ri, rj jsou poloměry kapek i a j.
K je konstanta určená experimentálně a dá se zadat
jako parametr scénáře. Dobré výsledky jsou s hodnotami něco pod
1. Vyjadřuje vlastně, jak moc dovolíme kapkám se překrývat.
Předcházející přístup má několik modifikací a pokusných vylepšení. Jedním z nich je model silového odstrkování.
Myšlenka je taková, že nezměníme přímo polohu kapky, ale udělíme jí zrychlení, které ji ``odstrčí'' do příslušných mezí.
Jelikož simulace je dosti hrubá, nevyplatí se fyzikální molekulový přístup, neboť kapky se mohou celkem ``beztrestně'' dostat do velké blízkosti, kam by se ve spojitém případě nikdy nedostaly, protože odpudivá síla blízkých molekul je velmi velká. Pokud se kapky dostanou skokem takto blízko, jsou pak v souladu s fyzikálními zákony ``katapultovány'' velkou silou od sebe.
Proto bylo vhodné použít nějaký umírněnější model než fyzikální. Tento vychází z modelu hrubého odstrkování kapek. Místo odsunutí kapky na vzdálenější místo je kapce uděleno zrychlení, které by ji na toto místo dostalo z klidu za časovou délku kroku simulace.
Z uděleného zrychlení se v následujícím kroku spočítá nová poloha a nová rychlost.
Zrychlení udělené kapce je tedy:
kde
aod je udělené zrychlení,
sod je ``odstrčená'' poloha dle modelu hrubého odstrkování,
Δtod je časová délka kroku.
Dalším přístupem poněkud z jiné strany je dynamické zjemňování počtu částic.
Zde je použito velmi jednoduché pravidlo: pokud dosti daleko od kapky není žádná jiná kapka, rozděl ji na několik menších.
Toto jednoduché pravidlo má několik nejasných míst. Jedno z nich je ``dosti daleko''. Tedy jak určit vzálenost, kdy je kapka ``vhodná'' pro rozdělení. V našem případě bylo použito toto pravidlo: kapka se rozdělí, pokud žádná z ostatních kapek není blíže než volitelná konstanta. Tato konstanta je řádově centimetry.
Další problém je, jakým způsobem kapku rozdělit. Je zde opět mnoho možností.
Jednou z nich je kapku nahradit čtyřmi kapkami stejného poloměru, jejichž středy jsou ve vrcholech pravidelného čtyřstěnu. Základna je ve směru rychlosti kapky. Poloměry kapek jsou voleny tak, aby souhrnný objem kapek byl zhruba stejný jako objem původní kapky. Tj: r= &sqrt;(4)R, kde r je nový poloměr kapky, R je poloměr původní kapky.
Polohy středů jsou:
kde
dist je vzdálenost středů nových kapek.
Vztažná soustava je volena tak, aby osa x splývala s vektorem rychlosti původní kapky.
dist= vnor (r/2). Kde vnor je konstanta, vyjadřující jak moc chceme, aby se nové kapky překrývaly. Pro hodnotu vnor=1 se kapky budou dotýkat. Pro hodnoty nižší se budou kapky prolínat.
Další možnost dělení kapky je motivována tím, aby tvar kapek po dělení alespoň vzdáleně přípomínal letící kapku. Vzniknou čtyři větší kapky s poloměrem r=(1/2)(&sqrt;(3) - 1) 3 R) a dvě menší kapky s poloměry r4=(1/6)(&sqrt;(3) + 1)r a r6=(1/2). Středy budou mít následující souřadnice:
Malé kapky pak:
Proč byly polměry a polohy středů zvoleny takto, je snad celkem zřejmé když se podíváme na obrázek č. 3.
Také je vhodné zajistit, aby příliš malé kapky nebyly dále děleny. Přičemž ``příliš malé'' bylo zvoleno řádově desetiny milimetru. I když obavy z ``přemnožení'' kapek jsou celkem neopodstatněné, protože kapky vzniklé touto metodou se drží celkem pospolu.
Kapky vznikají v trysce. Generují se na počátku každého kroku simulace.
Tryska v určitém časovém okamžiku je zadaná těmito parametry:
Poloha s,
směr p (normalizovaný),
rychlost vytékání kapaliny na počátku kroku v0,
rychlost vytékání kapaliny na konci kroku vT,
poloměr R,
rozptyl ro,
tření trysky.
Mimo parametry trysky záleží generování kapek na hustotě kapek ρ.
Navíc si označme průřez trysky P (= π r2). A pro přehlednost Δv=vT - v0.
Objem kapaliny, která proteče v časovém intervalu <0,t> tryskou: Rychlost kapaliny byla lineárně interpolovaná mezi krajními hodnotami tedy v(t)=v0 + Δv (t/T).
Pozn: správně bychom měli počítat s S(t), ale přepokládejme, že se průměr trysky nemění.
Speciálně pro t = T:
Počet vygenerovaných kapek, pak bude
Poloha kapky je zvolena přirozeným způsobem: náhodný bod z průměru trysky.
Rychlost kapky
kde ro rozptyl trysky, randk() je náhodný vektor z jednotkové koule, vs je střední rychlost kapaliny ve vzdálenost r od osy trysky.
Závislost střední rychlosti na vzdálenosti od osy trysky je:
kde v je střední rychlost v ose trysky. R je poloměr průřezu trysky.
Každé kapce přiřadíme čas, po který se od počátku kroku ``jako'' pohybovala. Je třeba vygenerovat náhodný čas t (tk v intervalu <0,T> s distribuční funkcí V(t). (funkce randf() vrací náhodné číslo <0, 1> s normální distribucí).
Pro tento čas musí platit:
a dosazením a zkrácením S:
vyjádříme t:
Toto je čas, po který se právě vygenerovaná kapka bude pohybovat jaksi mimo simulaci (za použití pouze gravitačního modelu).
Kapky zanikají, pokud dopadnou na tzv. pohlcovací plochu. Přičemž kapka ``dopadne'' právě když spojnice polohy kapky s polohou v předcházejícím kroku simulace se s pohlcovací plochou protíná.
Kapka pak bez jakéhokoli následku pro okolí zmizí.
Po dopadu vody na vodní hladinu se tvoří vlny. To lze reprezentovat tak, že každá kapka vytvoří zdroj vlnění, který pak přispívá k výchylce v každém bodě hladiny.
Výchylka v konkrétním bodě hladiny pak je:
kde z jsou všechny zdroje,
t je současný čas,
tz je čas vzniku zdroje z,
dz je vzdálenost od zdroje z,
yz je amplituda zdroje.
f frekvence vlnění.
λ vlnová délka,
u vzdálenostní útlumová konstanta
(kolikanásobně se zmenší amplituda na 1m),
v časová útlumová konstanta
(kolikanásobně se zmenší amplituda za 1s),
δ(dz,tz)
je 0 pokud dz < (λ tz/p)
1 jinak.
Tato rovnice je pouhým optickým přiblížením skutečnosti a nedělá si právo na nějakou hlubší fyzikální opodstatněnost.
Konstanty byly určeny odhadem a pozorováním skutečné hladiny.
Jednoduchou úpravou tohoto výrazu můžeme separovat od sebe složku závislou na čase a složku závislou na zdroji. V jednom místě hladiny si stačí pamatovat dvě čísla (``sinovou'' a ``cosinovou'' složku). Přidání dalšího zdroje pouze tyto složky upraví. Nemusíme tedy v každém časovém okamžiku procházet všechny zdoje vlnění.
kde
αz = 2 π t f je závislé pouze na čase t,
βz = 2 π ( (dz/λ) + tz f) je závislé pouze na zdroji z.
Pro pevně zvolený bod vodní plochy pak je suma konstantou, což výrazně urychlí počítání výchylky v tomto bodě.
Nové zdroje pouze přispějí každému bodu do jeho ``sinové'' a ``cosinové'' složky. Je třeba však mít na paměti, že vlnění se šíří od zdoje konečnou rychlostí, a proto není možné započítat tyto složky okamžitě při vzniku vlnění pro všechny body plochy, ale započítávat je tak, jak se vlnění postupně šíří.
Toto je další vlastnost (podobně jako vlnky na vodní hladině), která se samotným zobrazením tryskající kapaliny nemá mnoho společného a byla přidaná pouze pro ``přirozenější'' vzezření výsledku.
U skutečné fontány (pokud je vyšší vlhkost vzduchu) dochází k vytvoření vodní mlhy. V našem případě je mlha reprezentována následovně.
Celý prostor je rozdělen na malé ``buňky'' (krychličky o velikosti řádově mm3). Každá buňka má určitou vlhkost. Pokud buňkou proletí kapka, její vlhkost se zvýší na maximum. Pak tato vlhkost s postupem času klesá.
Díky jednoduchosti implementace byl přidán i vliv větru. Jde vlastně pouze o to, že vlhkost se distribuuje do okolních buněk v poměrech daných rychlostí a směrem větru.