আমি ধরে নেব যে আপনার জাহাজের জন্য আপনার শারীরিকভাবে গতি আছে, অন্যথায় এই বিশ্লেষণটি ধরে রাখবে না। এই সমস্যাটি সঠিকভাবে সমাধান করতে আপনার দক্ষতার চেয়ে শক্তিশালী কিছু দরকার।
প্রতিটি থ্রাস্টার জাহাজের গতিতে দুটি প্রভাব তৈরি করবে: লিনিয়ার এবং কৌণিক। এগুলি স্বতন্ত্রভাবে বিবেচনা করা যেতে পারে। যদি থ্রাস্টারটি f
একটি দিকের দিকে একটি শক্তি তৈরি করে এবং ভরর dir
কেন্দ্র থেকে কোনও ভেক্টর r
(জ্যামিতিক কেন্দ্র বা স্প্রাইটের কেন্দ্র নয়) দ্বারা অফসেট হয় তবে লিনিয়ার উপাদানটির উপর প্রভাবটি হয়:
t = f * dir // f is a scalar, dir is unit length
কৌণিক বেগের উপর প্রভাব টর্ক দ্বারা দেওয়া হয়:
tau = f * <dir.x, dir.y, 0> CROSS <r.x, r.y, 0> // cross product
t
একটি বল ভেক্টর (যেমন লিনিয়ার থ্রাস্ট)। tau
একটি স্বাক্ষরযুক্ত স্কেলার যা জড়তার ভর মুহুর্তের দ্বারা বিভক্ত হয়ে কৌণিক ত্বরণ দেবে। এটি গুরুত্বপূর্ণ যে dir
এবং r
উভয় একই স্থানাঙ্ক স্থানে, যেমন উভয় স্থানীয় স্থানাঙ্কে বা উভয় বিশ্বের স্থানাঙ্কে।
জাহাজের সামগ্রিক রৈখিক t
ত্বরণটি জাহাজের ভর দ্বারা বিভক্ত প্রতিটি থ্রাস্টারের জন্য যোগফল দ্বারা দেওয়া হয় । একইভাবে, কৌণিক ত্বরণ হল জড়তার ভর মুহুর্ত (যা অন্য একটি স্কেলার) দ্বারা বিভক্ত টর্কগুলির যোগফল। মোট টর্কটি শূন্য হলে জাহাজটি ফিরবে না। একইভাবে, মোট জোড় শূন্য হলে এটি সরবে না। রিকাল টর্কটি একটি স্কেলার তবে থ্রাস্ট (এর যোগফল t
) একটি 2 ডি ভেক্টর।
এই প্রকাশের বিষয়টি হ'ল আমরা এখন লিনিয়ার প্রোগ্রাম হিসাবে আমাদের সমস্যাটি লিখতে পারি । বলুন প্রথম আমরা আমাদের জাহাজ করতে চান চালু ছাড়া চলন্ত । আমাদের প্রতিটি থ্রাস্টারের জন্য একটি পরিবর্তনশীল রয়েছে, $ x_1, x_2, ... $, যা থ্রাস্টার সরবরাহ করবে এমন পরিমাণ পরিমাণ। সীমাবদ্ধতার একটি সেট হ'ল:
0 <= x_i < fmax_i //for each i
fmax
সেই থ্রাস্টারের সর্বাধিক শক্তি কোথায় (এটি আমাদের আরও শক্তিশালী বা দুর্বল করতে দেয়)। পরবর্তী, আমরা বলি যে উভয় সমতা:
0 = Sum_i x_i * dir_i.x
0 = Sum_i x_i * dir_i.y
এটি এই সীমাবদ্ধতাটিকে এনকোড করে যে আমরা সম্পূর্ণ রঞ্জক শূন্য (থ্রাস্টটি একটি ভেক্টর, তাই আমরা কেবল প্রতিটি অংশ শূন্য) বলি না কেন একটি লিনিয়ার ত্বরণ প্রয়োগ করব না।
এখন আমরা চাই আমাদের জাহাজটি পালা হোক। সম্ভবত আমরা যত তাড়াতাড়ি সম্ভব এটি করতে চাই, তাই আমরা এটি করতে চাই:
max (Sum_i x_i * c_i)
where c_i = <dir_i.x, dir_i.y, 0> CROSS <r_i.x, r_i.y, 0>
x_i
উপরের অসমতা এবং সমতাগুলি সন্তুষ্ট করার সময় এর জন্য সমাধান করা , যখন উপরের সারসংক্ষেপটি সর্বাধিক করে তোলা হবে, আমাদের পছন্দসই জোর দেবে। বেশিরভাগ প্রোগ্রামিং ভাষার কাছে তাদের জন্য একটি এলপি গ্রন্থাগার রয়েছে। উপরের সমস্যাটি কেবল এতে প্রবেশ করুন এবং এটি আপনার উত্তর তৈরি করবে।
একটি অনুরূপ সমস্যা আমাদের মোড় না নিয়েই চলতে দেবে। বলুন আমরা আমাদের সমস্যাটিকে একটি সমন্বিত সিস্টেমে পুনরায় লিখি যেখানে আমরা ইতিবাচক এক্স দিকে যেতে চাই। তারপরে সীমাবদ্ধতাগুলি হ'ল:
0 <= x_i < fmax_i //for each i
max Sum_i x_i * dir_i.x
0 = Sum_i x_i * dir_i.y
0 = (Sum_i x_i * c_i)
where c_i = <dir_i.x, dir_i.y, 0> CROSS <r_i.x, r_i.y, 0> // as before
বাধা যে থ্রাস্টাররা কেবল একটি একক দিকেই থ্রাস্ট তৈরি করতে পারে, সেখানে আপনি যে ধরণের আবর্তন এবং রৈখিক বেগ অর্জন করতে সক্ষম হবেন তার সীমাবদ্ধতা রয়েছে। এটি সমাধান হিসাবে উপস্থিত হবে 0 = x_1 = x_2 = ... = x_n
, যার অর্থ আপনি কখনই কোথাও পাবেন না। এটি প্রশমিত করতে, আমি প্রতিটি প্লেয়ারের উভয় পাশের 45 ডিগ্রি থ্রাস্টার স্থাপনের জন্য একটি জোড়া ছোট, দুর্বল (5% বা 10% বলুন) যুক্ত করার পরামর্শ দিই। এটি সমাধানটিকে আরও নমনীয়তা দেবে, কারণ এগুলি প্রধান থ্রাস্টারগুলির দুর্বল গৌণ প্রভাবগুলির বিরুদ্ধে লড়াই করতে ব্যবহার করা যেতে পারে।
অবশেষে, প্রায় 100 টি থ্রাস্টারের মাধ্যমে, এলপির সমাধান ফ্রেম প্রতি যথেষ্ট দ্রুত করা যায়। তবে, সমাধানটি অবস্থান বা বর্তমান অবস্থার উপর নির্ভর করে না, আপনি যখনই আকৃতি পরিবর্তন করেন তখন প্রতিটি যুক্তিসঙ্গত নিয়ামক ইনপুট সংমিশ্রনের জন্য সমাধানটিকে পূর্বরূপ করতে পারেন (এর মধ্যে নন-থ্রাস্টার যুক্ত থাকে যা জড়তা বা জাহাজের ভরকে পরিবর্তন করে, কারণ তখন থ্রাস্টারগুলি ভর কেন্দ্রের সাথে তুলনামূলকভাবে আলাদা জায়গায় থাকে!)। এটি 24 সম্ভাবনা (যেমন 8 দিকের বার {বাম স্পিন, কোনও আবর্তন নেই, ডান স্পিন।)।