সংঘর্ষের রেজোলিউশন


23

সংঘর্ষগুলির জন্য কীভাবে চেক করতে হয় তা আমি বেশ ভাল জানি তবে সংঘর্ষটি কীভাবে ভালভাবে পরিচালনা করতে হয় তা আমি জানি না।

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

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

আমার মাথায় টপ ডাউন 2 ডি গেম রয়েছে তবে এর সাথে এর খুব বেশি সম্পর্ক আছে বলে আমি মনে করি না। সংঘর্ষগুলি সাধারণত পরিচালনা করা হয় কীভাবে?

উহর পক্ষে এই প্রশ্ন জিজ্ঞাসা করা হয়েছে


1
আপনি কি খেলার ধরণ পরিষ্কার করতে পারেন? "টপ ডাউন 2 ডি" বলতে প্রচুর জিনিস বোঝাতে পারে: একটি জেলদা শৈলীর অ্যাকশন-অ্যাডভেঞ্চার গেম, একটি উল্লম্ব-স্ক্রোলিং শ্যুটার, বা পকেট বিলিয়ার্ডস গেম। এইগুলির মধ্যে হ্যান্ডলিং সংঘর্ষগুলির খুব আলাদা স্ট্যান্ডার্ড শৈলী থাকবে!
ইয়ান শ্রায়বার

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

উত্তর:


16

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

প্রাকৃতিক চেহারার সংঘর্ষের সমাধানের জন্য কোডিসেক দুটি জিনিস করেন:

  • তার সংঘর্ষ শনাক্তকরণ কার্যটি দুটি বস্তুর সংঘর্ষের সঠিক সময় গণনা করে।
  • তিনি সংঘর্ষের সময় নতুন বেগগুলি পুনরায় গণনা করেন, যাতে বস্তু কখনই ওভারল্যাপ হয় না।

আমি কোডিসেকের সংঘর্ষ সনাক্তকরণ এবং রেজোলিউশনের ভিত্তিতে একটি ডেমো আপলোড করেছি ।

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


1
আপনার ডেমো লিঙ্কটি নষ্ট হয়ে গেছে বলে মনে হচ্ছে।
ashes999

@ অ্যাশেস ৯৯৯: লিঙ্কটি এখনই স্থির!
লেফটিয়াম

এটি চেনাশোনাগুলির জন্য একটি অ্যালগরিদম। বাক্সগুলি কেমন?
আন্তন চিকিন

@ অ্যান্টন চিকিন: কোডিসেকের সংঘর্ষের রেজোলিউশন অ্যালগরিদমটিতে কেবল তিনটি ইনপুট লাগে: সংঘর্ষের স্থানে ভর, বেগ এবং সাধারণ normal সংঘর্ষগুলি সনাক্ত করার সময় কোডিসেক সর্বদা সংঘর্ষের স্থানে সাধারণ গণনা করে। তিনি একটি বক্স অন্য বক্সে আঘাত সহ বিভিন্ন ধরণের সংঘর্ষ সনাক্তকরণের ব্যাখ্যা দিয়েছেন explains এই সংঘর্ষ সনাক্তকরণ অ্যালগরিদমকে কেবল সংঘর্ষের রেজোলিউশন অ্যালগরিদমে প্লাগ ইন করুন। সম্পূর্ণ ব্যাখ্যার জন্য কোডিসেকের বইয়ের 8-10 অধ্যায় দেখুন। (দ্রষ্টব্য ঘূর্ণন পদার্থবিজ্ঞানের আরও গণিতের প্রয়োজন, যা পরে
বইতেও

1
@ থমাসহিলবার্ট: ডেমো সোর্স কোড এবং উইন্ডোজ এক্সিকিউটেবলগুলি এখন লেফটিয়াম
মাস্টারয়েডে

6

আপনি যদি বস্তুগুলি স্থানান্তরের আগে সংঘর্ষটি পরীক্ষা করেন তবে তার পরিবর্তে? অথবা, অন্য কথায়, আপনি যদি নতুন অবস্থানটিকে প্রত্যাখাত করেন তবে যদি বস্তুগুলির সংঘর্ষ হয়, সেই ক্ষেত্রে পুরানোটিকে পুনরায় ব্যবহার করছেন?

pseudocode:

  tmpPosition1 = Obj1.position
  tmpPosition2 = Obj2.position
  updatePosition(Obj1)
  updatePosition(Obj2)
  if collided(Obj1,Obj2) then
      updateVelocities( Obj1, Obj2 )
      Obj1.position = tmpPosition1
      Obj2.position = tmpPosition2
  endif

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


1
এটি বেশ বিরক্তিকর, কারণ আপনি সহজেই অবজেক্টগুলির সমান্তরাল স্থানান্তর করতে পারবেন না কারণ আপনি যদি অন্য বস্তুগুলিকে স্পর্শ করেন তবে আপনি আল-এ যেতে পারবেন না।
ইক্কে

যতক্ষণ না আপনি আলাদাভাবে x এবং y সমাধান
instantaphex

6

যখনই দুটি বস্তু ওভারল্যাপ করে, তারা একে অপরের দিকে বা দূরে চলেছে কিনা তা পরীক্ষা করুন। একে অপরের দিকে অগ্রসর হলেই সংঘর্ষটি করুন।

এটি ভেক্টর ম্যাথ দিয়ে খুব সহজ, সহজভাবে গণনা করুন:

ডট_প্রডাক্ট (বি। পজিশন - এ পজিশন, এ.বেলসিটি - বি.ভোলসিটি)

ফলাফলটি ইতিবাচক হলে অবজেক্টগুলি একে অপরের দিকে এগিয়ে যায়।


4

আমার ভুল বোঝাবুঝি হতে পারে তবে মনে হচ্ছে আপনি দুটি প্রশ্ন জিজ্ঞাসা করছেন: ১. সংঘর্ষের সমাধানের সাধারণ উপায়গুলি কী যা আপনি সন্ধান করছেন তা হল 'ইমপালস বেইজড সিমুলেশন', এবং সেখানে প্রচুর কাগজপত্র রয়েছে যে আমার চেয়ে ভাল ন্যায়বিচার এটি করতে পারে do

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

কৌণিক প্রতিক্রিয়ার জন্য, ভাগ্যক্রমে জড়তার সর্বাধিকতম এবং সর্বনিম্ন মুহূর্তগুলি সর্বদা দুটি অर्थোগোনাল অক্ষ (2 ডি তে) কমে যেতে পারে, যার অর্থ একটি ম্যাট্রিক্স গুণমান সাধারণত কাজ করবে এবং আপনি যদি এইগুলি এক্স এবং ওয়াই অক্ষের সাথে যুক্ত করেন তবে এটি রূপান্তরিত হয় একটি 2 ডি ভেক্টর।

আপনার যখন সংঘর্ষ হয় তখন আপনি সংঘর্ষের স্থানে লিনিয়ার এবং কৌণিক মুহুর্তের উপর ভিত্তি করে প্রতিক্রিয়া খুঁজে বের করেন এবং একটি ভাল ফজ ফ্যাক্টর হ'ল, যদি আপনার আন্তঃবিবাহ হয় তবে দুটি দেহকে আলাদা করার জন্য কিছু পেনাল্টি ফোর্স প্রয়োগ করা (উপরে উল্লিখিত হিসাবে)।

বিন্দু থেকে আপনি আপত্তিজনক আচরণ নিয়ন্ত্রণের জন্য আরও বেশি নিয়ম যুক্ত করবেন, সর্বোচ্চ কৌণিক গতি ক্যাপ করার মতো জিনিস যাতে শীর্ষগুলি ইত্যাদির মতো স্পিন না করে, তবে এটি একটি ভাল শুরু।

পারলে সহজ রাখুন।

  1. আপনি কীভাবে বহু দেহের সংঘর্ষের সমস্যার সমাধান করবেন

এটি করার একমাত্র আসল উপায় হ'ল লিনিয়ার সমীকরণ এবং প্রচুর সমাধানের ব্যবস্থা। এটি করার ব্যবহারিক উপায়টি হ'ল উপরের মতো একটি সিস্টেম রয়েছে এবং পদার্থবিজ্ঞান সময়ের সাথে সাথে কেবল প্রাকৃতিকভাবে সমাধান করে।

বেশিরভাগ গেমগুলি যা ঘূর্ণায়মান, বা চলমান পৃষ্ঠগুলিতে দাঁড়ানোর মতো কাজ করে, সেখানে পদার্থবিদ্যার সময় পদক্ষেপের জন্য আপনার পাগুলি কোনও পৃষ্ঠের সাথে সংযুক্ত থাকে (বা রাস্তায় চাকা) থাকে (যার ফলস্বরূপ আন্তঃজাগরণ-প্রতিক্রিয়া চক্র হয় এবং কাজ করবে না)।

আশাকরি এটা সাহায্য করবে. আপনার যদি কোনও গণিতের উদাহরণের প্রয়োজন হয় তবে আমাকে জানান।


3

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

penalty forceস্প্রিং-ড্যাম্পারের মতো প্রয়োগ করা হয়, যেখানে আপনি অনড় দেহের অভ্যন্তরে আরও বেশি প্রবেশ করান এবং পরবর্তী ফ্রেমে কম হয়ে যায় সেখানে পেনাল্টি ফোর্স বাড়ানো হয়। এটিকে ঝর্ণা হিসাবে ভাবুন। দুটি অনমনীয় দেহ আন্তঃপ্রবিষ্ট হয়ে গেলে, তারা প্রত্যেকে একটি অদৃশ্য বসন্তের মুখোমুখি হয় যা তাদের অগ্রগতিকে কমিয়ে দেয় (যা আরও আন্তঃপ্রবেশকে বাধা দেয়) এবং penalty forceমৃতদেহগুলি আর অনুপ্রবেশ না করা পর্যন্ত পূর্বের উল্লিখিত প্রয়োগ করে ।

এটি একটি বিস্তৃত বিষয় তবে আশা করি উপরোক্ত তথ্যগুলি আপনাকে শুরু করবে।


সুতরাং আন্ত-অনুপ্রবেশ রোধ করার পরিবর্তে এই পদ্ধতিটি এটির অনুমতি দেয় তবে প্রতিরোধ সরবরাহ করে, প্রায় বস্তুর মতো সংকুচিত হচ্ছে?
সিসকোআইফোন

এটি প্রতিরোধ সরবরাহ করে, হ্যাঁ, প্রতিরোধের শরীর যত বেশি প্রবেশ করার চেষ্টা করছে তত বাড়ায়। অনুশীলনে, আপনার যদি পর্যাপ্ত পরিমাণ ডেল্টা সময় থাকে (উদাহরণস্বরূপ 10 মিমি) এটি কোনও আন্তঃনিরীক্ষণ তৈরি করে না। এই পদ্ধতির আসল সুবিধাটি হ'ল যখন আপনার দেহগুলি বিভিন্ন কারণে আন্তঃগঠিত হয়ে থাকে (অবস্থান পরিবর্তন করা হয়েছিল, তারা শক্ত অনড় দেহ এবং তাদের অবস্থানগুলি সংশোধন করা হয়েছিল) এবং এখন তাদের পৃথক করা দরকার, কারণ এই কৌশল ছাড়াই দেহগুলি ধীরে ধীরে পৃথক না হয়ে বিস্ফোরিত হবে।
সমুরসা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.