[Robienie fali]

0

Czesc!
Mam taki klopot:
Od kilku dni probuje zrobic program ktory moglby przdstawiac fale na wodzie, oczywiscie to wszystko oparte o tablice 2-wymiarowe, znalazlem arty na gamedev na ten temat, ale jest taki klopot ze nie bardzo mi dzialaja te algorytmy, tz. wartosc komórek za bardzo się zwieksza lub zmniejsza . I w ogóle jakos mi to badziewnie wychodzi. Wiec jezeli ktos robil takie rzeczy prosilbym z grubsza wytlumaczyc o co chodzi i jak to mozna zrobic.

0

Kwestia implementacji ;-P
Zrobiłeś to dobrze? Nie działa - to chyba nie...

0

Tak sie składa że akurat robiłem o tym Prace Przejściową. Jest to zagadnienie dosyć skomplikowane, a mi zajęło 5000 lini kodu. Poczytaj jak najwięcej o równaniu falowym. Najważniejszy fragment mojego programu to:

 
//Predkosc
            for (i = 1; i < mRx; i++)
                for (j = 1; j < mRy; j++)
                {                
                    V[i, j] += A * (U[i + 1, j] + U[i - 1, j] + U[i, j + 1]
                       + U[i, j - 1] - 4 * U[i, j]);                   
                }

//Polozenie
            for (i = 1; i < mRx; i++)
                for (j = 1; j < mRy; j++)
                {
                    U[i, j] += V[i, j] * dt;      
                 }

gdzie
A = v * v * dt / dx / dx;

v - prędkość rozchodzenia się fali
dt - chwila czasu
dx - stopień dyskretyzacji

To jest tylko jedno z wielu rozwiązań równania falowego. Funkcja U[i,j] to funkcja wychyleń dla każdego wierzchołka siatki, przedstawiającej powierzchnię wody. Aby program działał prawidłowo trzeba też ustalić warunki początkowe i brzegowe. Możesz o nich poczytać na necie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1