আমার চরিত্রটি কোথায় থামবে?


12

বহু বছর আগে আমি বাজেটের সিউডো -3 ডি গেমের জন্য কিছু এআই কোড করেছিলাম। এখানে একটি হিসাব ছিল যা আমি কখনই করবার সর্বোত্তম উপায়টি সত্যই বুঝতে পারি নি, এবং এটি গণনা করা হয়েছিল যে এখন যদি বন্ধ হয়ে যায় তবে শত্রুরা কোথায় শেষ হবে। উদাহরণ স্বরূপ:

  • শত্রু বর্তমানে এক্স = 540.0 এ রয়েছে।
  • শত্রুটি প্রতি ফ্রেমে ডানদিকে 10 পিক্সেল গতিতে চলছে।
  • শত্রু যখন থামতে চায়, তখন এটির গতি শূন্যে না পৌঁছানো পর্যন্ত প্রতি ফ্রেমে 1 পিক্সেল হ্রাস পাবে।

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

উত্তর:


7

আমি সাধারণত জন এর উত্তর সাথে একমত। আমি কিছুটা পরিবর্তিত সূত্র অফার করতে যাচ্ছি (যা তার মানের সাথে অতিরিক্ত ভি / 2 যোগ করে):

D = V / A * (V + A) / 2 

সাথে V = 10এবং A = 1, এটি ডি = পায় 55। এটি ঠিক ফলাফল

10 + 9 + 8 + 7 + .... + 3 + 2 + 1

যা শত্রুর ফ্রেম বাই ফ্রেম গতি।

আপনি যে ধাপে উঠতে চলেছেন তা এখানে এক ধরণের।

  1. ভি : বর্তমান वेग = 10 পিক্সেল / ফ্রেম, : বর্তমান ত্বরণ = 1 পিক্সেল / ফ্রেম ^ 2
  2. টি : স্টপ = ভি / এ = 10 ফ্রেমে আসার সময়।
  3. দূরত্ব 10 ফ্রেমে = ফ্রেম 1 + ফ্রেম 2 + ফ্রেম 3 + ... = ভি + (ভিএ) + (ভি -2 * এ) + ... এ ভ্রমণ করা হয়েছে
  4. এটি টি * ভি - এ / 2 * টি * (টি -1) এর সমান, যা উপরের সমীকরণকে সরল করে।

+1 আমি আপনার সমাধানে কোনও যুক্তিযুক্ত ত্রুটি দেখতে পাচ্ছি না এবং আমি কীভাবে আমার সমাধানটি পেরিয়ে এসেছি তা সত্যিই মনে করতে পারি না। সুতরাং আমার অভিব্যক্তিটি অবশ্যই ভুল হতে পারে এবং আমি সম্ভবত ছোট পার্থক্য এবং বিস্তারিত পরীক্ষার অভাবের কারণে লক্ষ্য করিনি? আমি যদি গতিবেগের অর্ধেক যোগ করি তবে আমার অভিব্যক্তিটি সঠিক হয়ে উঠবে?
জন ম্যাকডোনাল্ড

আমি পাওয়ার ক্যালক ব্যবহার করে নিজের প্রশ্নের উত্তর দিয়েছি। আমার অভিব্যক্তিটি + (v / 2) নেওয়া আপনার প্রদত্ত যে কোনও ভি এবং এর জন্য সর্বদা আপনার অভিব্যক্তির সমান বলে মনে হয়।
জন ম্যাকডোনাল্ড

@ জন এবং আপনি উভয়কেই ধন্যবাদ, এই দিনগুলিতে আমার প্রচুর প্রচেষ্টা বাঁচাতে পারত! আমি এই উত্তরটি গ্রহণ করছি, যেহেতু এটি সহজ এবং আরও দক্ষ তবে জন এর উত্তরটিও খুব প্রশংসিত। ছেলেরা!
কাইভসুকলেটতাজা

6

আমার গেমটিতে কাজ করার সময় আমার ঠিক একই সমস্যা ছিল এবং এটি গণিতটি সঠিকভাবে পেতে (চিরকাল) আমাকে চিরকালের জন্য নিয়ে যায়। সুতরাং এটি এখানে:

minDistanceToStop = 0.5 * acceleration * Math.Pow(velocityLinear() / acceleration, 2.0);

নিয়মিত গণিতে পুনরায় লিখিত:

(Acceleration / 2) * (linearVelocity / Acceleration)^2

যেখানে আপনার ক্ষেত্রে ত্বরণ 1 এবং লিনিয়ারভেলসিটি 10:

(1 / 2) * (10 / 1)^2
= 50 units to stop

সম্পাদনা

জিমির ফলাফল এবং ব্যাখ্যা দুটিই সঠিক। আমার সূত্রের প্রয়োজন আপনি বেগের অর্ধেক যোগ করুন।

minDistanceToStop = (0.5 * acceleration * Math.Pow(velocityLinear() / acceleration, 2.0)) + (velocityLinear() / 2);

অথবা

((Acceleration / 2) * (linearVelocity / Acceleration)^2) + (linearVelocity / 2)
((1 / 2) * (10 / 1)^2) + (10 / 2)
= 55

2
কেবল রেকর্ডের জন্য, ম্যাথ.প্যাও () এখানে একটি ভয়ঙ্কর, ভয়ানক ধারণা। এটি 'স্মার্টফোন' যথেষ্ট পরিমাণে স্মার্ট থাকলে এটি '2.0' এক্সপোনালটির বিশেষ ক্ষেত্রে হতে পারে তবে আপনি যেভাবেই এটি কাটাবেন, সেই এক্সপ্রেশনটিকে '0.5 * লিনিয়ারভেলোসিটি * লিনিয়ারভেলোসিটি / এক্সিলারেশন' হিসাবে আবারও লিখে একটি বিশাল জয় হওয়া উচিত।
স্টিভেন স্টাডনিকি

4

বেগ পরিবর্তন সম্পর্কে গণনা হ'ল ক্যালকুলাসের সম্পূর্ণ পয়েন্ট। আমি কিছুক্ষণের মধ্যে এটি করি নি তাই আমার মাথার উপরের অংশটি মনে নেই, তবে আমি মনে করি যে আপনার পরিস্থিতি কেবল -১ এর অবিচ্ছেদ্য হয়ে উঠছে (অর্থাত্ হতাশা)।


0

এই ধ্রুবক ত্বরণ গতি নয়?

X = Xi + V*t + (1/2) * a * (t^2)

কোথায়:
এক্স: শেষ অবস্থান
একাদশ: প্রাথমিক অবস্থান
ভি: वेग
টি: সময়
ক: ত্বরণ

এখানে কেবলমাত্র জটিল অংশটি হল "টি" কীভাবে নির্ধারণ করা যায়, যেহেতু আমরা -1 এর ত্বরণ নিয়ে ধীর হয়ে যাই, তারপরে আমরা t = V / a গণনা করতে পারি, তারপরে টি 10 ​​হয়।

সুতরাং,
Xi: 540
ভি: 10
টি: 10
এ: -1

সব কিছু রাখুন:

X = 540 + 10*10 + (1/2) * (-1) * (10 ^ 2) 
X = 540 + 100 + (-50) 
X = 540 + 50 
X = 590

সূত্রটি ত্বরণের একীকরণের মাধ্যমে এসেছে: এখানে পরীক্ষা করুন

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