পদার্থবিজ্ঞানের ইঞ্জিনে এক সাথে সংঘর্ষগুলি পরিচালনা করার সর্বোত্তম উপায় কী?


13

আমি জাভাস্ক্রিপ্টে একটি 2 ডি পদার্থবিজ্ঞান ইঞ্জিন লিখছি যাতে আমি ভিডিও গেমগুলিতে পদার্থবিজ্ঞানের বিষয়ে আরও জানতে পারি। দৃ it় দেহের সংঘর্ষের জন্য আমার এটি সঠিকভাবে কাজ করছে, যদি একই সঙ্গে কোনও দেহ দুটি বা তার বেশি সংখ্যক দেহের সাথে সংঘর্ষ হয় তবে।

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

একে অপরের সাথে সংঘর্ষে থাকা 3+ অবজেক্টের জন্য আমার ইঞ্জিনকে কাজ করতে আমি কী পদ্ধতির অন্বেষণ করতে পারি?


2
সম্পর্কিত: গেমদেব.স্ট্যাকেক্সেঞ্জার্ভিউ / সেকশনস / ১83৮83 //২ এবং গেমদেব.স্ট্যাকেক্সেঞ্জাওয়েজ / প্রশ্নগুলি / ২18১1১/২ এবং আমি নিশ্চিত যে আরও কিছু আছে, আমি এখনই ঠিক খুঁজে পাচ্ছি না।
মাইকেলহাউস

উত্তর:


11

আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করি (টঞ্জের http://www.richardtonge.com/ এর বিভক্ত বিভাজনের অনুরূপ ):

  • আপনার দৃশ্যে / প্রসঙ্গে সংঘর্ষের সমস্ত জোড় সনাক্ত করুন। (ক, খ) এরকম জুটি হোক। একটি ভূত / ভর বিভাজনের ধারণা প্রয়োগ করুন: যদি A এম সংস্থাগুলির সাথে যোগাযোগ করে এবং বি অন্যান্য অন্যান্য সংস্থার সাথে যোগাযোগ করে, তবে অস্থায়ীভাবেm_A/Mএর বি এবং এর বিয়ের ভর সেট করুনm_B/N
  • প্রতিটি জোড় (A, B) এর জন্য গণনা প্রতিক্রিয়া / পুনরুদ্ধার বল অবদান এবং এই অবদানগুলি এ এবং বি এর নিজস্ব সংগ্রহকারীর মধ্যে সঞ্চয় করে
  • আবেগ থেকে পুনরুদ্ধারের গতি গণনা করুন (যেমন আপনি বলেছেন) এবং এগুলিকে একই ফ্যাশনে সংরক্ষণ করুন ( প্রতিটি (এ, বি) জোড়ের জন্য নিজস্ব সংগ্রহকারীর মধ্যে ডেল্টাভিভি বেগের অবশিষ্টাংশ হিসাবে )
  • জরিমানার স্থানচ্যুতি গণনা করুন (পুনরায়, স্থানচ্যুতি জমে, তাত্ক্ষণিকভাবে প্রয়োগ করবেন না!)
    • সংঘর্ষের জোড়গুলির দলগুলির হিসাবে পূর্বে মনোনীত সমস্ত সংস্থার জনগণকে পুনরায় সেট করুন ( m_A = m_A * Mএবং m_B = m_B * N)

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

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

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

আপডেট: সংঘর্ষের কাছে কীভাবে যেতে হবে সে সম্পর্কিত কিছু তথ্য (এবং সেই বিষয়টির জন্য স্ব-সংঘর্ষ) এই কাগজপত্রগুলিতে পাওয়া যাবে:

আমার প্রস্তাবিত পদ্ধতির দীর্ঘ অবলম্বন করে এটি একটি মূল অবদান নয়, অনেক গেম এটি প্রশংসনীয় ফলাফলের সাথে ব্যবহার করে এবং এটি জ্যাকোবসেন তার হিটম্যান গেম ইঞ্জিনে সেরাভাবে নিযুক্ত করেছিলেন।

কিছুটা ব্যবহারিক অভিজ্ঞতা থেকে, পেনাল্টি ফোর্সগুলি (অনুপ্রবেশের দূরত্ব থেকে লৌকিক বা তাত্পর্যপূর্ণ ঝর্ণাগুলির সাথে তাদের ইনপুট পাওয়ানোর অনুরূপ) সঠিকভাবে অনুপ্রবেশগুলি সমাধান করে না যখন দেহগুলির সংঘর্ষে অন্যান্য বাহিনী তাদের চেয়ে বৃহত্তর হতে পরিচালিত করে। এ কারণেই আমি তিনটি (প্রায় নিখরচায়) পদ্ধতির সংমিশ্রণটি বেছে নিয়েছি: নিউটোনীয় প্রতিক্রিয়া বাহিনী (আপনি প্রাচীরকে ধাক্কা দেন, প্রাচীরটি পিছনে ধাক্কা দেয়), অনুপ্রেরণা থেকে প্রাপ্ত বেগ (স্নুকারের বলগুলিতে সংঘর্ষ হয়) এবং একটি প্রাকৃতিক "দেহগুলি একে অপরের থেকে জ্যামিতিকভাবে সরিয়ে নিয়ে যান "সমাধান। তারা একসাথে সমস্ত কিছু সরবরাহ করে বলে মনে হচ্ছে: বেশিরভাগ থেকে মুক্তি পানকুৎসিত ইন্টারপেনেট্রেশন শিল্পকর্মগুলি, সংঘর্ষকারী সংস্থাগুলি দীর্ঘমেয়াদে একে অপরের সাথে যোগাযোগের প্রবণতা রাখে (পুনরুদ্ধারের বেগ এবং বাহিনীর কারণে - কমপক্ষে যে বাহিনী সংঘর্ষের পরিস্থিতিতে লাশগুলিকে টেনে নিয়ে যাওয়ার প্রবণতা বাতিল করে দিয়েছিল এবং দেহগুলি একে অপরের থেকে দূরে সরে গেছে) । শেষ অবধি, এই সাধারণ তবে সাধারণ ধারণাটি আরও বোঝার জন্য আমি এই স্লাইডগুলি বিশ্লেষণ করার পরামর্শ দিচ্ছি ।

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


ধন্যবাদ (+1)! 'পুনরুদ্ধারের বেগ' এবং 'জরিমানা স্থানচ্যুতি' কী কী? এছাড়াও, আপনি কেন বলছেন যে ভারলেট ইন্টিগ্রেশনটি 'আপত্তিজনক'? আপনি কি মনে করেন এটি ব্যবহার করা খারাপ পদ্ধতি?
ক্যাম

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

1
জমকালো উত্তর! আমি যদিও অন্য প্রশ্ন আছে। বলুন যে আমি পুনরুদ্ধারের বেগ সংগ্রহ করি, তারা কি খুব অ-বাস্তবসম্মত সংখ্যায় যোগ করবে না? আমি যদি প্রতিটি সংঘর্ষকে অবজেক্ট এ এর ​​সাথে পৃথকভাবে চিকিত্সা করি এবং প্রতিটি বস্তুর উপর প্রভাবগুলি যুক্ত করে থাকি তবে কি বস্তুর মধ্যে এর প্রবণতা ছড়িয়ে থাকবে না? পরিবর্তে সম্পূর্ণ অনুপ্রেরণা প্রয়োগ করা হবে যা আমার স্বজ্ঞাতভাবে ভুল বলে মনে হচ্ছে
ক্যাম

এটি একটি খুব ভাল প্রশ্ন .. এক দৃষ্টিকোণ থেকে, অনুপ্রবেশগুলি অতিরিক্ত গতিতে অবদান রাখার পক্ষে প্রশংসনীয় বলে মনে হয়। এখানে আমার (সম্ভবত ত্রুটিপূর্ণ!) যুক্তি রয়েছে: কল্পনা করুন তিনটি পুল / স্নুকার বল সংঘর্ষে। তাদের মধ্যে একটির এই অ্যাডিটিভ ফ্যাশনে অন্য দুজনের কাছ থেকে অবদান নেওয়া উচিত। প্রথমদিকে, আমি এই অবদানগুলি ওজন করে ভেবেছিলাম এবং চূড়ান্ত বেগের জন্য একটি ওজনযুক্ত গড় গণনা করেছি, তবে যেহেতু আমি দ্রুত ফলাফল চেয়েছি, তাই আমি এই ধারণাটি এড়িয়ে গেছি। সব মিলিয়ে, সংঘর্ষকারী বলটি অবশ্যই বাকি দুটির থেকে বেগের অবদান পাবে। সম্ভবত একটি হাইস্কুল পাঠ্য বই সাহায্য করতে পারে।
teodron

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

1

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

উদাহরণস্বরূপ Box2DJS দেখুন: http://box2d-js.sourceforge.net/index2.html


-1

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

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

সম্পাদনা: সম্ভবত আমি এই জাতীয় কিছু নিয়ে এসেছি /physics/296767/mpleple-cOLide-balls

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