कुछ अलग चीजें। सबसे पहले, हमें यह पहचानने की जरूरत है कि यह एक कम दबाव वाली समस्या है। यही है, थ्रस्टर्स के कई अलग-अलग संयोजन हैं जो एक ही दिशा में रोटेशन के परिणामस्वरूप आग लगा सकते हैं। मैं मान रहा हूं कि आपकी स्थिति में थ्रस्टर्स के लिए केवल दो राज्य हैं, "ऑन", और "ऑफ", और सभी थ्रस्टर्स आउटपुट फोर्स।
दूसरा, अपने मॉडल को देखते हुए, ऐसा लगता है कि आपका "द्रव्यमान का केंद्र" वास्तव में आपके द्रव्यमान का केंद्र नहीं है। सौभाग्य से, यह टोक़ के लिए आपकी गणना को प्रभावित नहीं करेगा। हालांकि, यह जन विस्थापन के केंद्र के लिए आपकी गणना को प्रभावित करेगा। मुझे यकीन नहीं है कि अगर आप उस स्तर पर सटीकता की परवाह करते हैं, हालांकि, आपके "द्रव्यमान का केंद्र" कम से कम द्रव्यमान के सच्चे केंद्र के निकटतम वर्ग है।
तीसरा, यदि आप गणना करना चाहते हैं कि एक निश्चित थ्रस्टर रोटेशन को कैसे प्रभावित करेगा, तो आपके पास यह सही है, हालांकि आप एक अक्षम सूत्र का उपयोग कर रहे हैं। टोक़ की गणना की जा सकती है r x F
, जिसमें परिमाण है r*F*sin(theta)
। हालांकि, इस मामले में कोणों की गणना करना एक अक्षम तरीका है। इसके बजाय, आपको सीधे टॉर्क के क्रॉस-प्रोडक्ट की परिभाषा का उपयोग करना चाहिए, क्योंकि आपके पास मौजूद अभ्यावेदन का उपयोग करके यह बहुत सरल होगा। क्योंकि आपके सभी वैक्टर में कोई z घटक नहीं है, इसलिए क्रॉस उत्पाद का सूत्र बहुत सरल है।
अपनी गणना के परिणामों को बिल्कुल भी बदले बिना, हम सिर्फ आपके कोड को अपडेट कर सकते हैं
private function thrustTorque():Float
{
var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
return torque;
}
यह बहुत अच्छा है (और तेज)।
आप अपने जवाब में सुझाव देते हैं कि आपका समाधान सही दिशा में टोक़ के साथ सभी थ्रस्टरों को आग देना है। अब, यह प्रश्न आपके द्वारा पूछे गए प्रश्न को हल करता है। हालांकि, मुझे उम्मीद है कि लाइन के साथ कुछ बिंदु, आप यह पता लगाने जा रहे हैं कि आपकी रणनीति इतनी संतोषजनक नहीं है, अगर कोई उपयोगकर्ता "रोटेट" बटन दबाए रखता है, और सभी थ्रस्टर एक सकारात्मक टोक़ के साथ घुमाते हैं, संभवतः उन्हें शीर्ष पर ले जाते हैं। उन्हें घुमाने के लिए (मैं आपके अनुकरण के विस्तार के स्तर के बारे में निश्चित नहीं हूं, यदि आप वास्तव में थ्रस्टरों से बलों की गणना करते हैं, या यदि आप बस नेत्रहीन उन्हें फायरिंग दिखाते हैं और फिर एक निरंतर त्वरण या कुछ के साथ अपने मॉडल को घुमाते हैं।) जिस तरह से, आप चाहते हैं कि थ्रस्टर्स कम से कम लगभग सटीक रूप से फायरिंग करें)।
आप जहाज पर शुद्ध बल का कोई विचार नहीं करते हैं। यदि आपके पास थ्रस्टर राशि मनमानी थी, तो यह एक बहुत जटिल समस्या में बदल सकती है। हालांकि, चूंकि हमारे थ्रस्टर्स में केवल दो राज्य हैं, इसलिए विश्लेषण करना बहुत सरल है। मुझे यकीन नहीं है कि हमारा लक्ष्य यहां क्या है, इसलिए मैं दो अलग-अलग कल्पना कर सकता हूं: पहला, हम कुल बल को कम से कम करना चाहते हैं, जबकि अभी भी उस दिशा में टोक़ रखना चाहते हैं जो हम चाहते हैं। दूसरा, हम टॉर्क के अनुपात को अधिकतम बल तक बढ़ाना चाहते हैं।
एक तरफ के रूप में, यदि आप एक अतिरिक्त "थ्रस्टर वॉल्यूम" नियंत्रण की कल्पना कर सकते हैं जो एक साथ सभी थ्रस्टर्स की शक्ति को प्रभावित करता है , तो आप इस नियंत्रण को सेट कर सकते हैं ताकि आपके दो समाधानों के बराबर टोक़ हो, और आप देखें कि दूसरा समाधान केवल एक ही हो सकता है पहले की तुलना में छोटा विस्थापन। हालांकि, हमें यह याद रखने की आवश्यकता है कि यदि थ्रस्टरों को फायर करना संभव है, ताकि आप केवल घुमाएं और बिल्कुल भी न चलें, तो दोनों समाधान समान होंगे।
इसलिए, हम पिछले पैराग्राफ के तर्कों के आधार पर दूसरे समाधान के साथ जाने वाले हैं। अब, कुल बल का विश्लेषण करते समय, हम केवल यह ध्यान दे सकते हैं कि इंजन केवल चार दिशाएँ हैं। इस प्रकार एक्स दिशा में कुल बल सिर्फ थ्रस्ट की संख्या है जो बाईं ओर शून्य से दाएं ओर इशारा करता है, और इसी तरह से y दिशा के लिए।
इसे दूर तक लिखने के बाद, मुझे इसे अनुकूलित करने के लिए एल्गोरिदम के बारे में कुछ और सोचना होगा। मुझे लगता है कि मेरी पोस्ट का शेष भाग भी सहायक है, इसलिए मैं इसे पोस्ट कर रहा हूं, लेकिन जब मैं इस कॉन्फ़िगरेशन को ऑप्टिमाइज़ करने का सबसे अच्छा तरीका समझूंगा तो मैं अपडेट करूंगा (मैंने अनुमानित उत्तर प्राप्त करने के कुछ तरीकों के बारे में सोचा है, लेकिन उनमें से कोई भी सटीक नहीं हैं)।