ฉันกำลังคิดที่จะสร้างเกมแลนเดอร์ที่ซึ่งคุณสามารถควบคุมยานอวกาศและต้องลงจอดโดยไม่ชน สูตรง่าย ๆ ในการคำนวณความเร็วของการตกลงหรือการเร่งด้วยความสัมพันธ์กับเวลาทำงานของเครื่องยนต์เป็นช่วงเวลาคืออะไร?
ฉันกำลังคิดที่จะสร้างเกมแลนเดอร์ที่ซึ่งคุณสามารถควบคุมยานอวกาศและต้องลงจอดโดยไม่ชน สูตรง่าย ๆ ในการคำนวณความเร็วของการตกลงหรือการเร่งด้วยความสัมพันธ์กับเวลาทำงานของเครื่องยนต์เป็นช่วงเวลาคืออะไร?
คำตอบ:
วิธีที่ง่ายที่สุดคือการรวมออยเลอร์ คุณต้องเก็บตำแหน่งเวกเตอร์และเวกเตอร์ความเร็ว ในแต่ละเฟรม:
( xสำหรับสเกลาร์, Xสำหรับเวกเตอร์)
ต้องแน่ใจว่าdtนั้นเล็ก ...
| G | ประมาณ 9.8 m / s²สำหรับโลกและประมาณ 1.6 m / s²สำหรับดวงจันทร์
โดยทั่วไปแรงการกระทำเนื่องจากปฏิกิริยาแรงโน้มถ่วงคือ:
มันมีผลต่อร่างกายแต่ละคนและมันชี้ไปทางอื่น
Gเกลาเป็นที่มีชื่อเสียงมากคงที่แรงโน้มถ่วงมันเป็นเรื่องเกี่ยว 6.67e-011 N (m / Kg) ²
เนื่องจากคุณมีความสนใจในการเร่งความเร็ว:
คุณจำเป็นต้องรู้มวลของโลก (m2) และรัศมี (r) เพื่อคำนวณความเร่งของคุณ
โดยทั่วไปการเร่งความเร็วที่เคลื่อนดาวเคราะห์ไปสู่ยานอวกาศของคุณนั้นเล็กน้อยมากเพราะโดยทั่วไป m1 นั้นเล็กน้อยมากเมื่อเทียบกับ m2
อย่างไรก็ตามถ้าคุณพยายามที่จะลงจอดบนดาวเคราะห์น้อยขนาดเล็กคุณอาจต้องใช้สูตรทั่วไปที่เพิ่มแรงนั้นให้กับเวกเตอร์แรงรวมในขั้นตอนที่สอง
แก้ไข:
จำเป็นต้องมีคำใบ้บางอย่างเกี่ยวกับการใช้งาน คุณจะต้องการ:
แรกของไลบรารีเวกเตอร์ทั้งหมด: เกมของคุณสามารถเป็นแบบโมโน / ทวิ / ต้นไม้ / สี่ ... ได้เล็กน้อยเท่าที่คุณคิดว่ากรณีของคุณเป็นการฉายภาพของคำ 3 มิติเราเตอร์ทางกายภาพถือ
หาก n คือส่วนข้อมูลที่คุณเลือก (อาจเป็น 2 หรือ 3 ในกรณีของคุณ) ไลบรารีต้องมี:
คุณสามารถใช้ห้องสมุดที่ทำสิ่งนี้หรือนำไปใช้ด้วยตัวเอง เวกเตอร์สามารถเป็นแบบโครงสร้างหรือคลาสก็ได้
แต่ละเครื่องยนต์ควรอธิบายโดย:
การป้อนข้อมูลผู้ใช้ของคุณจะถูกใช้เพื่อให้หมายเลขเครื่องยนต์ที่จะอยู่ระหว่าง 0 (เครื่องยนต์ที่ไม่ได้ใช้) และ 1 (กำลังไฟเต็ม): ปัจจัยเครื่องยนต์ (การใช้งาน)
ทวีคูณตัวคูณเครื่องยนต์สำหรับเว็กเตอร์แรงขับเพื่อรับความไว้วางใจที่แท้จริงของเครื่องยนต์และสรุปผลทั้งหมดของเครื่องยนต์ที่มีอยู่ทั้งหมด นี่จะให้Fของขั้นตอนที่สอง
ปัจจัยเครื่องยนต์ของคุณสามารถใช้รู้การใช้เชื้อเพลิงจริงสำหรับแต่ละเครื่องยนต์: คูณปัจจัยเครื่องยนต์ด้วยการใช้เชื้อเพลิงและโดยdtเพื่อทราบการใช้น้ำมันเชื้อเพลิงทันที คุณสามารถย่อค่านี้ได้จากตัวแปรความจุเชื้อเพลิงทั้งหมด (ซึ่งจะทำให้คุณมีโอกาสอัปเดตมวลรวมของคุณmหากมวลเชื้อเพลิงมีจำนวนมาก)
ตอนนี้คุณสามารถใช้การรวมเพื่อคำนวณตำแหน่งใหม่ตรวจสอบการชนกับพื้นผิวดาวเคราะห์ของคุณ ถ้ามีให้ใช้ความยาวของเวกเตอร์ความเร็วเพื่อบอกว่าการลงจอดนั้นประสบความสำเร็จหรือเกิดภัยพิบัติ
เห็นได้ชัดว่าการตรวจสอบการชนอื่น ๆ สามารถทำได้ / ควรมีการอนุญาตให้หน่วยงานพื้นผิวบางแห่งไม่สามารถเป็นจุดเชื่อมโยงไปถึงได้
ฉันปล่อยให้วิธีการป้อนข้อมูลและวิธีการยานอวกาศของคุณให้คุณ; คุณสามารถใช้ปัจจัยเครื่องยนต์เพื่อแสดงสถานะของเครื่องยนต์ตามเฟรมตัวอย่างเช่น
ในฐานะที่เป็นคำตอบที่ยอดเยี่ยมอื่น ๆ ที่ดูเหมือนทฤษฎีเล็กน้อยนี่คือรุ่นของรหัสง่ายๆ:
// Position of the lander:
var positionX = 100.0;
var positionY = 100.0;
// Velocity of lander
var velocityX = 0.0;
var velocityY = 0.0;
// Acceleration due to gravity
var gravity = 1.0;
// If the player is pressing the thrust buttons
var isThrusting = false;
var isThrustingLeft = false;
var isThrustingRight = false;
// Thrust acceleration
var thrust = -2.0;
// Vertical position of the ground
var groundY = 200.0;
// Maximum landing velocity
var maxLandingVelocity = 3.00;
onUpdate()
{
velocityY += gravity;
positionX += velocityX;
positionY += velocityY;
if (isThrusting)
{
velocityY += thrust;
}
if (isThrustingLeft)
{
velocityX += thrust;
}
else if (isThrustingRight)
{
velocityX -= thrust;
}
if (positionY >= floorY)
{
if (velocityY > maxLandingVelocity)
{
// crashed!
}
else
{
// landed successfully!
}
}
}
น่าเสียดายคณิตศาสตร์ที่นี่มีขนดก คำตอบของ FxIII นั้นใช้ได้กับกรณีทั่วไปของวัตถุที่ตกลงมา แต่คุณกำลังพูดถึงจรวด - และจรวดเผาไหม้เชื้อเพลิง
ฉันได้เห็นโค้ดที่ทำแล้ว แต่มันไม่มีเอกสารสมบูรณ์และฉันไม่เคยสามารถคำนวณคณิตศาสตร์ที่อยู่เบื้องหลังได้ ถ้าคุณไม่ได้ จำกัด ซีพียูอย่างใดฉันก็จะไม่รบกวนและดุร้ายแค่นั้น - วิธี FxII จะถูกนำไปใช้ในช่วงเวลาสั้น ๆ และปรับแรงขับ (หรือการใช้เชื้อเพลิงถ้าคุณคิดว่าจรวดปีกกลับมาเมื่อเชื้อเพลิงเผาไหม้เพื่อรักษา ความเร่งที่ระบุมากกว่าแรงขับที่ระบุ) ระหว่างการทำซ้ำแต่ละครั้งเมื่อจรวดเผาไหม้เชื้อเพลิง