লক্ষ্যে পৌঁছানোর জন্য এআইয়ের সঠিক গতি সন্ধান করা


10

আমার কাছে একটি জাহাজ রয়েছে যা সর্বোচ্চ গতিতে ভ্রমণ করে maxSpeedএবং rotationSpeedপ্রতি সেকেন্ডে ডিগ্রি ঘুরিয়ে দিতে পারে । জাহাজটি সর্বদা যে দিকে মুখ করে তার দিকে এগিয়ে যায় যার অর্থ জাহাজটি যত দ্রুততর তার ঘূর্ণন ব্যাসার্ধ তত বেশি ভ্রমণ করছে।

আমি আমার অবস্থান এবং ঘূর্ণন এবং লক্ষ্যটির অবস্থান জানি।

আমি যেটি বের করতে চাই তা হ'ল এই গতিতে আমার টার্নিংয়ের ব্যাসার্ধের মধ্যে কোনও লক্ষ্য রয়েছে কিনা বা আরও ভাল, আমি যে সর্বাধিক গতিতে ভ্রমণ করতে পারি তা হ'ল লক্ষ্যটি ঘুরিয়ে ঘুরিয়ে নিয়মিত ঘুরিয়ে না ফেলে।

এটি করার কোনও দক্ষ (ইশ) উপায় আছে কি?

আমি এখন অবধি যা ভাবছি তা এখানে: কারণ আমি জানি যে আমি প্রতি পদক্ষেপে কতদূর ভ্রমণ করছি এবং প্রতি পদক্ষেপে আমি কতটা ঘুরছি, আমি পরবর্তী দুটি ফ্রেমে কোথায় থাকব তা বুঝতে পারি। আমার বর্তমান অবস্থানটি পি 1, আমার পরের অবস্থানটি পি 2 তারপর পি 3। আমি (পি 1, পি 2) এবং (পি 2, পি 3) এর লম্ব দণ্ড নিতে পারি। তাদের ছেদ পয়েন্টটি আমাকে একটি বৃত্তের কেন্দ্র দেবে। তারপরে আমি লক্ষ্যটি সেই বৃত্তে থাকলে পরীক্ষা করতে পারি।

এটি 3 ডি তে কাজ করবে কিনা তা সম্পর্কে আমি নিশ্চিত নই (আমার ইনপুটগুলির সাথে গোলকটি কীভাবে গণনা করা যায় তা সম্পর্কে আমি নিশ্চিত নই)। এই সমাধানটি ভ্রমণের সঠিক গতিটি খুঁজে পেতে খুব বেশি সহায়তা করে না, যুক্তিসঙ্গত কোনওটি খুঁজে পেতে আমাকে বিভিন্ন গতিতে কয়েকবার চেষ্টা করতে হবে।

কেউ কি আরও ভাল সমাধানের জন্য কিছু আলোকপাত করতে পারেন?

উত্তর:


17

একটি বাঁধা ঘূর্ণন গতি এবং একটি নিয়মিত পরিবর্তনশীল গতির একটি এআই নিয়ন্ত্রিত ইউনিট দুটি লক্ষ্যে পৌঁছতে পারে।

প্রথমে আমরা যে চ্যালেঞ্জ উপস্থাপিত তা বিবেচনা করি যাতে আমরা এটি আরও ভালভাবে বুঝতে পারি:

এখানে চিত্র বর্ণনা লিখুন

খেলোয়াড় যদি তার ডান বা বাম দিকে অবস্থিত কোনও লক্ষ্যে পৌঁছানোর চেষ্টা করার সময় ধ্রুবক গতিতে ঘুরছে এবং ঘুরছে, তবে এটি চিরকালের চেনাশোনাগুলিতে চলে যাবে, কখনই এটির লক্ষ্যের মুখোমুখি হবে না। খেলোয়াড় যে দুটি ক্ষেত্রের চেনাশোনা করবে সেগুলি উপরে লাল চিহ্নযুক্ত in

লাল হিসাবে চিহ্নিত বিজ্ঞপ্তি অঞ্চলটি এইভাবে গণনা করা যেতে পারে:

radius = movementSpeed / rotationSpeedInRadians;
circlesCenterX = unitX + cos(unitAngle + / - PI) * radius;
circlesCenterY = unitY + sin(unitAngle + / - PI) * radius;

এটি লাল বৃত্তের অবস্থান এবং ব্যাসার্ধের ফলাফল। নির্দিষ্ট লক্ষ্য যদি এআই নিয়ন্ত্রিত ইউনিটের নাগালের বাইরে থাকে তবে এটি যদি লক্ষ্যটির দিকে অগ্রসর হয় তবে আমরা তা নির্ধারণ করতে এটি ব্যবহার করতে পারি।

কোনও নির্দিষ্ট আইটেমটি চেনাশোনাগুলির মধ্যে একটির মধ্যে রয়েছে কিনা তা জানতে, আমরা কেবল বৃত্তের কেন্দ্র থেকে দূরত্ব গণনা করি:

if ((circleX - goalX)^2 + (circleY - goalY)^2 < radius^2) //goal is within red circle

এর জন্য দুটি সম্ভাব্য সমাধান রয়েছে:

1।

লক্ষ্যটি বৃত্তাকার লাল অঞ্চলের বাইরে না আসা পর্যন্ত কিছুটা দূরত্ব তৈরি করুন এবং তারপরে ফ্যাশনের মতো ইউ-টার্নে ঘুরিয়ে দিন। এটি সহজ, ইউনিটটি চলমান চলুন যতক্ষণ না চেকটি ফিরে আসে যে লক্ষ্যটি এই বৃত্তের মধ্যে নেই। তারপরে আপনি ঘুরে আসতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

অন্যান্য বিকল্পের গণনার জন্য আরও কিছু কাজ প্রয়োজন:

আমরা এআই ইউনিট এবং লক্ষ্যটির মধ্যে একটি কাল্পনিক লাইন আঁকি। তাদের মধ্যে কোণ ব্যবহার করে:

angle = Math.atan2(goalY - unitY, goalX - unitX);

সঠিক গতি গণনা করতে এখন আপনাকে নিম্নলিখিতগুলি করা দরকার:

correctSpeed = rotationSpeedInRadians * (distance / 2) / cos(angle);

এখানে চিত্র বর্ণনা লিখুন

এটি 3 ডি ক্ষেত্রে কাজ করার জন্য:

নিম্নলিখিত তিনটি পয়েন্ট যে বিমানটিতে রয়েছে তা সন্ধান করুন:

  1. গোল পয়েন্ট।
  2. পূর্ববর্তী ফ্রেমে এআই ইউনিটের অবস্থান।
  3. এআই ইউনিটের বর্তমান অবস্থান।

আপনি 2 ডি পথে গতি গণনা করতে সেই বিমানটি ব্যবহার করতে পারেন। আপনাকে কেবল বিন্দুগুলিকে তাদের 3 ডি মান থেকে তাদের সাধারণ বিমানে এম্বেড করা 2 ডি মানগুলিতে রূপান্তর করতে হবে।

আপনি এটি ব্যবহার করতে চাইতে পারেন:

প্লেনের কোনও 3D পয়েন্টকে কীভাবে UV স্থানাঙ্কে রূপান্তর করবেন?


পারফেক্ট! ঠিক আমি যে উত্তরটির জন্য আশা করছিলাম! আপনার বিস্তারিত ব্যাখ্যার জন্য ধন্যবাদ, আমি মনে করি আমি এটি এক্সট্রোপোলেট করতে এবং এটি 3D তে ব্যবহার করতে সক্ষম am
ওয়েইচসেম

@ উইচসেম আমি উত্তর আপডেট করেছি। আমি প্রস্তাবিত ধারণাটি হ'ল তারা ভাগ করে নেওয়ার একটি সাধারণ 2 ডি প্লেইন সন্ধান করবে এবং সঠিক গতি গণনা করতে এটি ব্যবহার করবে।
আতুরস্যামস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.