Symulacja wody / oceanu i fizyka

42

Szukam referencji na temat symulacji wody i modelowania jej interakcji z ciałami (takimi jak łodzie, statki, okręty podwodne).

Znalazłem wiele odniesień do wizualnych aspektów wody (fale, odbicie itp.), Ale bardzo mało o tym, jak radzić sobie ze sposobem, w jaki powinna ona oddziaływać z ciałami. Moje doświadczenie w tworzeniu gier jest bardzo ograniczone i utknąłem tutaj.

Zasadniczo chciałbym móc zmieniać pozycję statku w zależności od fal. Jak mogę to zrobić?

Używam Panda3D, ale mam nadzieję usłyszeć o technikach i implementacjach zastosowanych w dowolnej dostępnej technologii.

Alexandre
źródło

Odpowiedzi:

79

Zasadniczo patrzysz na modelowanie 6 rzeczy dla statku: skok, ziewanie, toczenie, falowanie, kołysanie i wzrost.

alternatywny tekst

Skok, odchylenie i przechylenie to obroty, które statek może wykonywać, gdy skręca i skręca w górę iw dół zbocza fal. Podnoszenie, kołysanie i przypływ są ruchami wywołanymi przez fale popychające statek dookoła i / lub statek zsuwający się po powierzchni fali.

„Jak samochód jadący po wzgórzach ...”

Wyobraź sobie łódź na wodzie jak samochód jadący po pagórkowatym terenie. Jeśli samochód jedzie po pagórkowatych wzgórzach (jak statek płynący po falach), będzie się przechylał i przechylał w miarę jak jedzie w górę i w dół wzgórz. To jest boisko, ziewanie i przechylenie. Jeśli wzgórza (fale) są duże, samochód (statek) będzie jechał w górę i w dół, podskakując, ziewając i tocząc się. Jeśli wzgórza (fale) są naprawdę małe (mniejsze niż samochód / statek), wtedy samochód (statek) po prostu je przejedzie, a nie pochylać się, ziewać ani toczyć.

Duży statek może po prostu przedzierać się przez mniejsze fale, podczas gdy mały statek będzie poruszał się w górę iw dół fal. Biorąc przykład z naszego samochodu, wyobraź sobie, że ktoś jedzie na rowerze (mały statek) po zboczu małych wzgórz (fal). Będą się toczyć w górę i w dół, gdy idą. Potem ktoś jeździ po nich dużą ciężarówką (statkiem). Ciężarówka jest większa niż wzgórza, więc tak naprawdę nie przechyla się w górę i w dół, gdy je przejeżdża.

W przeciwieństwie do samochodu, statek jest częściowo zanurzony w wodzie, więc jego ruchy będą nieco tłumione. Wyobraź sobie samochód z naprawdę miękkimi gąbczastymi oponami. Kiedy jedzie po niewielkich wzgórzach, gąbczaste opony po prostu go wygładzają. Ruchy statku są również tłumione, więc małe fale nie powodują, że odbija się ono jak samochód na kamienistej drodze. Okręt podwodny jest swego rodzaju najbardziej zwilżonym statkiem, ponieważ zanurzony jest prawie całkowicie odporny na fale powierzchniowe. Ale jeśli jest na powierzchni, zostanie poruszony przez fale.

Statek będzie również ślizgał się na falach. Na przykład statek schodzący w dół fali przypłynie do przodu. Tak więc, aby rozszerzyć nasz przykład samochodu, uczyń go samochodem z dużymi gąbczastymi kołami poruszającymi się po nieco śliskim podłożu. O ile samochód nie uruchomi silnika w celu skompensowania poślizgu, zjedzie po zboczu wzgórza. Nawet jeśli silnik pracuje, nastąpi poślizg.

Jedynym miejscem, w którym analogia samochodu i wzgórza ma problemy, jest fakt, że fale zmieniają kształt w czasie. Statek stacjonarny będzie podskakiwał w górę iw dół, gdy fale będą rosły i opadały.

Fale poruszające się po statku

Jeśli nie ma wiatru wiejącego na statek, aby go poruszyć, a fale mają idealny kształt fali sinusoidalnej, wtedy statek w zasadzie się nie poruszy, ponieważ kołysze się na falach. Przesuwa się w jedną stronę, gdy idzie w górę fali, a następnie przesuwa się w drugą stronę, gdy schodzi w dół tylnej fali.

Jednak jeśli fale NIE są symetryczne (jak na poniższym obrazku), wówczas fale poruszą statek. Ponieważ jedna strona fali jest stroma, statek szybko zsunie się po tej twarzy, a także zostanie popchnięty przez powierzchnię fali. Delikatne nachylenie fali z tyłu nie będzie jednak miało większego ruchu.

alternatywny tekst

To nie jest najdoskonalszy model ruchu falowego i kształtu wpływającego na ruch statku, ale prawdopodobnie wystarczy na zgrubną symulację.

Wpływ wiatru

Wiatr będzie również popychał twój statek w sposób niezależny od ruchu fali lub ruchu statku. Kierunek i siła wiatru mogą być inne niż kierunek i siła fal.

Pławność

Pływalność to poziom pływalności twojego statku. Bardzo pływające statki unoszą się wysoko w wodzie, a te, które nie są pływającymi tonie. Statki neutralnie pływające (okręty podwodne) mogą w zasadzie „unosić się” w dowolnym punkcie pod wodą, nie tonąc ani nie podnosząc się. Jeśli chcesz zasymulować tonięcie statku, spraw, aby stał się on ujemnie pływający i zacznie tonąć.

Wyporność wpływa również na tłumienie ruchu statku. Statek, który jest wyjątkowo pływający, będzie się kołysał na powierzchni wody i będzie silnie uderzony przez fale. Statek, który ma mniejszą pływalność, zostanie częściowo zanurzony i nie będzie miał na niego tak dużego wpływu. Pomyśl o różnicy między piłką pingpongową unoszącą się na powierzchni a jabłkiem, który unosi się, ale jest częściowo pod wodą. Piłka pingpongowa porusza się w górę iw dół przy każdym ruchu fali. Z drugiej strony jabłko nie reaguje na każdy szczegół fali.

Capsizing

Jeśli skok, odchylenie i / lub przewrót przekroczy pewną wartość, twój statek się przewróci. Kiedy się przewróci, może napełnić się wodą, zmniejszając pływalność, przez co przestaje się unosić.

Choroba morska: o ~

Statek, który płynie równolegle do kierunku ruchu fali, jest „w korycie” i wywoła najbardziej mdłości, przynajmniej z mojego doświadczenia :) Jeśli podróżujesz w kierunku fal, możesz mieć bardzo płynna jazda - jak wiatr na plecach. Jeśli podróżujesz w przeciwnym kierunku niż fale, będziesz miał dość trudną jazdę, uderzając w każdą falę „wzgórza”, która się do ciebie zbliża. Sprawia, że ​​jazda jest naprawdę ekscytująca!

Dalsza lektura

Oto trzy artykuły dotyczące nauki, które mogą za tym pomóc. Choć ciężkie w matematyce i nauce, mogą dać ci wyobrażenie o różnych czynnikach.

Artykuł 1: Modelowanie dynamiki przechyłu statku i jego sprzężenia z falowaniem i skokiem

Artykuł 2: Modelowanie i symulacja morskiej dynamiki statku powierzchniowego

Artykuł 3: Modelowanie i symulacja morskiej dynamiki statku powierzchniowego

Autor wykonujący badania terenowe

Oto ja około 15 20 lat temu, kiedy pracowałem nad statkami badawczymi :)

alternatywny tekst

Tim Holt
źródło
13
Jak to możliwe, że wyglądasz dokładnie tak samo jak pies w swoim profilu? :-P
Notabene
lol, nie zauważyłem tego, ale ...
Tim Holt,
To przezabawne !
BlueTrin
4

Czy masz symulację wody?

Moje sugestie są

  • udawaj ze sprężynami. Każdy wierzchołek na powierzchni wody jest połączony ze sobą w siatkę sprężystą. Pociągnij jeden w dół i wszyscy zaczną oscylować. Możesz ograniczyć ruch x, z i zezwolić tylko na y (lub ruch w górę / w dół)
  • sfałszuj to, sumując fale sinusoidalne o różnych amplitudach i częstotliwościach. Coś takiego:

    rez = 32;
    for(i=-rez; i<rez; i++)
       for(j=-rez; j<rez; j++)
       {
          yofs = 0;
          yofs += 1.0 * sin( t + j*0.5 + i*0.125);
          yofs += 2.0 * sin( t + (rez-j)*0.125 + i*0.25 );
          yofs += 2.0 * sin( t + (j)*0.125 + (rez-i)*0.125 );
          yofs += 0.5 * sin( t + (rez+j)*0.125 + (rez+i)*0.125 );
          glVertex(i/rez, yofs, j/rez);
       }
    
  • symulować równanie fali 2D, może to być bardzo szybkie na GPU. Zobacz tę stronę, aby uzyskać aplet Java i trochę pseudo kodu . Sprawdź również tę wersję, taką samą, ale jeszcze prostszą. Szkic przetwarzania z kodem.

Z symulacji równania falowego można uzyskać kierunek (dx, dz) fali, w którą się przemieszcza

dx = h[x-1][z] - h[x+1][z] 
dz = h[x][z-1]- h[x][x+1] 

gdzie ha tablica 2D z wysokością fali w [x] [z]

Możesz dodać to do pozycji łodzi, aby podróżowała z falą ... Próbowałem, ale ruch staje się gwałtowny, więc wygładziłem go za pomocą prostego filtra pudełkowego 3x3 (wygładzanie różnic / prędkości dx dz)

Torbjørn
źródło