คำถามติดแท็ก physics

เกี่ยวข้องกับการเคลื่อนที่ของวัตถุผ่านอวกาศและเวลา รวมถึงแนวคิดต่าง ๆ เช่นการเร่งความเร็ว (แรงขับและแรงโน้มถ่วง) มวลการตอบสนองการชนแรงเสียดทานและอื่น ๆ

1
แนวคิดสำหรับการจำลองน้ำแบบ 2D
ฉันกำลังมองหาอินพุตใด ๆ เกี่ยวกับการจำลองน้ำในแบบ 2 มิติเทียบกับอาร์เรย์ที่มีขนาดใหญ่กว่า (เรียกว่า) ถูกบล็อก / ไม่ถูกบล็อก (ดูจากด้านข้าง) ฉันคิดตามแนวคิดต่อไปนี้: Cell Automata ทำแบบจำลอง parralel อย่างหนาแน่นบน CPU ที่ใช้ออโตเซลล์ ด้วยกฎที่ง่ายเหมือน: หากมีเซลล์เปิดอยู่ให้เลื่อนไปด้านล่างสุดไปเลย ตรวจสอบเซลล์ซ้ายและขวาเลือกสุ่มหนึ่งจากสองและย้ายไป ข้อดี ใช้งานง่าย มีความหมาย / เสื่อมในระบบผู้เล่นหลายคน จุดด้อย อาจช้าจริง ๆ ไม่น่าเชื่อ Fluid Dynamics บน GPU ทำการประมาณคร่าวๆของพลศาสตร์ของไหลบน GPU กับพื้นผิวดังนี้: +------+-----+-----+-------+ |R |G |B |A | +------+-----+-----+-------+ |vX |vY |NULL |Density| +------+-----+-----+-------+ ข้อดี …

4
ฉันจะ จำกัด การเคลื่อนไหวของผู้เล่นลงบนพื้นผิวของวัตถุ 3 มิติโดยใช้ Unity ได้อย่างไร
ฉันพยายามที่จะสร้างเอฟเฟกต์คล้ายกับของ Mario Galaxy หรือ Geometry Wars 3 ที่ซึ่งผู้เล่นเดินไปรอบ ๆ แรงโน้มถ่วง "ดาวเคราะห์" ดูเหมือนว่าจะปรับตัวและพวกเขาจะไม่หลุดออกจากขอบของวัตถุเช่นเดียวกับแรงโน้มถ่วง ได้รับการแก้ไขในทิศทางเดียว (ที่มา: gameskinny.com ) ฉันพยายามที่จะใช้บางสิ่งที่ใกล้เคียงกับสิ่งที่ฉันกำลังมองหาโดยใช้วิธีการที่วัตถุที่ควรมีแรงดึงดูดดึงดูดวัตถุแข็งอื่น ๆ เข้าหามัน แต่ด้วยการใช้เครื่องมือฟิสิกส์ในตัวสำหรับ Unity ใช้การเคลื่อนไหวกับ AddForce และไลค์ ฉันไม่สามารถทำให้การเคลื่อนไหวรู้สึกถูกต้อง ฉันไม่สามารถให้ผู้เล่นเคลื่อนที่เร็วพอโดยที่ผู้เล่นไม่ได้เริ่มบินออกจากพื้นผิวของวัตถุและฉันไม่สามารถหาสมดุลที่เหมาะสมของแรงที่ใช้และแรงโน้มถ่วงเพื่อรองรับสิ่งนี้ การนำไปใช้ในปัจจุบันของฉันคือการปรับตัวของสิ่งที่พบที่นี่ ฉันรู้สึกว่าวิธีแก้ปัญหาอาจจะยังคงใช้ฟิสิกส์เพื่อให้ผู้เล่นลงดินบนวัตถุหากพวกเขาจะออกจากพื้นผิว แต่เมื่อผู้เล่นได้รับการต่อสายดินแล้วจะมีวิธีที่จะสแนปอินผู้เล่นไปที่พื้นผิวและปิดฟิสิกส์และ ควบคุมผู้เล่นด้วยวิธีอื่น แต่ฉันไม่แน่ใจจริงๆ ฉันควรใช้วิธีการแบบใดเพื่อสแน็ปอินผู้เล่นไปยังพื้นผิวของวัตถุ โปรดทราบว่าการแก้ปัญหาควรทำงานในพื้นที่ 3 มิติ (ตรงข้ามกับ 2D) และควรสามารถใช้งานได้โดยใช้ Unity รุ่นฟรี
16 unity  physics  control 

1
ค้นพบบนพื้นผิวดาวเคราะห์ที่ไม่เรียบ
คำถามของฉันคืออะไรจะเป็นวิธีที่ดีที่สุดในการค้นพบบนพื้นผิวดาวเคราะห์ที่ไม่เรียบ? ข้อมูลพื้นฐาน ฉันสร้างดาวเคราะห์ขึ้นจากการแมปการเคลื่อนที่ 6 ระนาบที่คาดการณ์ไว้ ตอนแรกเครื่องบินก่อตัวเป็นลูกบาศก์ก่อนที่จะถูกฉายเป็นรูปร่างทรงกลม ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะใช้ "ใบหน้าลูกบาศก์ใบหน้ากลม" เป็นกริดและใช้อัลกอริธึม A * แบบง่าย ๆ เพื่อค้นหาเส้นทางที่ดีที่สุดที่เป็นไปได้ฉันต้องการให้นำความสูงของการกระจัดกระจายมาพิจารณาด้วย ภูเขาอื่น ๆ (ฉันคิดว่านี่จะเป็นเพียงการแก้ปัญหาด้วยอัลกอริทึม A *) ข้อพิจารณาอีกอย่างหนึ่งคือฉันได้บรรลุการเคลื่อนที่ของดาวเคราะห์โดยใช้ประโยชน์จากกลไกทางฟิสิกส์ของ Unity3d ใช้แรงโน้มถ่วงเข้าหาศูนย์กลางของดาวเคราะห์ วิธีแก้ปัญหาที่เสนอของฉันจะต้องใช้การเคลื่อนไหวของตัวแทนเพื่อควบคุมฟิสิกส์แรงโน้มถ่วงโดยอิสระหรือไม่ เพื่อช่วยให้ชัดเจนขึ้นคำถามของฉันนี่คือร่างกายดาวเคราะห์ปัจจุบันของฉัน:

1
สร้างฟิสิกส์สไตล์เรโทร / NES ขึ้นใหม่ด้วยความไม่แม่นยำโดยเจตนา
พื้นหลัง: ฉันมีปัญหาในการทำให้การกระโดดโค้งถูกต้องสำหรับโปรเจ็กต์ retro platformer ของฉัน เกมดั้งเดิมมีไว้สำหรับ NES และความเร็วของผู้เล่นจะถูกเก็บไว้ในสองส่วน: หนึ่งไบต์สำหรับจำนวนเต็มและอีกส่วนสำหรับเศษส่วน Gravity ถูกเพิ่มเข้ากับความเร็ว Y ของผู้เล่นในอัตรา 0.25 / เฟรม เมื่อผู้เล่นกระโดดความเร็ว Y ของเขาถูกตั้งไว้ที่ -4.64453125 ส่วนที่เหลือของเส้นโค้งการกระโดดจะถูกปล่อยให้อยู่กับแรงโน้มถ่วง ในขณะที่ผู้เล่นเพิ่มความเร็วแนวตั้งของเขาให้เป็น 0 ในอัตรา 0.25 / เฟรม เมื่อความเร็วของผู้เล่นถึงค่าน้อยกว่าศูนย์อย่างไรก็ตามความเร็วจะเปลี่ยนไปตามรูปแบบที่แตกต่างกัน แทนที่จะลดลงเรื่อย ๆ 0.25 ทุกเฟรมมันจะเป็นไปตามรูปแบบนี้: [1.75, -0.25, -0.25, -0.25, 1.75, -0.25, -0.25, -0.25, 1.75, ...] ดูเหมือนว่าจะมีบางอย่างเกี่ยวข้องกับจำนวนเต็มล้น ข้อมูล: นี่คือดัมพ์ของข้อมูลจากต้นฉบับ มันเป็นตารางความเร็ว Jump Curve Y-Hi Y-Lo …

6
คุณจะขนานกับการจำลองแบบ 2 มิติได้อย่างไร
คุณจะตั้งโปรแกรมการจำลองแบบสองมิติได้อย่างไรในแบบที่มันสามารถใช้พลังการประมวลผลจากแหล่งต่าง ๆ (กลุ่ม, GPU) ในตัวอย่างด้านบนอนุภาคที่ไม่มีสีจะเคลื่อนที่ไปรอบ ๆ จนกว่าพวกมันจะรวมกลุ่ม (สีเหลือง) และหยุดเคลื่อนที่ ปัญหาคือเอนทิตีทั้งหมดอาจมีปฏิสัมพันธ์ซึ่งกันและกันแม้ว่าเอนทิตีในมุมซ้ายบนไม่น่าจะโต้ตอบกับสิ่งใดสิ่งหนึ่งได้ที่ด้านล่างขวา หากโดเมนถูกแบ่งออกเป็นเซ็กเมนต์ต่าง ๆ มันอาจเร็วขึ้น แต่ถ้าเอนทิตีต้องการข้ามไปยังเซ็กเมนต์อื่นอาจมีปัญหา ในขณะนี้การจำลองนี้ใช้งานได้กับ 5,000 หน่วยงานที่มีอัตราเฟรมที่ดีฉันต้องการที่จะลองกับคนนับล้านถ้าเป็นไปได้ เป็นไปได้ไหมที่จะใช้ต้นไม้รูปสี่เหลี่ยมเพื่อเพิ่มประสิทธิภาพนี้ ข้อเสนอแนะอื่น ๆ ?

4
การหลีกเลี่ยง RTS ในพื้นที่กระทำได้อย่างไร
ขณะนี้ฉันกำลังจำลองแรงกระแทกทางฟิสิกส์เพื่อหลีกเลี่ยงหน่วยในท้องที่ แต่บางครั้งวิธีนี้ผลักหน่วยออกจากการก่อตัวและมีผลกระทบที่ไม่พึงประสงค์มากเมื่อหน่วยกอเป็นก้อน สำหรับเกม RTS เช่น Starcraft 2 การหลีกเลี่ยงในพื้นที่ทำได้อย่างไร? ฟิสิกส์จำลองหรือตัวควบคุมรอบรู้ตัดสินใจในสิ่งที่ควรเป็นหรือไม่? ฉันรู้ว่าคำถามนี้อาจจะค่อนข้างกว้างดังนั้นฉันจึงถามว่าจะทำอย่างไรเพื่อให้บรรลุถึงพฤติกรรมการหลีกเลี่ยงในท้องถิ่นของ Starcraft 2; แม้ว่าสิ่งใดก็ตามที่ได้ผลจะได้รับการชื่นชมอย่างมาก ฉันไม่ได้มองหารหัสใด ๆ - แค่แหล่งข้อมูลที่มีประโยชน์หรือคำอธิบายว่า Starcraft 2 (หรือเกมที่คล้ายคลึงกัน) จัดการกับการหลีกเลี่ยงในท้องถิ่นได้อย่างไร ขณะนี้ฉันมีการตรวจจับการชน (พร้อมการสอดใส่เวกเตอร์), แรงการชนและการเคลื่อนที่โดยใช้ความเร็ว ทุกหน่วยจะถูกตรวจสอบเพื่อชนกัน - ถ้าพวกมันชนกันวัตถุจะถูกชดเชยโดยเวกเตอร์การเจาะในทันทีจากนั้นแรงปะทะจะถูกนำมาใช้ จากนั้นวงอื่นก็จะย้ายวัตถุตามความเร็วของพวกมันและใช้การลากไปที่ความเร็ว ออฟเซ็ตจะช่วยลดปัญหาการชนกันของแรงกระแทกที่มากเกินไปที่นำไปใช้กับยูนิตแบบกลุ่ม แต่บางครั้งหน่วยก็ยังยิงออกมา โซลูชันที่ฉันกำลังมองหาต้องการตอบสนองความต้องการดังต่อไปนี้ (เช่นเดียวกับ Starcraft 2): วัตถุจะไม่ทับซ้อนกัน หรืออย่างน้อยที่สุดต้องมีการทับซ้อนกันในที่สุด วัตถุไม่ได้ผลักกันมากเกินความจำเป็นเพื่อให้ 2 หน่วยสามารถยืนและเคลื่อนที่ไปข้าง ๆ กันในรูปแบบ ไม่ควรมีพฤติกรรมแปลก ๆ เมื่อวัตถุจับกลุ่มไปยังปลายทางเดียวกัน สามารถรองรับหน่วยที่มีขนาดแตกต่างกันและแม้แต่รูปร่างนูนที่แตกต่างกัน สิ่งที่ฉันคิดอยู่ตอนนี้คือแทนที่จะตรวจจับการชนตรวจหาการชนในอนาคตเพื่อให้การทับซ้อนไม่เคยเกิดขึ้น จากนั้นใช้ข้อ จำกัด ตรวจสอบให้แน่ใจว่าความเร็วของทั้งสองหน่วยไม่ทำให้พวกเขาเหลื่อมกัน ฉันยังคงแก้ไขด้วยอัลกอริทึมสำหรับ …

2
2D Planet Gravity
ฉันกำลังพยายามสร้างเกมง่ายๆที่มีการเปิดตัวยานอวกาศและจากนั้นเส้นทางจะได้รับผลกระทบจากแรงโน้มถ่วงของดาวเคราะห์ คล้ายกับเกมนี้: http://sciencenetlinks.com/interactives/gravity.html ฉันต้องการทราบวิธีการจำลองผลกระทบที่ดาวเคราะห์มีต่อยานอวกาศในเกมนี้เพื่อให้ยานอวกาศสามารถ 'วนรอบ' รอบดาวเคราะห์เพื่อเปลี่ยนทิศทาง ฉันจัดการเพื่อให้ได้ผลลัพธ์ปลอมที่ยานอวกาศวนเป็นวงรีขนาดใหญ่รอบโลกหรือได้รับผลกระทบเพียงเล็กน้อยจากแรงโน้มถ่วงของดาวเคราะห์ที่ใช้เวกเตอร์ ขอบคุณล่วงหน้า. ป.ล. ฉันมีประสบการณ์การเขียนโค้ดมากมายไม่มีส่วนเกี่ยวข้องกับเกม dev
15 2d  physics 

3
จะเริ่มใช้ฟิสิกส์รถถังได้ที่ไหน? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา พื้นหลังเล็กน้อยสำหรับตัวเอง ฉันค่อนข้างมีประสบการณ์กับเอ็นจิ้นฟิสิกส์ส่วนที่ 3 เช่น Havok, Box2D, Bullet และได้รวมเข้าด้วยกันในเอ็นจิ้นที่กำหนดเองเรียบร้อยแล้ว ฉันทำเครื่องมือฟิสิกส์อย่างง่ายโดยทำตามหนังสือที่รู้จักสองสามเล่ม ตอนนี้ฉันสนใจดำน้ำในวิชาฟิสิกส์ยานพาหนะ มีหนังสือสองเล่มที่เรียดไปยังหัวข้อ แต่อย่าพูดถึงรายละเอียดมากพอที่จะเข้าใจสิ่งที่มีประโยชน์ ดังนั้นฉันอยากรู้หนังสือที่ดี / ทรัพยากรที่ไม่หนักเกินไป (โดยที่ฉันหมายถึงหนังสือที่เป็นยานพาหนะที่บริสุทธิ์และสร้างขึ้นเพื่อวิศวกรมากกว่านักพัฒนาเกม) ที่ช่วยให้ฉันเริ่มฟิสิกส์รถถัง ที่นี่get started= อย่างน้อยแนะนำให้ฉันผ่านการสร้างยานพาหนะง่าย ๆ ในแบบ 3 มิติด้วยคุณสมบัติที่ทันสมัยที่พบในเกมส่วนใหญ่ (ช่วงล่าง / เกียร์เป็นต้น) หมายเหตุ:ฉันค้นหาคำถามที่คล้ายกัน แต่ไม่พบคำถามใด ๆ แต่ถ้ามีอยู่โปรดโพสต์ลิงก์และอย่าลังเลที่จะปิดคำถาม
15 physics  books  racing 

3
ฉันจะจัดการกับแพลตฟอร์มการย้ายในเกมแพลตฟอร์มได้อย่างไร
ฉันไม่ต้องการใช้ box2d หรืออะไรเลยฉันแค่ต้องการแพลตฟอร์มเคลื่อนที่ที่เรียบง่าย (ขึ้น - ลง, ซ้าย - ขวา, ทางขวางและทางวงกลม) คำถามของฉันคือจัดการลำดับการอัปเดต / ลำดับชั้นควบคุมเพื่อให้ผู้เล่นยังคงจับจ้องไปที่แพลตฟอร์มอย่างมั่นคงโดยไม่ต้องกระดอนหรือโยกเยก?

3
ของแข็งที่เป็นของเหลวความหนืดสูง
เพื่อนของฉันและฉันกำลังพูดคุยความคิดที่แตกต่างกันเพื่อให้วัสดุในโลกถูกทำลายในแบบทีละน้อยและเขาเสนอความคิดในการเป็นตัวแทนของของแข็งเป็นของเหลวที่มีความหนืดมาก สัญชาตญาณของฉันคือสิ่งนี้อาจเป็นได้: A) ยากมากหรือ B) ใช้ทรัพยากรมาก แต่ฉันไม่แน่ใจ โมเดลนี้เป็นไปได้สำหรับเกม RPG / ผจญภัย rpg / fps หรือไม่? แก้ไข: การทำให้กระจ่าง: แนวคิดนี้มีไว้สำหรับการชนและวัตถุที่จะถูกจัดการโดยระบบนี้ โดยทั่วไปแล้วอนุญาตให้วัตถุใด ๆ ที่จัดการด้วยวิธีนี้สามารถทำลายได้แทนที่จะมีวัตถุที่ทำลายได้ในสคริปต์

4
ฉันจะคำนวณการหมุนที่เกิดจากแรงเสียดทานแบบเด้งได้อย่างไร
ต่อจากคำถามก่อนหน้าของฉัน : ฉันมีลูกบอลค่อนข้างกระดอนจากพื้นผิวที่มันกระทบ ตอนนี้ผมต้องการที่จะให้มันหมุนจากแรงเสียดทานของการตี การแสดงนี้ง่ายพอ: ฉันหมุนลูกบอลด้วยความเร็วเชิงมุมของทุกเห็บและใช้การหมุนเดียวกันเมื่อแสดงผล เมื่อลูกบอลชนกำแพงฉันรู้ว่าความเร็วในการหมุนได้รับผลกระทบจาก ... ความเร็วเริ่มต้นของลูกบอลเมื่อกระทบพื้นผิว ค่าสัมประสิทธิ์แรงเสียดทานของลูกและพื้นผิว (คงที่ทางกายภาพ) มุมตกกระทบ (มุมระหว่างเวกเตอร์ความเร็วลูกบอลเข้าและพื้นผิวปกติ) มุมของการประมาณการณ์เป็นผลคูณของจุดของผลกระทบของลูกบอลและเวกเตอร์ความเร็วทางออก (1 หมายถึงสปินสูง -1 หมายถึงไม่สปินและทุกอย่างอื่นที่ค่อนข้างอยู่ระหว่าง) การคูณข้างต้นทั้งหมดเข้าด้วยกันและทำให้แน่ใจว่าพวกเขาถูกเปลี่ยนเป็นช่วง 0 - 1 และคูณด้วยความเร็วการหมุนสูงสุดลูกบอลดูเหมือนจะตอบสนองต่อความเร็วในการหมุนตามที่คาดไว้ ยกเว้นสิ่งหนึ่ง: มันจะหมุนนาฬิกาแบบชาญฉลาดเสมอ (เพราะมีค่าบวก) นี่เป็นวิธีที่ดีหรือไม่? คุณคิดวิธีที่ง่ายกว่านี้ได้ไหม? หากวิธีนี้ดูเหมือนดีฉันจะพลาดอะไรบ้าง ฉันจะรู้ได้อย่างไรว่าลูกบอลควรหมุนทวนเข็มนาฬิกาเมื่อใด

3
โดยทั่วไปมุมบังคับเลี้ยวสูงสุดของรถยนต์จริง
ฉันกำลังสร้างซิมรถใน Unity3D ฉันพยายามกำหนดคุณสมบัติของรถให้สมจริงที่สุดเท่าที่จะทำได้ ฉันดูเหมือนจะไม่ได้รับคำตอบที่ตรงบน Google ดังนั้นฉันจึงคิดที่จะถามที่นี่ มุมบังคับเลี้ยวสูงสุดตามปกติของรถยนต์นั่งทั่วไปคืออะไร?

5
ทำไมต้องรวมกันมากกว่าการสะสม?
ฉันเริ่มเรียนรู้วิธีการทำฟิสิกส์แบบ DIY และฉันมีคำถามเกี่ยวกับการนำการบูรณาการมาใช้ในระดับพื้นฐานที่สุด (เช่นนี่ไม่ใช่คำถามของออยเลอร์กับ RK4) เกือบทุกตัวอย่างที่ฉันเจอมีintegrate()ฟังก์ชั่นบางอย่างที่ได้รับการประทับเวลาตั้งแต่การอัปเดตครั้งล่าสุดและอัปเดตการเร่งความเร็ว (และ / หรือความเร็วและ / หรือตำแหน่ง) ตั้งแต่การอัปเดตครั้งล่าสุด ในรูปแบบที่ง่ายที่สุด: position += velocity * deltaTime แต่ผมไม่เข้าใจว่าทำไมมันสะสมเช่นนี้เมื่อมันสามารถได้อย่างง่ายดายเพียงได้รับอากาศโดยเปลี่ยนฟังก์ชั่น ตัวอย่างเช่น: getPosition = makeNewFunction()ซึ่งสามารถคืนสิ่งที่มีลายเซ็นTime -> Positionและผลงานภายในของฟังก์ชันนั้นถูกสร้างขึ้นผ่านสูตรทางคณิตศาสตร์ที่เหมาะสม ด้วยวิธีนี้ไม่มีการสะสม ... เมื่อใดก็ตามที่ต้องได้รับตำแหน่งมันจะเรียกฟังก์ชันนั้นตามเวลาปัจจุบัน การทำความเข้าใจเกี่ยวกับมือใหม่ของฉันคือการที่จะหลีกเลี่ยงข้อผิดพลาดที่เกิดจากการสะสม ... ดังนั้นทำไมมันไม่ทำงานฉันจะพลาดอะไร (fwiw ฉันได้รวบรวมหลักฐานพื้นฐานของแนวคิดของความคิดนี้ - แม้ว่ามันจะทดสอบสิ่งอื่น ๆ ในเวลาเดียวกันดังนั้นมันจึงไม่ใช่ตัวอย่างที่สะอาดที่สุด: https://github.com/dakom/ball-bounce-frp ) แก้ไข 1:ดังที่กล่าวไว้ในความคิดเห็นอาจเป็นสิ่งสำคัญที่ชี้ให้เห็นว่าฉันยังไม่ได้เรียนรู้เกี่ยวกับการเปลี่ยนการเร่งความเร็วหรือการจัดการกับกระตุกและสิ่งอื่น ๆ ที่ต้องมีการรวมลำดับสูงกว่าเร่งความเร็วคงที่ แก้ไข 2:นี่คือตัวอย่างโค้ดพื้นฐานของแนวคิดและไวยากรณ์ javascript หลอก - โปรดทราบว่าgetKinematicPositionมีการใช้งานบางส่วนดังนั้นจึงส่งคืนฟังก์ชันใหม่ในเวลาเพียง -> …

3
การตรวจจับการชนกันเป็น O เสมอ (n ^ 2)
เครื่องยนต์ฟิสิกส์สามารถลดความซับซ้อนนั้นได้หรือไม่โดยการจัดกลุ่มวัตถุที่อยู่ใกล้กันและตรวจสอบการชนภายในกลุ่มนี้แทนที่จะเทียบกับวัตถุทั้งหมดหรือไม่ (ตัวอย่างเช่นวัตถุที่อยู่ไกลสามารถลบออกจากกลุ่มโดยดูที่ความเร็วและระยะทางจากวัตถุอื่น) ถ้าไม่นั่นทำให้เกิดการปะทะกันเล็กน้อยสำหรับทรงกลม (ใน 3d) หรือดิสก์ (เป็น 2d) หรือไม่ ฉันควรสร้างวงคู่หรือสร้างอาร์เรย์ของคู่แทน? แก้ไข: สำหรับเครื่องยนต์ฟิสิกส์เช่นกระสุนและ box2d การตรวจจับการชนยังคงเป็น O (N ^ 2) หรือไม่

3
การแก้ไขการชนกับกองกำลัง
ในเอนจินฟิสิกส์ 2D ของฉันฉันสามารถตรวจจับการชน AABB กับ AABB และแก้ไขพวกมันได้โดยการหาเวกเตอร์การสอดใส่ที่สั้นที่สุดและเพิ่มลงในตำแหน่งของ AABB การทำเช่นนี้จะ "ผลัก" AABB ตัวแรกนอก AABB ตัวที่สอง แต่ไม่ได้เกี่ยวข้องกับการเปลี่ยนแปลงความเร็ว / การเร่งความเร็วเลย ถ้าฉันเพิ่มการเร่งความเร็วด้วยแรงโน้มถ่วงกับการจำลองความเร็วของไดนามิก AABB แรกยังคงเพิ่มขึ้นแม้ว่าจะวางอยู่บน AABB สถิตที่สอง ในที่สุดความเร็วจะใหญ่เกินไปและไม่สามารถตรวจพบการชนกันได้ (ไดนามิก AABB จะตกลงไปในภาพนิ่ง) ฉันพยายามตั้งค่าความเร็วเป็นศูนย์หลังจากการแก้ปัญหา แต่เห็นได้ชัดว่าใช้งานไม่ได้ดีและสร้างแบบจำลองที่ไม่สมจริง ฉันอ่านออนไลน์ที่แก้ไขการชนโดยการทำงานกับตำแหน่งด้วยตนเองหรือความเร็วไม่ถูกต้อง ฉันพยายามใช้กองกำลัง (มวลคือ "hardcoded" 1 สำหรับตอนนี้): void Body::applyForce(sf::Vector2f mForce) { acceleration += mForce; } void Body::integrate(float mFrameTime) { velocity += acceleration * …

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