Water Physics (Gerstner Wave)

Het forum voor overige vragen betreffende wiskunde uit het hoger onderwijs.
Plaats reactie
hellixor
Nieuw lid
Nieuw lid
Berichten: 1
Lid geworden op: 14 feb 2014, 22:00

Water Physics (Gerstner Wave)

Bericht door hellixor » 14 feb 2014, 22:20

Beste leden,

Voor school ben ik bezig met een real-time ocean shader die golven simuleert door middel van een offset in world space. Om een realistische en geloofwaardige uitkomst te behalen wil ik gebruik maken van de Grestner Wave Function uit het GPU Gems artikel van Nvidea.

Nou weet ik zeer weinig van wiskunde dus heb ik toch een paar simpele vragen (denk ik) over de Grestner formule.Afbeelding

1. Na de sommatie staat ( Qi Ai x Di.... dus Qi Ai kruisproduct Di... maar welke operand gebruik je nu tussen Qi en Ai. Zelfde geldt voor WiDi na de cosine.
2. Denk dat hier hetzelfde geld als bij 1, tussen Di.x staat een . en dit is geen dot product maar?
3. Tot slot staat de hele formule tussen ( ) gevolgd door een . in het midden, is dit een operand die geldt tussen elke sommatie? Dus de

Ow en mocht het relevant zijn Q = Steepness, A = Amplitude, D = Direction allemaal vectors

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Water Physics (Gerstner Wave)

Bericht door arie » 18 feb 2014, 11:12

Vergelijk met Equation 1:
W geeft de z-coördinaat van een golf op locatie (x, y) op tijdstip t.
Het x-y-vlak is het grondvlak = het oppervlak van je meer/vijver/zee/etc bij windstil weer,
z = W = is de hoogte van de golf, gemeten loodrecht op het x-y-vlak.

Voor elke golf is W gedefinieerd als een amplitude A * een sinus.
De hoek binnen de sinus wordt gedefinieerd als
[1] een constante phi maal tijd t, vermeerderd met
[2] een andere constante = D (x,y) w

D is de richting waarin de golf zich in het x-y-vlak voortplant, een vector.
Met

bedoelen ze het inproduct maal omega:

ofwel


Twee opmerkingen:
[1] D en omega zijn constanten, daarom zou ik dit eerder de faseconstante voor punt (x,y) genoemd hebben, en juist niet de factor waarmee je t vermenigvuldigt.
[2] mogelijk moet je D normaliseren naar lengte 1, ik heb dit zo snel niet op je pagina terug kunnen vinden,
bv: als de golf zich onder een hoek alpha voortplant, dan is

en
,
zodat



De golfformule kan je dus lezen als:



ofwel



ofwel



ofwel



De golfhoogte op plaats (x, y) op tijdstip t is dus volledig gedefinieerd door A, dx, dy, S en L.
Deze hoogte geldt per golf.
Als je meerdere golven hebt (je gooit bv 3 stenen in een spiegelgladde vijver) dan is de totale hoogte H van het water (x, y) op tijdstip t de som van alle golfhoogtes voor die x, y en t.

Dit is wat Equation 2 in het artikel zegt:



voor alle golven i, dus in geval van 3 golven:



Bij meerdere golven is de z-coördinaat van het waterniveau dus gegeven door z = H(x,y,t).

De positie P van het waterniveau op locatie (x, y) op tijdstip t kan je hiermee dus bepalen (Equation 3):



ofwel als vector geschreven:



Als je je x-y-vlak ziet als een rooster (=grid) van bv 100 x 100 punten, dan bereken je met p de waterhoogte op elk van die punten op tijdstip t.
De Gerstner functie doet hetzelfde, maar verschuift bovendien de roosterpunten (x,y) zodanig dat ze bij golfdalen wat verder uit elkaar liggen en golftoppen iets dichter bij elkaar.
Dit moet een wat natuurgetrouwer beeld geven van de golven.
De x en y in P(x,y,t) zijn nog steeds de oorspronkelijke gridpunten, maar de positie van die punten wordt wat verschoven in de beeldruimte: bij x wordt een sommatie opgeteld en bij y wordt een sommatie opgeteld (Equation 9, iets anders geformuleerd):



Voor een enkele golf wordt de verschuiving in x-richting gegeven door



en voor n golven is de totale verschuiving in x-richting weer de som van de individuele verschuivingen:



evenzo voor de verschuiving in y-richting:



resp.:



Elke punt kan je nu plotten met:
- de verschoven x-coördinaat x'
- de verschoven y-coördinaat y'
- de z-coördinaat, onveranderd z

Merk op dat als je voor elke golf Q = 0 kiest, dan is de totale sommatie ook nul en ontstaat weer de oorspronkelijke formule voor P(x,y,t) (Equation 9 wordt dan weer gelijk aan Equation 3).


Dan wat betreft je specifieke vragen:

1.

(= gewoon vermenigvuldigen van 2 getallen)


= een getal, dat je vervolgens vermenigvuldigt met (ook een getal)


= vermenigvuldigen van getallen, geen vector kruisproduct


2.

= de x-component van vector Di


3.
De formule is niet 1 grote sommatie van sommaties, maar een vector die bestaat uit 3 componenten (zie hierboven).

Plaats reactie