Simulasi Air / Laut dan fisika


42

Saya mencari beberapa referensi tentang simulasi air, dan bagaimana memodelkan interaksinya dengan tubuh (seperti kapal, kapal, kapal selam).

Saya telah menemukan banyak referensi tentang aspek visual air (gelombang, refleksi, dll), tetapi sangat sedikit tentang bagaimana berurusan dengan cara seharusnya berinteraksi dengan tubuh. Pengalaman saya dengan pengembangan game sangat terbatas, dan saya benar-benar terjebak di sini.

Pada dasarnya saya ingin dapat membuat posisi kapal yang bervariasi sesuai dengan ombaknya. Bagaimana saya bisa melakukan ini?

Saya menggunakan Panda3D, tetapi berharap untuk mendengar tentang teknik dan implementasi yang digunakan dalam teknologi apa pun yang tersedia.

Jawaban:


79

Pada dasarnya Anda melihat pemodelan 6 hal untuk kapal: pitch, yaw, roll, heave, sway dan surge.

teks alternatif

Pitch, yaw and roll adalah rotasi yang dapat dibuat kapal saat berputar dan berputar naik dan turun di lereng ombak. Heave, sway, dan surge adalah gerakan yang disebabkan oleh gelombang yang mendorong kapal di sekitar dan / atau kapal yang meluncur ke bawah muka gelombang.

"Seperti Mobil Mengemudi di Bukit ..."

Bayangkan sebuah perahu di atas air seperti mobil yang mengemudi di atas tanah berbukit. Jika mobil melaju di atas perbukitan (seperti kapal yang melewati ombak), ia akan miring dan miring saat naik turun bukit. Ini nada, yaw and roll. Jika bukit (ombak) besar, mobil (kapal) akan naik dan turun, melempar, menguap, dan berguling saat berjalan. Jika bukit (ombak) benar-benar kecil (lebih kecil dari mobil / kapal), maka mobil (kapal) hanya akan melaju di atasnya dan tidak melempar, menguap atau berguling-guling.

Sebuah kapal besar hanya bisa membajak melalui gelombang yang lebih kecil, sedangkan kapal kecil akan bergerak naik turun gelombang. Mengambil contoh mobil kami, bayangkan seseorang mengendarai sepeda (kapal kecil) melewati serangkaian bukit kecil (ombak). Mereka akan menggulung ke atas dan ke bawah saat mereka pergi. Kemudian seseorang mengendarai truk besar (kapal) di atasnya. Truk itu lebih besar dari bukit, jadi tidak benar-benar naik turun saat melewati mereka.

Tidak seperti mobil, kapal adalah bagian dari air, jadi pergerakannya akan sedikit berkurang. Bayangkan sebuah mobil dengan ban sepon yang sangat lembut. Ketika melaju melewati bukit kecil, ban sepon itu melicinkannya. Pergerakan kapal juga dibasahi, sehingga ombak kecil tidak akan membuatnya melambung naik turun seperti mobil di jalan berbatu. Kapal selam adalah jenis kapal yang paling lembab, karena ketika tenggelam itu cukup kebal terhadap gelombang permukaan. Tetapi jika itu di permukaan itu akan digerakkan oleh ombak.

Sebuah kapal juga akan meluncur di atas ombak. Sebuah kapal yang turun di permukaan gelombang akan melonjak ke depan misalnya. Jadi untuk memperluas contoh mobil kami, buatlah mobil dengan roda spon besar yang mengemudi di permukaan yang agak licin. Kecuali mobil menjalankan mesin untuk mengkompensasi slip, itu akan meluncur ke sisi bukit. Bahkan jika itu menjalankan mesin, akan ada beberapa slip.

Satu tempat di mana analogi mobil dan bukit memiliki masalah adalah kenyataan bahwa ombak berubah bentuk seiring waktu. Kapal yang tidak bergerak akan naik turun saat ombak naik dan turun.

Gelombang Memindahkan Kapal

Jika tidak ada angin yang bertiup di kapal untuk menggerakkannya, dan ombaknya adalah bentuk gelombang sinus yang sempurna, maka kapal itu pada dasarnya tidak akan bergerak ke mana pun karena bobs di ombak. Ini meluncur satu arah saat naik ke atas muka gelombang, kemudian meluncur kembali ke arah lain saat turun ke wajah belakang gelombang.

Namun jika ombak TIDAK simetris (seperti gambar di bawah), maka ombak akan menggerakkan kapal. Karena satu sisi gelombang curam, kapal akan meluncur cepat ke bawah wajah itu dan juga didorong oleh wajah gelombang. Namun kemiringan punggung gelombang yang lembut tidak akan memiliki banyak gerakan.

teks alternatif

Ini bukan model gerakan gelombang dan bentuk yang paling sempurna yang mempengaruhi gerakan kapal, tetapi mungkin akan dilakukan untuk simulasi kasar.

Efek Angin

Angin juga akan mendorong kapal Anda dengan cara yang tidak tergantung pada gerakan gelombang atau gerakan kapal. Arah dan kekuatan angin bisa berbeda dari arah dan kekuatan gelombang.

Daya apung

Daya apung adalah seberapa baik kapal Anda mengapung. Kapal yang sangat apung mengapung tinggi di air, dan yang tidak tenggelam tenggelam. Kapal-kapal apung yang netral (kapal selam) pada dasarnya dapat "melayang" pada titik apa pun di bawah air, tidak tenggelam atau naik. Jika Anda ingin mensimulasikan tenggelamnya sebuah kapal, buat kapal itu menjadi ringan dan akan mulai tenggelam.

Daya apung juga mempengaruhi berkurangnya gerakan kapal. Sebuah kapal yang sangat apung akan meliuk-liuk di permukaan air dan sangat terpengaruh oleh gelombang. Sebuah kapal yang kurang apung akan terendam sebagian dan tidak akan terlalu terpengaruh. Pikirkan perbedaan antara bola pingpong yang melayang di permukaan versus sebuah apel, yang mengapung tetapi sebagian di bawah air. Bola pingpong tersentak naik dan turun dengan setiap gerakan gelombang. Apel di sisi lain tidak menanggapi setiap detail gelombang.

Terbalik

Jika pitch, yaw dan / atau roll melebihi beberapa nilai, kapal Anda akan terbalik. Ketika itu berakhir, itu mungkin mengisi dengan air, mengurangi daya apung, sehingga membuatnya tidak melayang lagi.

Getting Sea Sick: o ~

Sebuah kapal yang bergerak sejajar dengan arah gerakan gelombang adalah "di palung", dan akan menghasilkan efek paling memuakkan setidaknya dalam pengalaman saya :) Jika Anda bepergian ke arah gelombang, Anda dapat memiliki perjalanan lancar - seperti memiliki angin di belakang Anda. Jika Anda bepergian dalam arah yang berlawanan dengan ombak, Anda akan memiliki perjalanan yang cukup keras karena Anda memukul setiap "bukit" ombak saat datang pada Anda. Membuat perjalanan yang cukup menarik!

Bacaan lebih lanjut

Berikut adalah tiga artikel yang membahas ilmu di balik ini, yang mungkin memberi Anda beberapa wawasan. Meskipun berat dalam matematika dan sains, mereka dapat memberi Anda gambaran tentang apa faktor-faktor yang berbeda.

Artikel 1: Pemodelan Dinamika Gulungan Kapal dan Koplingnya dengan Heave dan Pitch

Pasal 2: Pemodelan dan Simulasi Dinamika Kapal Laut

Pasal 3: Pemodelan dan Simulasi Dinamika Kapal Laut

Penulis Melakukan Penelitian Lapangan

Inilah saya sekitar 15 20 tahun yang lalu ketika saya bekerja di kapal penelitian :)

teks alternatif


13
Bagaimana mungkin Anda terlihat persis sama dengan anjing di profil Anda? :-P
Notabene

lol saya tidak memperhatikan itu tetapi ...
Tim Holt

Ini sangat lucu !
BlueTrin

4

Apakah Anda memiliki simulasi air?

Saran saya adalah

  • berpura-pura dengan mata air. Setiap dhuwur pada permukaan air digabungkan bersama menjadi jala pegas. Tarik satu ke bawah dan mereka semua mulai berosilasi. Anda dapat membatasi gerak x, z dan hanya mengizinkan y (atau gerakan naik / turun)
  • berpura-pura dengan menjumlahkan gelombang sin dari berbagai amplitudo dan frekuensi. Sesuatu seperti ini:

    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);
       }
    
  • mensimulasikan persamaan gelombang 2D, ini bisa sangat cepat pada GPU. Lihat halaman ini untuk applet java dan beberapa kode semu . Periksa juga versi ini, sama tetapi bahkan lebih sederhana. Sketsa pemrosesan dengan kode.

Dari persamaan persamaan gelombang, Anda bisa mendapatkan arah (dx, dz) dari gelombang yang bergerak masuk

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

di mana ha 2D array dengan ketinggian gelombang di [x] [z]

Anda dapat menambahkan ini ke posisi kapal untuk melakukan perjalanan dengan gelombang ... Saya sudah mencoba, tetapi gerakan menjadi tersentak-sentak, jadi saya merapikannya dengan filter kotak 3x3 sederhana (menghaluskan perbedaan / kecepatan dx dz)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.