একটি সাধারণ পুলের গেমের জন্য যেখানে স্পিনটি অ্যালগরিদমকে মডেল করা হয় না এটি বেশ সহজ।
- কোনও সংঘর্ষ হয় কিনা তা পরীক্ষা করতে, বলগুলির মধ্যকার দূরত্বটি তাদের ব্যাসার্ধের যোগফলের চেয়ে ছোট কিনা তা পরীক্ষা করে দেখুন।
- প্রভাবের সাধারণ গণনা করুন
- গতির পার্থক্য, স্বাভাবিক, প্রভাব সহগ এবং জনগণের ভিত্তিতে প্রভাব বলের গণনা করুন
- উভয় বলের জন্য প্রভাব বল প্রয়োগ করুন
সিউডো কোডে এটি হয়ে যায়:
vector difference = ball2.position - ball1.position
float distance = sqrt(difference)
if (distance < ball1.radius + ball2.radius) {
vector normal = difference / distance
//vector velocityDelta = ball2.velocity - ball1.velocity
vector velocityDelta = ball1.velocity - ball2.velocity
float dot = dotProduct(velocityDelta, normal)
if (dot > 0) {
float coefficient = 0.5
float impulseStrength = (1 + coefficient) * dot * (1 / ball1.mass + 1 / ball2.mass)
vector impulse = impulseStrength * normal
ball1.velocity -= impulse / ball1.mass
ball2.velocity += impulse / ball2.mass
}
}
আপনি যদি সমস্ত বলের সমান ভর থাকে এবং পুল গেমের জন্য সমস্ত বলের ধ্রুবক ব্যাসার্ধও ধরে থাকেন তবে আপনি সেই সরলিকরণগুলি ছাড়াই কোডটি আপনার পক্ষে আরও কার্যকর হবে।
কোডটি এই টিউটোরিয়ালের উপর ভিত্তি করে তৈরি হয়েছে , তবে আমার মনে আছে সেখানে ইমপ্লাস গুণটি ভুল ছিল।