สิ่งที่แตกต่างกันเล็กน้อย ก่อนอื่นเราต้องตระหนักว่านี่เป็นปัญหาที่เกิดขึ้นภายใต้ข้อ จำกัด นั่นคือมีการผสมผสานที่แตกต่างกันของ thrusters ที่สามารถยิงเพื่อให้เกิดการหมุนในทิศทางเดียวกัน ฉันสมมติว่าในสถานการณ์ของคุณมีเพียงสองสถานะสำหรับขับดัน "บน" และ "ปิด" และขับดันทั้งหมดให้แรงเท่ากัน
ประการที่สองการทำให้ดวงตาของคุณดูราวกับว่า "จุดศูนย์กลางมวล" ของคุณไม่ใช่จุดศูนย์กลางมวลของคุณ โชคดีที่สิ่งนี้จะไม่มีผลต่อการคำนวณแรงบิดของคุณ อย่างไรก็ตามมันจะมีผลต่อการคำนวณของคุณสำหรับศูนย์กลางของการกระจัดมวล ฉันไม่แน่ใจว่าคุณสนใจความถูกต้องในระดับนั้นหรือไม่เนื่องจาก "ศูนย์กลางของมวล" ของคุณนั้นเป็นสี่เหลี่ยมจัตุรัสที่ใกล้ที่สุดกับใจกลางมวลที่แท้จริง
ประการที่สามถ้าคุณต้องการคำนวณว่า thruster บางอย่างจะมีผลต่อการหมุนอย่างไรคุณทำได้ถูกต้องแม้ว่าคุณจะใช้สูตรที่ไม่มีประสิทธิภาพก็ตาม แรงบิดสามารถคำนวณได้ซึ่งมีขนาดr x F
r*F*sin(theta)
อย่างไรก็ตามการคำนวณมุมในกรณีนี้เป็นวิธีที่ไม่มีประสิทธิภาพ คุณควรใช้การกำหนดแรงบิดแบบไขว้โดยตรงเนื่องจากจะง่ายกว่ามากเมื่อใช้การแทนแบบที่คุณมี เนื่องจากเวกเตอร์ทั้งหมดของคุณไม่มีองค์ประกอบ z สูตรสำหรับผลิตภัณฑ์ครอสจึงลดความซับซ้อนลงอย่างมาก
เราสามารถอัปเดตโค้ดของคุณได้โดยไม่ต้องเปลี่ยนผลลัพธ์ของการคำนวณของคุณเลย
private function thrustTorque():Float
{
var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
return torque;
}
มันดีกว่ามาก (และเร็วกว่า)
คุณแนะนำในคำตอบของคุณเองว่าทางออกของคุณคือการขับดันขับดันด้วยแรงบิดในทิศทางที่ถูกต้อง ทีนี้คำถามนี้ก็หายไปหมดแล้ว อย่างไรก็ตามฉันคาดหวังว่าบางจุดตามเส้นคุณจะพบว่ากลยุทธ์ของคุณไม่เป็นที่น่าพอใจหากผู้ใช้กดปุ่ม "หมุน" และขับดันด้วยแรงบิดเชิงบวกอาจทำให้พวกเขาอยู่ด้านบน ของการหมุนพวกมัน (ฉันไม่แน่ใจว่าระดับรายละเอียดของการจำลองของคุณถ้าคุณคำนวณแรงจาก thrusters จริง ๆ หรือถ้าคุณแค่แสดงให้พวกเขาเห็นการยิงจากนั้นหมุนโมเดลของคุณด้วยความเร่งคงที่หรืออะไรก็ได้ วิธีที่คุณต้องการขับดันอย่างถูกต้องประมาณอย่างน้อย)
คุณไม่ได้พิจารณาถึงกำลังสุทธิบนเรือ หากคุณมีปริมาณทรัสเตอร์ตามอำเภอใจนี่อาจกลายเป็นปัญหาที่ซับซ้อนได้ อย่างไรก็ตามเนื่องจากเครื่องขับดันของเรามีเพียงสองสถานะจึงค่อนข้างง่ายในการวิเคราะห์ ฉันไม่แน่ใจว่าเป้าหมายของเราอยู่ที่นี่ดังนั้นฉันสามารถจินตนาการสองคนที่แตกต่างกัน: ก่อนอื่นเราต้องการลดกำลังโดยรวมขณะที่ยังคงรักษาแรงบิดในทิศทางที่เราต้องการ ประการที่สองเราต้องการที่จะเพิ่มอัตราส่วนของแรงบิดต่อแรงรวมสูงสุด
นอกจากนี้หากคุณสามารถจินตนาการถึงการควบคุม "ปริมาณทรัสเตอร์" เพิ่มเติมที่ส่งผลต่อพลังของทรัสเตอร์ทั้งหมดพร้อมกันคุณสามารถตั้งค่าการควบคุมนี้เพื่อให้โซลูชันทั้งสองของคุณมีแรงบิดเท่ากันและคุณเห็นว่าโซลูชันที่สองการกระจัดเล็กกว่าครั้งแรก อย่างไรก็ตามเราจำเป็นต้องจำไว้ว่าถ้าเป็นไปได้ที่จะยิง thrusters เพื่อให้คุณหมุนและไม่เคลื่อนที่เลยวิธีแก้ปัญหาทั้งสองจะเหมือนกัน
ดังนั้นเราจะไปกับการแก้ปัญหาที่สองตามข้อโต้แย้งของวรรคก่อน ตอนนี้เมื่อวิเคราะห์แรงทั้งหมดเราสามารถสังเกตได้ว่ามีเพียงสี่ทิศทางที่เครื่องยนต์สามารถชี้ได้ ดังนั้นแรงทั้งหมดในทิศทาง x จึงเป็นเพียงจำนวน thrusters ที่ชี้ไปทางซ้ายลบจำนวนที่ชี้ไปทางขวาและเช่นเดียวกันกับทิศทาง y
หลังจากเขียนมาไกลขนาดนี้ฉันต้องคิดเพิ่มเติมเกี่ยวกับอัลกอริทึมเพื่อเพิ่มประสิทธิภาพ ฉันคิดว่าส่วนที่เหลือของโพสต์ของฉันมีประโยชน์อย่างที่เป็นอยู่ดังนั้นฉันจึงโพสต์ไว้ แต่ฉันจะอัปเดตเมื่อฉันหาวิธีที่ดีที่สุดในการปรับการตั้งค่านี้ให้เหมาะสมที่สุด ไม่มีของพวกเขาแน่นอน)