পুল গেমের জন্য কি অ্যালগরিদম আছে?


14

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

আমি বলতে চাইছি, যখন একটি বল অন্যটি আঘাত করে, তখন উভয়ের দিকনির্দেশনা গণনা করার জন্য আমার একটি অ্যালগরিদম প্রয়োজন। এটি একে অপরকে এবং গতিতে কোথায় আঘাত করেছিল তার সঠিক কোণের উপর নির্ভর করবে।

আমি জাভা কোডিং অনুশীলন করতে চাই, তাই আমি জাভা কোড বা প্যাকেজটি খুঁজছি যা এই জাতীয় কোড রয়েছে।


2
আপনি যদি এটি নিজে সমাধান করতে চান তবে আপনার সম্ভবত সম্ভবত ভেক্টরগুলির কিছু জ্ঞানের প্রয়োজন রয়েছে। ভাগ্যক্রমে, কেউ এই দিনটিতে অন্য কোনও স্থানে রৈখিক গণিতে দুর্দান্ত হাঁটাচলা পোস্ট করেছে ।
doppelgreener

হয়তো এই সাইটের সাহায্য করতে পারেন archive.ncsa.illinois.edu/Classes/MATH198/townsend/...

উত্তর:


8

যদিও মৌলিক গোলক-গোলকের সংঘর্ষ সনাক্তকরণ / প্রতিক্রিয়া বেশ সহজ, একটি ভাল পুল সিমুলেশন জন্য সঠিকভাবে এটি করা আরও জটিল হবে, কারণ আপনার স্পিন মোকাবেলা করতে হবে।

আপনি কি পদার্থবিজ্ঞানের ইঞ্জিনগুলির অস্তিত্ব সম্পর্কে সচেতন? কয়েকটি জনপ্রিয় উদাহরণ এগুলি (এবং তারা কেবল পুল বল সংঘর্ষের চেয়ে আরও অনেক কিছু করতে পারে)। পুল গেমটি তৈরির জন্য সম্ভবত একটি ভাল পছন্দ, তবে জাভা শেখার জন্য এতটা নয় ...

2 ডি তে

বক্স 2 ডি: http://www.box2d.org

চিপমুন্ক: http://code.google.com/p/chipmunk-physics/

3 ডি-তে

বুলেট: http://bulletphysics.org/

ওডিই: http://www.ode.org

যদি আপনি বড় বাজেটের বাণিজ্যিক গেমটি তৈরি করে থাকেন:

হাভোক: http://www.havok.com


1
এর মধ্যে কোনটি জাভা ফিজিক্স ইঞ্জিন?
রিকিট

এখানে বক্স 2 ডি, চিপমুনক, বুলেট এবং ওডিই-র জাভা বন্দরগুলি রয়েছে, বা কমপক্ষে বাইন্ডিং রয়েছে
bluescrn

6

আপনি " পুল নিজের পাঠের পাঠগুলি: চেনাশোনা বা ক্ষেত্রের মধ্যে দ্রুত, সঠিক সংঘর্ষ সনাক্তকরণ " নিবন্ধে আগ্রহী হতে পারেন যদি আপনি "নিজের নিজের রোলটি" যেতে চান তবে। এটি জাভা-নির্দিষ্ট নয়, তবে একটি সাধারণ সিমুলেশনের জন্য জড়িত কিছু অ্যালগরিদমগুলি নিয়ে আলোচনা করে।


2

একটি সাধারণ পুলের গেমের জন্য যেখানে স্পিনটি অ্যালগরিদমকে মডেল করা হয় না এটি বেশ সহজ।

  1. কোনও সংঘর্ষ হয় কিনা তা পরীক্ষা করতে, বলগুলির মধ্যকার দূরত্বটি তাদের ব্যাসার্ধের যোগফলের চেয়ে ছোট কিনা তা পরীক্ষা করে দেখুন।
  2. প্রভাবের সাধারণ গণনা করুন
  3. গতির পার্থক্য, স্বাভাবিক, প্রভাব সহগ এবং জনগণের ভিত্তিতে প্রভাব বলের গণনা করুন
  4. উভয় বলের জন্য প্রভাব বল প্রয়োগ করুন

সিউডো কোডে এটি হয়ে যায়:

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
    }
}

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

কোডটি এই টিউটোরিয়ালের উপর ভিত্তি করে তৈরি হয়েছে , তবে আমার মনে আছে সেখানে ইমপ্লাস গুণটি ভুল ছিল।


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

@ পোল্ডি যদি বিন্দুটি নেতিবাচক হয় তবে বলগুলি ইতিমধ্যে একে অপরের থেকে দূরে চলেছে। সেক্ষেত্রে সংঘর্ষ হ্যান্ডেল করার দরকার নেই।
মিসেল 15

আমি আপনার কোডটির আমার সংস্করণটি এখানে সবেমাত্র পেয়েছি : আদর্শ one.com/DhsAoW এবং আমি 110,90 এবং 100,100 পজিশনের জন্য এবং 0,2 এবং 0, -3 এর গতিবেগের জন্য -0.707 পাচ্ছি। এটি একটি কমবেশি মাথার সংঘর্ষ। (ধরুন প্রাথমিক ব্যাসার্ধ-ভিত্তিক সংঘর্ষ শনাক্তকরণ চেক ইতিমধ্যে ঘটেছে)।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.