วิธีการคำนวณความเร็วลดลงและเร่งความเร็ว?


9

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

คำตอบ:


28

วิธีที่ง่ายที่สุดคือการรวมออยเลอร์ คุณต้องเก็บตำแหน่งเวกเตอร์และเวกเตอร์ความเร็ว ในแต่ละเฟรม:

  • วัดเวลาที่ผ่านไปตั้งแต่ขั้นตอนการรวมครั้งล่าสุด: dt
  • คำนวณแรงต้านเนื่องจากเครื่องยนต์ของคุณ: F
  • คำนวณเวกเตอร์การเร่งความเร็ว: A = F / mโดยที่ m คือมวลของยานอวกาศ
  • เพิ่มเวกเตอร์แรงโน้มถ่วง: A = A + Gตรวจสอบให้แน่ใจว่าGชี้ไปที่จุดศูนย์กลางดาวเคราะห์
  • อัปเดตเวกเตอร์ความเร็วV = V + A · dt
  • อัปเดตตำแหน่งเวกเตอร์X = X + V · dt

( xสำหรับสเกลาร์, Xสำหรับเวกเตอร์)

ต้องแน่ใจว่าdtนั้นเล็ก ...

| G | ประมาณ 9.8 m / s²สำหรับโลกและประมาณ 1.6 m / s²สำหรับดวงจันทร์

โดยทั่วไปแรงการกระทำเนื่องจากปฏิกิริยาแรงโน้มถ่วงคือ:

กฎความโน้มถ่วงสากลของนิวตัน

มันมีผลต่อร่างกายแต่ละคนและมันชี้ไปทางอื่น

Gเกลาเป็นที่มีชื่อเสียงมากคงที่แรงโน้มถ่วงมันเป็นเรื่องเกี่ยว 6.67e-011 N (m / Kg) ²

เนื่องจากคุณมีความสนใจในการเร่งความเร็ว:

การเร่งความเร็ว

คุณจำเป็นต้องรู้มวลของโลก (m2) และรัศมี (r) เพื่อคำนวณความเร่งของคุณ

โดยทั่วไปการเร่งความเร็วที่เคลื่อนดาวเคราะห์ไปสู่ยานอวกาศของคุณนั้นเล็กน้อยมากเพราะโดยทั่วไป m1 นั้นเล็กน้อยมากเมื่อเทียบกับ m2

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

แก้ไข:

จำเป็นต้องมีคำใบ้บางอย่างเกี่ยวกับการใช้งาน คุณจะต้องการ:

  • ห้องสมุดเวกเตอร์
  • รุ่นเครื่องยนต์
  • แบบจำลอง Phisics
  • ตรวจจับการชนกัน
  • ส่วนต่อประสานผู้ใช้ (อินพุตและการเรนเดอร์กราฟิก)

แรกของไลบรารีเวกเตอร์ทั้งหมด: เกมของคุณสามารถเป็นแบบโมโน / ทวิ / ต้นไม้ / สี่ ... ได้เล็กน้อยเท่าที่คุณคิดว่ากรณีของคุณเป็นการฉายภาพของคำ 3 มิติเราเตอร์ทางกายภาพถือ

หาก n คือส่วนข้อมูลที่คุณเลือก (อาจเป็น 2 หรือ 3 ในกรณีของคุณ) ไลบรารีต้องมี:

  • หน่วยเก็บข้อมูลเวกเตอร์ (รายการหมายเลข n จำนวนจุดลอยตัวสำหรับแต่ละเวกเตอร์)
  • ตัวดำเนินการผลรวม (ส่วนประกอบผลรวมตามส่วนประกอบ)
  • ตัวดำเนินการคูณเซนต์คิตส์และเนวิส (แต่ละองค์ประกอบคูณด้วยลอย)
  • การคูณดอทระหว่างเวกเตอร์ (คูณส่วนประกอบด้วยองค์ประกอบและสรุปทั้งหมด)
  • ความยาวเวกเตอร์ (สแควร์รูทของเวกเตอร์ดอทฟิวชั่นด้วยตัวมันเอง)

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

แต่ละเครื่องยนต์ควรอธิบายโดย:

  • เวกเตอร์ที่บ่งบอกถึงกำลังและทิศทางของแรงขับ
  • เซนต์คิตส์และเนวิสที่บ่งบอกถึงการใช้เชื้อเพลิงต่อวินาทีเมื่อเต็มกำลัง

การป้อนข้อมูลผู้ใช้ของคุณจะถูกใช้เพื่อให้หมายเลขเครื่องยนต์ที่จะอยู่ระหว่าง 0 (เครื่องยนต์ที่ไม่ได้ใช้) และ 1 (กำลังไฟเต็ม): ปัจจัยเครื่องยนต์ (การใช้งาน)

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

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

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

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

ฉันปล่อยให้วิธีการป้อนข้อมูลและวิธีการยานอวกาศของคุณให้คุณ; คุณสามารถใช้ปัจจัยเครื่องยนต์เพื่อแสดงสถานะของเครื่องยนต์ตามเฟรมตัวอย่างเช่น


นั่นเป็นเรื่องที่ดี แต่ความคิดบางอย่างเกี่ยวกับการใส่เข้าไปในโค้ดจะดีมาก
Dvole

1
ที่ฉันเรียนรู้ฟิสิกส์shiffman.net/teaching/nature
Ming-Tang

ผู้ชายคนนี้รู้ฟิสิกส์ของเขา!
MGZero

7

ในฐานะที่เป็นคำตอบที่ยอดเยี่ยมอื่น ๆ ที่ดูเหมือนทฤษฎีเล็กน้อยนี่คือรุ่นของรหัสง่ายๆ:

// 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!
        }
    }
}

2
ทำให้มันง่าย ฉันคาดหวังว่าสิ่งนี้จะเป็นไปตามสิ่งที่เขามองหา
Beska

2

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

ฉันได้เห็นโค้ดที่ทำแล้ว แต่มันไม่มีเอกสารสมบูรณ์และฉันไม่เคยสามารถคำนวณคณิตศาสตร์ที่อยู่เบื้องหลังได้ ถ้าคุณไม่ได้ จำกัด ซีพียูอย่างใดฉันก็จะไม่รบกวนและดุร้ายแค่นั้น - วิธี FxII จะถูกนำไปใช้ในช่วงเวลาสั้น ๆ และปรับแรงขับ (หรือการใช้เชื้อเพลิงถ้าคุณคิดว่าจรวดปีกกลับมาเมื่อเชื้อเพลิงเผาไหม้เพื่อรักษา ความเร่งที่ระบุมากกว่าแรงขับที่ระบุ) ระหว่างการทำซ้ำแต่ละครั้งเมื่อจรวดเผาไหม้เชื้อเพลิง


การออกจากน้ำมันจะแสดงถึงพารามิเตอร์ที่ลดลง มันเป็นแรงเวกเตอร์ที่มีค่าลดลง ฉันผิดหรือเปล่า? ในกรณีง่ายๆคุณมี G เทียบกับ F โดยที่ F คือเครื่องยนต์ของจรวดและ G ความโน้มถ่วงของโลก: ในกรณีนี้คุณต้องวัดทั้งสองอย่างต่อกันดังนั้นหากไม่มีเชื้อเพลิงเหลือ F จะเหลือ 0 ดังนั้นคุณเท่านั้น ต้องใช้ G เป็นแรงเวกเตอร์กับวัตถุของคุณ ใช้งานได้กับทุกค่าของ F ตราบใดที่ F> = G วัตถุ "ควร" เคลื่อนที่ไปในทิศทางของ F.
daemonfire300

2
@ daemonfire300: คุณเข้าใจผิด - ฉันไม่ได้พูดถึงผลของเชื้อเพลิงหมด แต่เป็นผลจากการเผาไหม้เชื้อเพลิง การตั้งค่าเค้นอย่างต่อเนื่องในเครื่องยนต์ของคุณจะสร้างตัวเลขการเร่งความเร็วอย่างต่อเนื่องการเร่งความเร็วคงที่จะสร้างอัตราการเผาไหม้เชื้อเพลิงที่ลดลงอย่างต่อเนื่อง ซึ่งหมายความว่าการคำนวณอย่างง่าย ๆ ที่ FxIII มอบให้จะสร้างหมายเลขการใช้เชื้อเพลิงที่ไม่ถูกต้อง
Loren Pechtel

ปริมาณของการเร่งความเร็วที่ได้รับจาก A = F / M เมื่อเชื้อเพลิงถูกเผาไหม้จะเป็นค่าที่น้อยมากยกเว้นสัดส่วนของมวลน้ำมันเชื้อเพลิงต่อยานพาหนะนั้นสูงมากอย่างน่าหัวเราะหรืออัตราการเผาไหม้เชื้อเพลิงก็ใกล้เคียงกัน นี่คือเกมหลังจากทั้งหมด
Patrick Hughes

@ แพทริกฮิวจ์: ปริมาณเชื้อเพลิงที่บรรทุกโดยยานจรวดจริง ๆ (ฉันไม่นับกรณีของดาวอังคาร aerobrake / จรวดไฮบริด) เป็นส่วนสำคัญของน้ำหนักรวม การสันนิษฐานเชื้อเพลิง: อัตราส่วนความเร่งที่จะแก้ไขจะให้คำตอบที่ผิดมาก
Loren Pechtel

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