উত্তর:
প্যারাবোলিক ট্রাইেক্টরি ফাংশনটি হিসাবে সংজ্ঞায়িত করা হয়:
Fx = Vox*t + Ox;
Fy = -0.5 * g * t * t + Voy*t + Oy;
জ্ঞাত মান:
P: the target point.
O: the origin point.
g: gravity.
t: time needed to impact.
অজানা মান:
Vo: Initial Velocity
'ভিও' গণনা করার জন্য, আমরা F ফাংশনকে মান দিতে পারি:
't' = flight time 'duration'
'F' = target point 'P'
(Px-Ox)
Vox = --------
duration
Py + 0.5* g * duration * duration - Oy
Voy = ---------------------------------------
duration
উত্স থেকে এফ সমীকরণকে মান দেওয়ার জন্য আপনি এখন সমস্ত মান অর্জন করতে পারেন:
When t = 0 => F == O (Origin)
When t = duration => F == P (Target)
আমাকে সম্প্রতি একটি অনুরূপ সমস্যা সমাধান করতে হয়েছিল, আমি ইতিমধ্যে উল্লিখিত উইকিপিডিয়া পৃষ্ঠায় 'ড্যান দ্য ম্যান'-এর সূত্রের ভিত্তিতে দুটি সমাধান নিয়ে এসেছি: একটি প্রক্ষিপ্তের ট্রাজেক্টোরি
এই সমাধানটিতে আপনার নিখুঁতভাবে লঞ্চ কোণটি স্থির করা বা এক্স বেগের প্রয়োজন হবে। আমরা একটি নির্দিষ্ট কোণে প্রক্ষেপণ চালু করায় ওয়াই বেগের প্রয়োজন হয় না।
সমাধান 1, প্রবর্তন কোণ স্থির হয়েছে, বেগ গণনা করুন:
g = 9.81; // gravity
x = 49; // target x
y = 0; // target y
o = 45; // launch angle
v = (sqrt(g) * sqrt(x) * sqrt((tan(o)*tan(o))+1)) / sqrt(2 * tan(o) - (2 * g * y) / x); // velocity
সমাধান 2, বেগ স্থির হয়েছে, প্রবর্তন কোণ গণনা করুন:
g = 9.81; // gravity
v = 40; // velocity
x = 42; // target x
y = 0; // target y
s = (v * v * v * v) - g * (g * (x * x) + 2 * y * (v * v)); //substitution
o = atan(((v * v) + sqrt(s)) / (g * x)); // launch angle
আমার ক্ষেত্রে এই সমাধানগুলি বেশ ভালভাবে কাজ করেছে।
যদি আপনি গাণিতিকভাবে সঠিক হয় কিনা সেদিকে খেয়াল রাখেন না, কেবল এটি যথেষ্ট সঠিক দেখাচ্ছে, সরল পথটি গণনা করুন এবং আপনার অনুমানকে সেই পথটি অনুসরণ করুন, তবে এটির দূরত্বের ক্রিয়া হিসাবে সেই লাইনের স্বাভাবিক বরাবর "এটি ধাক্কা দিন" রেখাংশটি রেখাংশের মধ্যভাগের কাছাকাছি যাওয়ার সাথে সাথে লাইন সেগমেন্টের মধ্য থেকে দূরে যেতে যেতে এটি উত্থিত হয়।
আপনি এটির জন্য একটি সাইন ওয়েভ ব্যবহার করতে পারেন, -90 থেকে +90 (যেখানে -90 লাইন বিভাগের বাম পয়েন্ট, 90 ডান পয়েন্ট, এবং আপনি মাঝখানে লিরপ করুন) ব্যবহার করে, এবং ফলাফলটি গুণান একটি ধ্রুবক দ্বারা এটি স্কেল।
আপনার যদি খাঁটি সঠিক গাণিতিক / শারীরিক উত্তরের প্রয়োজন হয় তবে এটি কোনও লাভ করবে না। আপনি যদি না করেন তবে এটি সম্ভবত আপনার পক্ষে বেশ ভালভাবে কাজ করতে পারে!
ভুলে যাবেন না, গেম প্রোগ্রামিং হ'ল বাস্তববাদের পরিবর্তে সঠিক (এবং গণনা করার জন্য সস্তা) মায়াবোধ ব্যবহার করা using
আপনার যদি ঠিক এমন কিছু প্রয়োজন হয় যা ঠিক ঠিক হয় এবং একটি নির্দিষ্ট বেগ থাকে তবে আপনি এই খুব সরলিকৃত পদ্ধতিটি ব্যবহার করতে পারেন।
distance = to.x - from.x;
angleToPoint = atan2(to.y - from.y, to.x - from.x);
distanceFactor = 1/1000;
angleCorrection = (PI*0.18) * (distance * distanceFactor);
velocity.X = cos(angleToPoint+angleCorrection) * power;
velocity.Y = sin(angleToPoint+angleCorrection) * power;
দূরত্ব নেতিবাচক হতে পারে তবে এটি এখনও কাজ করবে কারণ কোণটি দূরত্বের উপরও নির্ভর করে। দূরত্বটি যদি negativeণাত্মক হয় তবে যে কোণটি যুক্ত করতে হবে তা negativeণাত্মক।
সঠিক মানটি খুঁজে পেতে আপনার দূরত্ব ফ্যাক্টরের সাথে চারপাশে খেলতে হবে। এটি অনুমানের মাধ্যাকর্ষণ এবং শক্তির উপর নির্ভর করে। এটি প্রজেক্টিলটি আবশ্যক সর্বোচ্চ দূরত্বে 1 টির কাছাকাছি হওয়া উচিত।