Моделювання води та океану та фізика


42

Я шукаю посилання на моделювання води та як моделювати її взаємодію з тілами (як човни, кораблі, підводні човни).

Я знайшов багато посилань на візуальні аспекти води (хвилі, відображення тощо), але дуже мало про те, як поводитися з тим, як вона повинна взаємодіяти з тілами. Мій досвід розвитку ігор дуже обмежений, і я дійсно застряг тут.

В основному я хотів би мати можливість змінювати положення корабля змінними відповідно до хвиль. Як я можу це зробити?

Я використовую Panda3D, але сподіваюся почути про методи та реалізації, які використовуються в будь-якій доступній технології.

Відповіді:


79

В основному ви дивитесь на моделювання 6 речей для корабля: крок, позіхання, котик, підйом, гойдання та сплеск.

alt текст

Нахил, позіхання і кочення - це обертання, які корабель може робити, коли він крутиться і повертається вгору і вниз по схилу хвиль. Підйом, гойдання та сплеск - це рухи, викликані хвилями, що штовхають корабель навколо та / або корабель, ковзаючи вниз по обличчю хвилі.

"Як машина, що їде на пагорбах ..."

Уявіть собі човен на воді, як автомобіль, що їде по горбистій землі. Якщо автомобіль рухається по пагорбах (як корабель, що переходить хвилі), він буде нахилятися і кутати, коли йде вгору і вниз по пагорбах. Це крок, позіхання та кочення. Якщо пагорби (хвилі) великі, автомобіль (корабель) буде їхати вгору і вниз, пробиваючись, позіхаючи і котячись, як їде. Якщо пагорби (хвилі) насправді невеликі (менші, ніж машина / корабель), то машина (корабель) просто збирається їхати по них і не сильно ступати, ні позіхати, ні котитися.

Великий корабель може просто орати через менші хвилі, тоді як маленький корабель буде рухатися хвилями вгору і вниз. Беручи приклад з нашого автомобіля, уявіть, що хтось їде на велосипеді (маленькому кораблі) по набору невеликих пагорбів (хвиль). Вони будуть котитися вгору і вниз, коли вони йдуть. Потім хтось їздить над ними великою вантажівкою (кораблем). Вантажівка більша за пагорби, тому насправді не піднімає вгору та вниз, оскільки вона переходить над ними.

На відміну від автомобіля, хоч корабель перебуває в дорозі у воду, тому його рухи будуть дещо затухати. Уявіть собі автомобіль із справді м'якими губчастими шинами. Коли він їде по крихітних пагорбах, губчасті шини просто згладжують його. Рухи судна також приглушені, тому маленькі хвилі не змусять його підстрибувати вгору і вниз, як машина на кам'янистій дорозі. Підводний човен - це свого роду максимально змочений корабель, тому що при зануренні він дуже сильно захищений від поверхневих хвиль. Але якщо він знаходиться на поверхні, його рухатимуть хвилями.

Корабель також ковзатиме хвилями. Наприклад, корабель, що спускається обличчям хвилі, скаже вперед. Отже, щоб розширити наш приклад для автомобілів, зробіть це автомобілем з великими губчастими колесами, що їдуть на дещо слизькій поверхні. Якщо автомобіль не працює двигуном для компенсації ковзання, він буде ковзати вниз з пагорба. Навіть якщо це працює двигун, відбудеться деяке ковзання.

Єдине місце, де виникають проблеми з аналогією автомобіля та пагорба, - це те, що хвилі змінюють форму з часом. Нерухомий корабель буде підніматися вгору і вниз, коли хвилі піднімаються вгору і вниз.

Хвилі, що рухаються на кораблі

Якщо на судні немає вітру, який би рухав його вздовж, а хвилі - це ідеальна форма синусоїди, то корабель в основному нікуди не рухатиметься, коли він хилиться у хвилях. Він ковзає в один бік, коли йде вгору по лиці хвилі, потім ковзає назад іншим шляхом, коли йде вниз по задній грані хвилі.

Однак якщо хвилі НЕ симетричні (як на малюнку нижче), то хвилі збираються рухати корабель. Оскільки одна сторона хвилі крута, корабель швидко сповзатиме вниз по цьому обличчю, а також штовхається обличчям хвилі. Однак ніжний нахил хвилі не буде мати особливого руху.

alt текст

Це не найдосконаліша модель руху хвилі та форми, що впливає на рух корабля, але, ймовірно, це буде для грубого моделювання.

Вітрові ефекти

Вітер також буде штовхати ваш корабель навколо незалежним від руху хвилі чи руху корабля. Напрямок і сила вітру можуть бути різними, ніж напрям і сила хвиль.

Плавучість

Плавучість - наскільки добре плаває ваш корабель. Дуже плавучі кораблі пливуть високо у воді, і ті, що не є плавучою раковиною. Нейтрально плаваючі кораблі (підводні човни) в основному можуть "зависати" в будь-якій точці під водою, ні тонути, ні піднімаючись. Якщо ви хочете імітувати судно, яке затонуло, зробіть його негативно плаваючим, і воно почне тонути.

Плавучість також впливає на гасіння руху судна. Корабель, який надзвичайно бурхливо розхитається на поверхні води і буде сильно впливати хвилями. Корабель, який менш плавучий, буде частково занурений і не зазнає сильного впливу. Подумайте про різницю між кулькою пінгпонга, що плаває на поверхні проти яблука, яке плаває, але частково знаходиться під водою. М'яч пінгпонг піднімається вгору і вниз при кожному русі хвилі. Яблуко з іншого боку не відповідає на кожну деталь хвилі.

Закріплення

Якщо крок, нахил та / або перекидання перевищують якусь величину, ваш корабель збирається перекинутися. Коли він перекинеться, він може заповнити воду, зменшивши плавучість, тим самим змусивши її більше не плавати.

Потрапляння до морського хворого: o ~

Корабель, який рухається паралельно напрямку руху хвилі, знаходиться "в жолобі", і буде створювати найнеприємніші ефекти, принаймні, на мій досвід :) Якщо ви подорожуєте в напрямку, коли хвилі йдуть, ви можете мати дуже плавна їзда - наче вітер у спини. Якщо ви подорожуєте в зворотному напрямку, як хвилі, ви будете мати досить різку їзду, коли ви б'єте кожну хвилю «пагорба», як це приходить на вас. Робить для досить захоплюючої їзди хоч!

Подальше читання

Ось три статті, які висвітлюють науку, що стоїть за цим, що може дати вам деяку думку. Хоча вони важкі для математики та науки, вони можуть дати вам уявлення про те, які різні фактори.

Стаття 1: Моделювання динаміки рулону суден та його з'єднання з небом і шагом

Стаття 2: Моделювання та моделювання динаміки морських поверхневих суден

Стаття 3: Моделювання та моделювання динаміки морських поверхневих суден

Автор проводить польові дослідження

Ось мені близько 15 20 років тому, коли я працював на дослідницьких кораблях :)

alt текст


13
Як можливо, ти виглядаєш точно так само, як собака у своєму профілі? :-P
Нотабене

хай я цього не помічав, але ...
Тім Холт

Це смішно !
BlueTrin

4

У вас є моделювання води?

Мої пропозиції є

  • підробляють його пружинами. Кожна вершина на водній поверхні з'єднується між собою в пружинну сітку. Потягніть одну вниз і всі вони почнуть коливатися. Ви можете обмежити рух x, z і дозволити лише y (або рух вгору / вниз)
  • підробляють це шляхом підсумовування синусоїд різної амплітуди та частоти. Щось на зразок цього:

    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);
       }
    
  • моделювати 2D хвильове рівняння, це може бути дуже швидко на GPU. На цій сторінці див. Аплет Java та деякий псевдо-код . Перевірте також цю версію, таку ж, але навіть простішу. Ескіз обробки з кодом.

З рівняння хвилі sim ви можете отримати напрямок (dx, dz) хвилі, що рухається

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

де ha 2D масив з висотою хвилі при [x] [z]

Ви можете додати це до положення човнів, щоб змусити його подорожувати хвилею ... Я спробував, але рух стає ривковим, тому я розгладив його за допомогою простого фільтра 3x3 (згладжування відмінностей / швидкостей dx dz)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.