น้ำ / มหาสมุทรจำลองและฟิสิกส์


42

ฉันกำลังมองหาข้อมูลอ้างอิงเกี่ยวกับการจำลองน้ำและวิธีจำลองการโต้ตอบกับร่างกาย (เช่นเรือ, เรือ, เรือดำน้ำ)

ฉันพบการอ้างอิงจำนวนมากเกี่ยวกับลักษณะภาพของน้ำ (คลื่นการสะท้อน ฯลฯ ) แต่มีน้อยมากเกี่ยวกับวิธีจัดการกับวิธีที่มันควรมีปฏิสัมพันธ์กับร่างกาย ประสบการณ์ของฉันกับการพัฒนาเกมมี จำกัด มากและฉันติดอยู่ที่นี่จริงๆ

โดยพื้นฐานแล้วฉันต้องการที่จะทำให้ตำแหน่งของเรือแตกต่างกันไปตามคลื่น ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันใช้ Panda3D แต่หวังว่าจะได้รับฟังเทคนิคและการใช้งานที่ใช้ในเทคโนโลยีที่มีอยู่

คำตอบ:


79

โดยทั่วไปคุณกำลังดูการสร้างแบบจำลอง 6 อย่างสำหรับเรือ: ระดับเสียงเอียง, หมุน, ยก, แกว่งไปมาและคลื่น

ข้อความแสดงแทน

สนามหันเหและการหมุนเป็นสิ่งที่เรือสามารถหมุนได้ในขณะที่มันบิดและหมุนไปตามความลาดชันของคลื่น ยก, แกว่งไปแกว่งมาและคลื่นที่เคลื่อนไหวโดยคลื่นที่ผลักเรือไปรอบ ๆ และ / หรือเรือเลื่อนลงไปตามคลื่น

"เหมือนรถที่ขับบนเนินเขา ... "

ลองนึกภาพเรือบนผืนน้ำเหมือนรถแล่นไปบนพื้นที่เป็นเนินเขา หากรถขับไปตามเนินเขาที่กลิ้งไปมา (เช่นเรือแล่นไปตามคลื่น) มันจะเอียงและทำมุมขณะขึ้นและลง นี่คือสนามหันเหและม้วน หากเนินเขา (คลื่น) มีขนาดใหญ่รถ (เรือ) จะขับขึ้นและลง, ขว้าง, หาวและกลิ้งไปตามที่ไป หากเนินเขา (คลื่น) มีขนาดเล็กมาก (เล็กกว่ารถยนต์ / เรือ) จากนั้นรถ (เรือ) ก็แค่ขับเหนือพวกเขาและไม่ใช่ระดับเสียงสูงชันหรือม้วนมาก

เรือลำใหญ่สามารถแล่นผ่านคลื่นขนาดเล็กในขณะที่เรือลำเล็ก ๆ จะเลื่อนขึ้นและลงคลื่น ลองนึกภาพใครบางคนขี่จักรยาน (เรือเล็ก) ไปบนเนินเขาเล็ก ๆ (คลื่น) พวกเขาจะม้วนขึ้นและลงตามที่พวกเขาไป จากนั้นมีคนขับรถบรรทุกขนาดใหญ่ (เรือ) เหนือพวกเขา รถบรรทุกมีขนาดใหญ่กว่าเนินเขาดังนั้นอย่าขว้างขึ้นและลงเมื่อไปเหนือพวกเขา

ต่างจากรถแม้ว่าจะมีเรือลำหนึ่งแล่นไปในน้ำดังนั้นการเคลื่อนไหวของมันจึงค่อนข้างชื้น ลองนึกภาพรถที่มียางฟองน้ำนุ่ม ๆ เมื่อมันขับผ่านเนินเขาเล็ก ๆ ฟองน้ำก็จะเรียบออก การเคลื่อนไหวของเรือก็ถูกทำให้ชื้นด้วยเช่นกันคลื่นเล็ก ๆ น้อย ๆ จะไม่ทำให้มันเด้งขึ้นและลงเหมือนรถบนถนนหิน เรือดำน้ำเป็นหนึ่งในเรือที่อับชื้นที่สุดราวกับว่าจมอยู่ใต้น้ำมันจะรอดพ้นจากคลื่นพื้นผิว แต่ถ้ามันอยู่บนพื้นผิวมันจะถูกคลื่นเคลื่อนที่

เรือจะเลื่อนบนคลื่น เรือลำหนึ่งที่กำลังเผชิญหน้ากับคลื่นจะยกตัวอย่างเช่น ดังนั้นในการขยายตัวอย่างรถยนต์ของเราให้เป็นรถที่มีล้อฟองน้ำขนาดใหญ่ขับรถบนพื้นผิวที่ค่อนข้างลื่น เว้นแต่ว่ารถกำลังวิ่งเครื่องยนต์เพื่อชดเชยการลื่นไถลมันจะเลื่อนลงไปตามด้านข้างของเนินเขา ถึงแม้ว่ามันจะใช้เครื่องยนต์ แต่ก็ยังมีสลิปอยู่บ้าง

สถานที่แห่งหนึ่งที่รถและเนินเขาเปรียบเทียบมีปัญหาคือความจริงที่ว่าคลื่นเปลี่ยนรูปร่างเมื่อเวลาผ่านไป เรือที่อยู่กับที่จะลอยขึ้นและลงเมื่อคลื่นขึ้นและลง

คลื่นเคลื่อนย้ายเรือ

หากไม่มีลมพัดบนเรือเพื่อเคลื่อนย้ายไปตามแนวและคลื่นเป็นรูปคลื่นไซน์ที่สมบูรณ์แบบโดยทั่วไปเรือจะไม่เคลื่อนที่ไปทุกที่ตามที่บ็อบในคลื่น มันเลื่อนไปทางเดียวเมื่อมันขึ้นไปบนหน้าของคลื่นแล้วเลื่อนกลับไปทางอื่นเมื่อมันไปทางด้านหลังของคลื่น

อย่างไรก็ตามหากคลื่นนั้นไม่ได้เป็นรูปสมมาตร (เช่นภาพด้านล่าง) คลื่นก็จะเคลื่อนไปในเรือ เนื่องจากคลื่นด้านหนึ่งของคลื่นสูงชันเรือจึงเลื่อนลงไปที่ใบหน้านั้นอย่างรวดเร็วและถูกผลักไปตามหน้าคลื่น ความลาดชันด้านหลังอันนุ่มนวลของคลื่นอย่างไรก็ตามจะไม่มีการเคลื่อนไหวมากนัก

ข้อความแสดงแทน

นี่ไม่ใช่แบบจำลองการเคลื่อนที่ของคลื่นและรูปร่างที่สมบูรณ์แบบที่สุดที่มีผลต่อการเคลื่อนที่ของเรือ แต่อาจเป็นการจำลองแบบคร่าวๆ

ผลกระทบลม

ลมก็จะผลักเรือของคุณไปรอบ ๆ ในลักษณะที่เป็นอิสระจากการเคลื่อนที่ของคลื่นหรือการเคลื่อนที่ของเรือ ทิศทางและแรงลมอาจแตกต่างจากทิศทางและแรงของคลื่น

การพยุง

การลอยตัวเป็นวิธีที่เรือของคุณลอย เรือลอยน้ำมากลอยขึ้นไปในน้ำและเรือที่ไม่จม เรือลอยตัวกลาง (เรือดำน้ำ) สามารถ "ลอย" ได้ทุกที่ใต้น้ำไม่ว่าจะจมหรือลอยขึ้น หากคุณต้องการจำลองเรือที่กำลังจมทำให้มันกลายเป็นล่องลอยในทางลบและมันจะเริ่มจม

การลอยตัวยังส่งผลต่อการลดการเคลื่อนไหวของเรือด้วย เรือที่ลอยตัวมากจะลอยไปรอบ ๆ ผิวน้ำและได้รับผลกระทบอย่างรุนแรงจากคลื่น เรือที่ลอยตัวน้อยจะจมอยู่ใต้น้ำบางส่วนและไม่ได้รับผลกระทบมากนัก ลองนึกถึงความแตกต่างระหว่างลูกบอลปิงปองที่ลอยอยู่บนพื้นผิวกับแอปเปิ้ลซึ่งลอยอยู่ แต่อยู่ใต้น้ำบางส่วน ลูกบอล ping pong bobs ขึ้นและลงทุกการเคลื่อนไหวของคลื่น แอปเปิ้ลในทางกลับกันไม่ตอบสนองทุกรายละเอียดของคลื่น

ล่ม

หากระดับเสียงสูงชันและ / หรือม้วนเกินกว่าค่าบางค่าเรือของคุณจะหงายท้อง เมื่อมันผ่านไปมันอาจเติมน้ำลดการลอยตัวทำให้ไม่ลอยอีกต่อไป

รับทะเลป่วย: o ~

เรือที่เดินทางขนานไปกับทิศทางของการเคลื่อนที่ของคลื่นคือ "ในรางน้ำ" และจะสร้างเอฟเฟกต์ที่น่ารำคาญที่สุดอย่างน้อยในประสบการณ์ของฉัน :) หากคุณกำลังเดินทางไปในทิศทางที่คลื่นไป ขี่เรียบ - เหมือนมีลมที่ด้านหลังของคุณ หากคุณกำลังเดินทางไปในทิศทางตรงกันข้ามกับคลื่นคุณจะได้ขี่ม้าอย่างดุร้ายขณะที่คุณกำลังตี "เนินเขา" ของคลื่นแต่ละลูกตามที่มาพร้อมกับคุณ ทำให้การขี่น่าตื่นเต้นทีเดียว!

อ่านเพิ่มเติม

ต่อไปนี้เป็นบทความสามบทความที่ครอบคลุมวิทยาศาสตร์เบื้องหลังสิ่งนี้ซึ่งอาจทำให้คุณมีข้อมูลเชิงลึก แม้ว่าหนักในวิชาคณิตศาสตร์และวิทยาศาสตร์พวกเขาสามารถให้ความคิดของคุณในสิ่งที่แตกต่างกัน

บทความ 1: การสร้างแบบจำลองของ Dynamics Roll Ship และการเชื่อมต่อกับ Heave และ Pitch

บทความที่ 2: การ สร้างแบบจำลองและการจำลองการเคลื่อนที่ของเรือเดินทะเล

บทความ 3: การ สร้างแบบจำลองและการจำลองการเคลื่อนที่ของเรือเดินทะเล

ผู้เขียนทำการวิจัยภาคสนาม

นี่คือฉันเมื่อประมาณ15 20 ปีก่อนเมื่อฉันทำงานวิจัยเรือ :)

ข้อความแสดงแทน


13
เป็นไปได้อย่างไรที่คุณดูเหมือนกับสุนัขในโปรไฟล์ของคุณ? :-P
Notabene

ฮ่า ๆ ผมไม่ได้สังเกตเห็น แต่ ...
ทิมโฮลท์

นี่คือเฮฮา!
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);
       }
  • จำลองสมการคลื่น 2 มิติสามารถทำได้อย่างรวดเร็วบน GPU ดูหน้านี้แอปเพล็ Java และบางรหัสเทียม ตรวจสอบเวอร์ชั่นนี้เหมือนกัน แต่ง่ายกว่า ร่างการประมวลผลด้วยรหัส

จากสมการคลื่นซิมคุณจะได้รับทิศทาง (dx, dz) ของคลื่นที่กำลังเดินทางเข้ามา

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

โดยที่อาร์เรย์ฮาฮา 2 มิติพร้อมความสูงของคลื่นที่ [x] [z]

คุณสามารถเพิ่มสิ่งนี้ลงในตำแหน่งเรือเพื่อให้มันเคลื่อนที่ไปพร้อมกับคลื่น ... ฉันพยายามแล้ว แต่การเคลื่อนไหวกลายเป็นกระตุกดังนั้นฉันจึงปรับมันให้เรียบด้วยตัวกรองกล่อง 3x3 ที่เรียบง่าย (ปรับความแตกต่าง / ความเร็ว dx dz ให้เรียบ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.