Su / Okyanus simülasyonu ve fizik


42

Su simülasyonu ve bunun bedenlerle (tekneler, gemiler, denizaltılar gibi) etkileşiminin nasıl modelleneceğine dair bazı referanslar arıyorum.

Suyun görsel yönleri (dalgalar, yansıma vb.) Hakkında çok fazla referans buldum, ancak vücutlarla nasıl etkileşime girmesi gerektiği ile ilgili çok az şey var. Oyun geliştirme konusundaki deneyimim çok sınırlı ve gerçekten burada sıkışıp kaldım.

Temel olarak bir geminin pozisyonunu dalgalara göre değişkenlik gösterebilmek istiyorum. Bunu nasıl yapabilirim?

Panda3D kullanıyorum, ancak mevcut herhangi bir teknolojide kullanılan teknikleri ve uygulamaları duymayı umuyorum.

Yanıtlar:


79

Temel olarak, bir gemi için 6 şeyi modellemeye bakıyorsunuz: zift, yalpalama, yuvarlanma, kaldırma, sallanma ve dalgalanma.

alt metin

Pitch, yalpa ve yuvarlanma, gemi döndükçe ve dalgaların eğiminde yukarı ve aşağı dönerken dönebileceği dönüşlerdir. Kıvrılma, sallanma ve dalgalanma, gemiyi ve / veya gemiyi bir dalganın yüzüne doğru sürükleyen dalgaların neden olduğu hareketlerdir.

"Tepelerde Araba Sürmek Gibi ..."

Engebeli zeminde süren bir araba gibi suda bir tekne hayal edin. Araba, tepelerin üzerinden geçerse (dalgalar üzerinden giden bir gemi gibi), tepelerde yukarı ve aşağı inerken eğilecek ve açılacaktır. Bu perde, yaw ve roll. Tepeler (dalgalar) büyükse, araba (gemi) yukarı ve aşağı doğru hareket eder, zıplar, esner ve yuvarlanır. Eğer tepeler (dalgalar) gerçekten çok küçükse (arabadan / gemiden daha küçükse), o zaman araba (gemi) sadece üzerlerinden geçecek ve zıplayamayacak, esneyemeyecek veya fazla yuvarlanmayacaktır.

Büyük bir gemi daha küçük dalgalardan geçebilir, oysa küçük bir gemi dalgalar halinde aşağı yukarı hareket eder. Araba örneğimize bakarsak, birisinin küçük tepelerin (dalgalar) üzerinde bisiklete bindiğini (küçük gemi) düşünün. Gittikçe aşağı ve yukarı yuvarlanırlar. Sonra birisi üzerlerine büyük bir kamyon (gemi) sürüyor. Kamyon tepelerden daha büyük, bu yüzden üstünden geçerken aşağı yukarı inmiyor.

Yine de, arabanın aksine, bir gemi suyun bir parçası, bu yüzden hareketleri bir miktar nemlendirilecek. Gerçekten yumuşak süngerimsi lastikleri olan bir araba düşünün. Küçük tepelerin üzerinden geçtiğinde, süngerimsi lastikler pürüzsüz hale getirir. Bir geminin hareketleri de sönümlenir, bu yüzden küçük dalgalar kayalık bir yolda bir araba gibi aşağı ve yukarı sıçramaz. Bir denizaltı, suya daldırıldığında yüzey dalgalarına karşı oldukça bağışık olduğu gibi, nihai sönümlenmiş gemi türüdür. Ama eğer yüzeydeyse, dalgalar tarafından hareket ettirilecek.

Bir gemi dalgalar üzerinde de kayacak. Örneğin bir dalganın yüzüne inen bir gemi ileriye doğru dalgalanacaktır. Bu nedenle, araba örneğimizi genişletmek için, biraz kaygan bir yüzeye çıkan büyük süngerimsi tekerleklere sahip bir araba yapın. Araba, kaymayı telafi etmek için motoru çalıştırmıyorsa, bir tepenin yanından aşağı kayar. Motoru çalıştırsa bile, bir kayma olacak.

Otomobil ve tepe analojisinin sorun yaşadığı tek yer, dalgaların zamanla şekil değiştirmesidir. Dalgalar yukarı ve aşağı hareket ederken sabit bir gemi yükselip alçalır.

Gemiyi Taşırken Dalgalar

Eğer gemiyi ilerletmek için rüzgar esiyorsa ve dalgalar mükemmel bir sinüs dalgası şekliyse, gemi temel olarak dalgalar içinde sallandıkları yerde hareket etmeyeceklerdir. Bir dalganın yüzüne çıkarken bir şekilde kayar, daha sonra bir dalganın yüzüne doğru inerken diğer şekilde geriye doğru kayar.

Ancak, dalgalar simetrik değilse (aşağıdaki resimdeki gibi), dalgalar gemiyi hareket ettireceklerdir. Dalganın bir tarafı dik olduğu için, gemi hızlı bir şekilde aşağı doğru kayar ve dalganın yüzüne doğru itilir. Ancak, dalganın yumuşak sırt eğimi fazla hareket etmeyecektir.

alt metin

Bu, bir gemi hareketini etkileyen en mükemmel dalga hareketi ve şekil modeli değildir, ancak muhtemelen kaba bir simülasyon için yapacaktır.

Rüzgar Etkileri

Rüzgar, geminizi dalga hareketinden veya gemi hareketinden bağımsız olarak itecek. Rüzgârın yönü ve kuvveti, dalgaların yönünden ve kuvvetinden farklı olabilir.

canlılık

Yüzdürme, geminizin ne kadar iyi yüzdüğüdür. Çok yüksek yüzer gemiler suda yüksek yüzer ve yüzer yüzer olmayanlar. Tarafsız olarak süzülen gemiler (denizaltılar) temel olarak su altındaki herhangi bir noktada "batabilir", ne batacak ne de yükselecek. Batan bir gemiyi simüle etmek istiyorsanız, onu negatif bir yüzer hale getirin ve batmaya başlar.

Yüzdürme ayrıca geminin hareketinin sönmesini de etkiler. Aşırı dayanıklı olan bir gemi su yüzeyinde sallanır ve dalgalar tarafından kuvvetli bir şekilde etkilenir. Daha az kaldırma kuvvetli olan bir gemi kısmen suya batırılacak ve bundan fazla etkilenmeyecektir. Yüzeyde yüzen bir pingpong topu ile yüzen ancak kısmen su altında kalan bir elmanın arasındaki farkı düşünün. Pingpong topu her dalga hareketiyle yukarı aşağı hareket eder. Öte yandan, elma her dalga detayına cevap vermez.

alabora

Eğim, yalpalama ve / veya rulo bir değeri aşarsa, geminiz devrilecektir. Devrildiğinde, su ile doldurulabilir, yüzdürme kabiliyeti azalır, böylece daha fazla yüzmemesi sağlanır.

Deniz Hastalanması: o ~

Dalga hareketinin yönüne paralel hareket eden bir gemi “dipte” dir ve en azından benim deneyimimde en mide bulandırıcı etkileri yaratacaktır :) yumuşak sürüş - rüzgârın sırtınızda olması gibi. Dalgalar gibi ters yönde seyahat ediyorsanız, her bir dalganın "tepesine" çarparken size sert bir şekilde varacaksınız. Yine de oldukça heyecan verici bir sürüş için yapar!

Daha fazla okuma

İşte bunun arkasındaki bilimi kapsayan ve size bazı görüşler sağlayabilecek üç makale. Matematik ve fen bilimleri üzerine ağır olmasına rağmen, size farklı faktörlerin ne olduğu hakkında bir fikir verebilirler.

Madde 1: Gemi Rulo Dinamiğinin Modellenmesi ve Çekme ve Eğme ile Eşleşmesi

Madde 2: Deniz Yüzey Gemisi Dinamiğinin Modellenmesi ve Simülasyonu

Madde 3: Deniz Yüzey Gemisi Dinamiğinin Modellenmesi ve Simülasyonu

Saha Araştırması Yapan Yazar

İşte hakkında benim 15 20 yıl ben araştırma gemilerinde çalışırken önce :)

alt metin


13
Profilinizdeki köpekle tamamen aynı görünmeniz nasıl mümkün olabilir? :-P
Notabene

lol fark etmemiştim ama ...
Tim Holt

Bu komik !
BlueTrin

4

Su simülasyonunuz var mı?

Önerilerim

  • yaylar ile sahte. Su yüzeyindeki her köşe birlikte bir bahar ağına birleştirilmiştir. Birini aşağı çekin ve hepsi salınmaya başlar. X, z hareketini kısıtlayabilir ve yalnızca y (veya yukarı / aşağı hareketine) izin verebilirsiniz
  • farklı genlik ve frekanstaki sinüs dalgalarını toplayarak kandırın. Bunun gibi bir şey:

    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 dalga denklemini simüle edin, bu GPU'da çok hızlı olabilir. Bir java uygulaması ve bazı sahte kodlar için bu sayfaya bakın . Ayrıca bu sürümü kontrol edin , aynı ancak daha basit. Kod içeren bir işlem taslağı.

Dalga denkleminden, dalganın içinde hareket ettiği yönü (dx, dz) alabilirsiniz.

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

[2] 'deki dalganın yüksekliği olan 2B dizi [z] [z]

Bunu dalgalarla seyahat etmek için teknelerin konumuna ekleyebilirsiniz ... Denedim, ama hareket sarsıldı, bu yüzden 3x3'lük basit bir kutu filtre ile düzelttim (farkları / hızları dx dz)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.