একটি চলন্ত লক্ষ্য আঘাত করতে শট কোণ এবং বেগ গণনা কিভাবে?


11

আমি একটি 2 ডি অ্যান্ড্রয়েড গেমটি বিকাশ করছি এবং আমি এআই প্রজেক্টিসের জন্য কোনও পথ অনুসরণ করে বা মুক্ত চলাফেরায় শত্রুদের আঘাত করতে একটি লক্ষ্য অ্যালগরিদম তৈরি করছি। এই মুহুর্তে এটি কেবল গণনা করে যেখানে লক্ষ্যটি কোনও দূরত্বের পরে হবে এবং সেই দূরত্বে এটি পূরণের জন্য একটি অনুমানকে আগুন ধরিয়ে দেয়। অবশ্যই এর অর্থ লক্ষ্যটি পূরণের জন্য প্রক্ষিপ্ত গতিতে পৃথক হওয়া।

প্রজেক্টিলটি যখন আগুন লাগার দরকার হয় এবং যেখানে এটি কেবল ধ্রুবক গতিতে ভ্রমণ করতে পারে তার লক্ষ্য নির্ধারণের জন্য যখন কোনও সাধারণ-ইশ আলগোরিদম (অনুকূল-ইশ) গণনা করার জন্য কারও কাছে কোনও টিপস রয়েছে? বল ছোঁয়া লক্ষ্য গতি দ্বিগুণ হয়?

আমি ভাবতে পারি যে কেবলমাত্র অনুসন্ধান অনুসন্ধান জড়িত এবং এটি বেশ বড় বলে মনে হচ্ছে।



@ জনম্যাকডোনাল্ড: প্যারাবোলিক প্রজেক্টিলেস সম্পর্কে খুব বেশি সম্পর্কিত নয়, লিনিয়ার নয়। এটি অনেক বেশি কাছাকাছি: গেমদেব.স্ট্যাকেক্সেঞ্জার
প্রশ্নগুলি

উত্তর:


13

আমি তৈরি একটি টাওয়ার প্রতিরক্ষা গেমটিতে, ছেদটি পূর্বাভাস দেওয়ার জন্য আমি একটি চতুর্ভুজ সমীকরণ ব্যবহার করেছি এবং এভাবে লক্ষ্য বিন্দু। নিম্নলিখিত লক্ষ্যযুক্ত কোড স্নিপেট ধরে নেয় শত্রু একটি ধ্রুবক গতি এবং দিকনির্দেশে ভ্রমণ করছে traveling এটি ধরেও নিয়েছে যে অনুমানটি একটি পরিচিত ধ্রুবক গতিতে ভ্রমণ করবে (কোনও গতি হতে পারে তবে অবশ্যই অ্যালগরিদমের সাথে পরিচিত হতে হবে)।

Vector totarget =  target.position - tower.position;

float a = Vector.Dot(target.velocity, target.velocity) - (bullet.velocity * bullet.velocity);
float b = 2 * Vector.Dot(target.velocity, totarget);
float c = Vector.Dot(totarget, totarget);

float p = -b / (2 * a);
float q = (float)Math.Sqrt((b * b) - 4 * a * c) / (2 * a);

float t1 = p - q;
float t2 = p + q;
float t;

if (t1 > t2 && t2 > 0)
{
    t = t2;
}
else
{
    t = t1;
}

Vector aimSpot = target.position + target.velocity * t;
Vector bulletPath = aimSpot - tower.position;
float timeToImpact = bulletPath.Length() / bullet.speed;//speed must be in units per second

যেহেতু এটি প্রভাবের সময়ও নির্ধারণ করে আমি ততক্ষণ অপেক্ষা করেছিলাম যতক্ষণ না সেই সময় লক্ষ্য অবস্থানে ইফেক্ট গ্রাফিক্স কল করার জন্য সময়টি বেঁধে দেওয়া হয়েছিল ... হিটগুলি নির্ধারণের জন্য কোনও সংঘর্ষ সনাক্তকরণের প্রয়োজন নেই।


"হিটগুলি নির্ধারণের জন্য কোনও সংঘর্ষ সনাক্তকরণের প্রয়োজন নেই।" - লক্ষ্য (গুলি) যদি তাদের গতি এবং দিক বজায় রাখতে সীমাবদ্ধ থাকে। --- তবে, যদি তাদের একটি সক্রিয় এআই থাকে বা এর চেয়ে খারাপ, তারা প্লেয়ার হয় এবং শ্যুটারটি গুলি চালানোর পরে সরে যেতে সক্ষম হয়, তবে সংঘর্ষ-সনাক্তকরণের চেয়ে সময় অনুযায়ী আপনার হিটগুলি বেইজ করা আপনার প্লেয়ার-বেসের দিকে নিয়ে যায় কিছু কদর্য বাগ / গ্লিটস হিসাবে উপলব্ধি করা হবে।
XenoRo

@TheLima হ্যাঁ, ঠিক যেমন উত্তরের দ্বিতীয় বাক্যে বলা হয়েছে। ;-)
স্টিভ এইচ

এটি আমার দৃশ্যের জন্য প্রায় নিখুঁত, তবে আপনি কীভাবে এই 2 অতিরিক্ত ভেরিয়েবলগুলিতে ফ্যাক্টর করবেন: অনুমানের জন্য ত্বরণ, টাওয়ারের গতিবিধি নিজেই?
জ্যাক

কি a0? এটি শূন্য ব্যতিক্রম দ্বারা একটি বিভাজন উত্পাদন করবে, তবে ভ্যারিয়েবল টির ক্ষেত্রে এর অর্থ কী? এটিকে 'খুব বড় সংখ্যা' হিসাবে বিবেচনা করা উচিত বা সেরা কেসটি হবে?
অগ্নিনির্বাপ থেকে

এর পিছনে অন্তর্দৃষ্টিতে যায় এমন কোনও ভাল বই আছে কি? আমি জানতে আগ্রহী আপনি কীভাবে এই
গণিতটির

4

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

এআই, প্রক্ষেপণটি চালিত হওয়ার সময় লক্ষ্যটির অবস্থান এবং মৃত্যুর সময় লক্ষ্যটির শেষ অবস্থানটি একটি ত্রিভুজ তৈরি করে e এখানে আপনার ইতিমধ্যে জানা উচিত:

  1. পার্শ্ব দৈর্ঘ্য a, যা অনুমান গতি
  2. পাশের দৈর্ঘ্য বি, যা লক্ষ্য গতি
  3. লক্ষ্যটির গতির গতির কোণ।

আপনার ত্রিভুজের তিনটি অংশ রয়েছে, একটি এসএসএ কেস, সুতরাং এটি এর মতো সমাধান করুন

  1. গতির কোণ এবং এআই এর অবস্থানের উপর ভিত্তি করে কোণ বিটি সন্ধান করুন
  2. A কোণ খুঁজে পেতে সাইনসের আইন ব্যবহার করুন

কোণ এ আপনাকে কোণ নির্ধারণ করার অনুমতি দেবে যাতে প্রজেক্টটি চালু করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.