সম্পাদনা / আপডেট: এখনই আমার সবচেয়ে বড় প্রশ্নটি হল পদক্ষেপ 3 এর "t = ..." সমীকরণটি একটি ভাল ধারণা বা এটির করার আরও ভাল উপায় whether বেশিরভাগ অন্যান্য ইস্যু আংশিক বা সম্পূর্ণ সমাধান করা হয়েছে, কিন্তু কোন মন্তব্য বা উত্তর এই ইস্যুতে সত্যই স্পর্শ করেনি। আবার কোনও বিশ্লেষণাত্মক সমাধান সম্ভবত প্রয়োজন হয়, বেগ এবং দূরত্বগুলি খুব বড় এবং যে কোনও পুনরাবৃত্তির / পুনরাবৃত্ত সমাধানের জন্য (মন্তব্যগুলিতে নীচে কয়েকটি প্রস্তাব দেওয়া হয়) এর জন্য বস্তুগুলি খুব ছোট, যা আমি ভাবতে পারি (যদিও সেখানে থাকলে একটি বিশেষ পুনরাবৃত্তি / পুনরাবৃত্তি সমাধান যা এই ধরণের পরিস্থিতিগুলি ঠিকঠাকভাবে পরিচালনা করবে তবে আমি অবশ্যই এটি উন্মুক্ত করছি। এ পর্যন্ত আপনার সহায়তার জন্য আপনাকে অনেক ধন্যবাদ, আপনারা সবাই দুর্দান্ত এবং আমি আপনার চিন্তাভাবনা এবং সাহায্যের সত্যই প্রশংসা করি!
আমি ছোট, উচ্চ-গতির বস্তুর মধ্যে সংঘর্ষ সনাক্ত করার চেষ্টা করছি। এটি এমন একটি পরিস্থিতি যেখানে টানেলিং খুব সহজেই ঘটতে পারে এমনকি তুলনামূলক কম গতিতেও।
রে কাস্টিং কাজ করবে না, যেহেতু এটি দুটি উচ্চ-গতির বস্তুর মধ্যে একটি সংঘাত সনাক্ত করছে, একটি বস্তু এবং স্থির প্রাচীরের মধ্যে নয়। (যদি আমি রে কাস্টিংয়ের ভুল বোঝাবুঝি না করি?) পারফরম্যান্সটি খুব বিবেচ্য; যদি সম্ভব হয় তবে আমি একটি বড় পারফরম্যান্স হিট এড়াতে চাই। আমি ইতিমধ্যে একটি কার্যকরী এবং খুব কার্যকর চতুষ্কোণ ( http://en.wikedia.org/wiki/Quadtree ) বাস্তবায়িত করেছি, তাই আমি নীচে বর্ণিত হিসাবে এটি পরিবর্তন এবং ব্যবহার করব।
সম্পাদনা: সময়ের ব্যবধান হ্রাস কাজ করবে না। এই সমাধানের জন্য গতি খুব বেশি, যার অর্থ পারফরম্যান্স হিটগুলি খুব দুর্দান্ত হবে, যদিও এখনও বেশিরভাগ সুড়ঙ্গ সংঘর্ষের অভাব রয়েছে । (উদাহরণস্বরূপ, আমার কাছে প্রায় 1 ইউনিট আকারের একটি অবজেক্ট থাকতে পারে যা সময়ের ব্যবধানে কয়েক মিলিয়ন ইউনিট হিসাবে পরিমাপ করা গতিতে চলে ...)
প্রস্তাবিত সমাধান:
ধাপ 1:
প্রতিটি বস্তুর চলাফেরার চারদিকে একটি বাক্স তৈরি করুন, তারপরে সম্ভাব্য সংঘর্ষের প্রাথমিক তালিকা তৈরি করতে সেই বাক্সগুলিকে চতুষ্কোণে খাওয়ান। নীচের চিত্রটি দেখুন (এই চিত্রটি একটি বৃত্তের অবজেক্টকে এক অবস্থান থেকে অন্য অবস্থানে নিয়ে যাচ্ছে এবং চতুর্ভুজকে দেওয়া হবে এমন একটি আয়তক্ষেত্র তৈরি করে এমন গতিবিধি দেখায়):
পদক্ষেপ 2: (এই পদক্ষেপটি এড়িয়ে যেতে চান?)
কোয়াডট্রি দ্বারা উত্পাদিত সম্ভাব্য সংঘর্ষের তালিকাটি দেখুন। প্রতিটি সম্ভাব্য সংঘর্ষে আয়তক্ষেত্রগুলি ছেদ হয়েছে কিনা তা দেখুন। যদি তা হয় তবে 3 ধাপে এগিয়ে যান।
সম্পাদনা: নীচে, শান মিডলডিচ সুইপ্ট ভলিউম / ক্যাপসুলের ছেদ (যদি বস্তুগুলি বৃত্ত হয়) ব্যবহার করার পরামর্শ দেয়। এটি তিনটি বিকল্প ছেড়ে যায়: 1) সম্পূর্ণ পদক্ষেপ 2 এড়িয়ে যান। 2) আমার পদক্ষেপ 2 করুন। 3) এটি শান উপায়। শিনের উপায়টি আমার বাক্স ধারণার চেয়ে কম্পিউটারের চেয়ে ব্যয়বহুল হবে, তবে এটি আমার পথের চেয়ে আরও মিথ্যা ধনাত্মকতা ফেলে দেবে, এগুলি চূড়ান্ত পদক্ষেপে উঠতে বাধা দেয়।
অভিজ্ঞতা থেকে কেউ এই 3 টি পছন্দগুলির মধ্যে কোনটি সবচেয়ে ভাল তা বলতে পারেন? (আমি এই পদার্থবিজ্ঞানের ইঞ্জিনটিকে কয়েকটি ভিন্ন জিনিসের জন্য ব্যবহারের উদ্দেশ্যে নিয়েছি, তাই আমি "সাধারণভাবে সেরা" সমাধানটি সন্ধান করছি যা কেবলমাত্র একটি নির্দিষ্ট পরীক্ষার ক্ষেত্রে নয় যা কোন সমাধানটিকে সহজেই পরিমাপ করতে পারব না এমন পরিস্থিতিতে সবচেয়ে বিস্তৃত পরিস্থিতিতে সবচেয়ে দ্রুত কাজ করে works দ্রুততম)।
ধাপ 3:
নীচের টি = সমীকরণটি ব্যবহার করুন, যদি বৈষম্যমূলক (অর্থাৎ বর্গমূলের নীচে অংশ) নেতিবাচক বা 0 হয় না, কোনও সংঘর্ষ নেই, যদি ইতিবাচক হয় তবে টি মানটিকে সংঘর্ষের সময় হিসাবে ব্যবহার করুন (যার পরে এটি অনুযায়ী অবস্থানগুলি সামঞ্জস্য করা সহজ)। .. যদি উভয় বস্তুর সংঘর্ষের পরে অবিরত থাকে)। সমীকরণ:
t = (-1/2 sqrt ((2 এ ডাব্লু -2 a এক্স + 2 বি ওয়াই -2 বি জেড -2 সি ডাব্লু + 2 সি এক্স -2 ডিওয়াই + 2 ডিজে)) -4 2-4 (ডাব্লু ^ 2- 2 ডাব্লু এক্স + এক্স ^ 2 + ইয়ু 2-2 ই জে + জেড ^ 2) (এ ^ 2-2 এ সি + বি ^ 2-2 বি ডি + সি ^ 2 + ডি ^ 2-আর ^ 2-2 r এসএস ^ 2)) - একটি ডাব্লু + একটি এক্সবি ওয়াই + বি জেড + সি ডাব্লুসিসি এক্স + ডি ইডি জেড) / (ডাব্লু ^ 2-2 ডাব্লু এক্স + এক্স ^ 2 + ই ^ 2-2 ওয়াই জেড + জেড ^ 2 ) ।
যেখানে (1 এবং 2 অবজেক্ট 1 এবং 2 বোঝাতে ব্যবহৃত হয়):
t হল 0 এবং -1 এর মধ্যে নেতিবাচক সময় মান, যেখানে 0 বর্তমান ফ্রেম, এবং -1 পূর্ববর্তী ফ্রেম;
a = x অবস্থান 1;
b = y অবস্থান 1;
সি = এক্স অবস্থান 2;
d = y অবস্থান 2;
ডাব্লু = এক্স বেগ 1;
x = এক্স বেগ 2;
y = y বেগ 1;
z = y বেগ 2;
r = ব্যাসার্ধ 1;
s = ব্যাসার্ধ 2;
উত্স: (^ 2 অর্থ বর্গক্ষেত্র)
বস্তুর গতিগুলির জন্য প্যারাম্যাট্রিক সমীকরণগুলি (উদাহরণস্বরূপ, newxpos1 = a + t ডাব্লু ) নিন এবং এগুলি দূরত্বের সূত্রে প্লাগ করুন (উভয় পক্ষের স্কোয়ারিং): দূরত্বের সূত্রটি স্কোয়ারড = (a + t w - (c + t x)) ^ 2 + (b + t y - (d + t * z)) ^ 2। মনে রাখবেন, টি নেতিবাচক হতে চলেছে। দুটি বৃত্তাকার বস্তুর জন্য সংঘর্ষের সময়টি সন্ধান করার জন্য আমরা বাম দিকটি (r + s) ^ 2 এর সমান সেট করেছি। চতুর্ভুজ সমীকরণ (এবং খুব ক্লান্তিকর বীজগণিতের একটি মহান বিষয়) ব্যবহার করে টিয়ের জন্য সমাধান করা, আমরা উপরের "t = ..." সমীকরণটি পাই।
আমার প্রশ্নগুলো:
1) এটি করার একটি ভাল উপায়? এটা কি আদৌ কাজ করবে? আমি কি কোন অপ্রত্যাশিত সমস্যা চালাচ্ছি? (আমি জানি যে একবারে 2 টিরও বেশি বস্তু সংঘর্ষে পড়লে আমি সমস্যায় পড়তে চাইছি, তবে আমি তাদের কম আপেক্ষিক গতিবেগের ক্ষেত্রে যদি সত্যই আপত্তি জানাই তবে তার পরোয়া করি না) (যদি আপেক্ষিক গতি বেশি থাকে) তাহলে অ্যালগরিদম প্রদত্ত "বোকা" সমাধানটি "যথেষ্ট ভাল" হবে, এবং ত্রুটিটি দেখা কোনও মানুষের পক্ষে অসম্ভব) এবং যদি একই সময়-পদক্ষেপে 2 টিরও বেশি সংক্ষিপ্ত আপেক্ষিক বেগের সাথে সংঘর্ষ হয় তবে বেশিরভাগ সমাধান হবে যাই হোক না কেন যথেষ্ট কাছাকাছি থাকুন, যেহেতু আমি একগুচ্ছ অবাস্তব সংঘর্ষের বিষয়ে পরিকল্পনা করি না)
2) আমার অভিনয় অনেক ক্ষতি হবে? আমি মনে করি না এটি হবে, তবে এটি যদি হয় তবে এটি করার আরও ভাল উপায় আছে কি?
3) আমার দ্বিতীয় ধাপটি এড়ানো উচিত এবং 1 থেকে 3 ধাপে সরাসরি যাওয়া উচিত? স্পষ্টতই পদক্ষেপ 2 গুরুত্বপূর্ণ নয়, তবে এটি পারফরম্যান্সে সহায়তা করতে পারে (বা এটি সাশ্রয়ের চেয়ে বেশি সিপিইউ সময় ব্যয় করতে পারে)।
অন্যান্য সমস্ত মন্তব্য, পরামর্শ বা সমালোচনা অত্যন্ত স্বাগত। আপনার সাহায্যের জন্য ধন্যবাদ!