কোন বড় পদার্থবিজ্ঞানের সিমুলেশন পদ্ধতিগুলি সত্যই বড় ব-দ্বীপ সময়ের জন্য (ঘন্টা থেকে কয়েক সপ্তাহ) উপযুক্ত?
তদতিরিক্ত, বড় এবং ছোট ব-দ্বীনের জন্য বিভিন্ন পদ্ধতির সংমিশ্রণে আমি কি কোনও সমস্যার মুখোমুখি হব?
কোন বড় পদার্থবিজ্ঞানের সিমুলেশন পদ্ধতিগুলি সত্যই বড় ব-দ্বীপ সময়ের জন্য (ঘন্টা থেকে কয়েক সপ্তাহ) উপযুক্ত?
তদতিরিক্ত, বড় এবং ছোট ব-দ্বীনের জন্য বিভিন্ন পদ্ধতির সংমিশ্রণে আমি কি কোনও সমস্যার মুখোমুখি হব?
উত্তর:
আপনি সম্ভবত এই বৃহত সময়ের স্প্যানগুলির জন্য ধ্রুবক ত্বরণ ব্যবহার করছেন (যা শূন্য ত্বরণ হতে পারে)। সময়ের সাথে শ্রদ্ধা সহ ধ্রুবক ত্বরণের ডেরিভেটিভ ০। এর অর্থ এটি সময়ের সাথে সম্মানের সাথে পরিবর্তিত হয় না, তাই আপনার ডেল্টার সময়টি কত বড় তা বিবেচ্য নয়।
সময়ের সাথে সামান্য এই সংহতকরণ আপনার প্রয়োজনীয় সমীকরণ সরবরাহ করে।
a = a
v = at + v0
s = .5at^2 + v0*t + s0
যেখানে: a = ত্বরণ, v = বেগ, v0 = প্রাথমিক বেগ, s = অবস্থান, s0 = প্রাথমিক অবস্থান, t = সময়
আপনি চাইলে এই কৌশলটি ব্যবহার করে আপনি মিলিসেকেন্ড থেকে কয়েক সপ্তাহ পর্যন্ত স্প্যান ব্যবহার করতে পারেন। তাদের মিশ্রন মধ্যে যত্ন গ্রহণ করা হবে v0
এবং s0
সমীকরণের প্যারামিটার।
সংঘর্ষগুলি পরিচালনা করতে আপনাকে উচ্চ গতির ছোট বস্তুর জন্য ব্যবহৃত কৌশলগুলির মতো কৌশলগুলি প্রয়োগ করতে হবে । প্রথমে উপরের সমীকরণটি ব্যবহার করে নতুন অবস্থানের গণনা করা, তারপরে সমস্ত বস্তুর জন্য পুরানো এবং নতুন অবস্থানের মধ্যে ঝাড়ু। যেহেতু এই অবজেক্টগুলির যে কোনও একটি একে অপরকে ছেদ করতে পারে (কয়েক মিনিট বা দিন আগে), এটি খুব জটিল হয়ে উঠতে পারে। সম্ভবতঃ যেহেতু আপনার এত বড় ব-দ্বীপ সময় রয়েছে, আশা করি এই সম্ভাব্য সংঘর্ষগুলি প্রক্রিয়া করার জন্য আপনার কাছে প্রচুর সময় হবে।
মহাকর্ষ সহ একটি উদাহরণ নিতে দিন।
নীচের ফাংশনে, ধরে নিই যে আমাদের কাছে অবস্থান এবং গতির জন্য ক্লাস সদস্যের ভেরিয়েবল রয়েছে। প্রতি ডিটি সেকেন্ডে মাধ্যাকর্ষণ বলের কারণে আমাদের সেগুলি আপডেট করতে হবে।
void update( float dt )
{
acceleration = G * m / r^2;
velocity = velocity + acceleration * dt;
position = position + velocity * dt;
}
হিসাবে dt
ছোট এবং ছোট পায়, আমাদের সিমুলেশন (যদিও যদি আরো এবং আরো সঠিক পায় dt
খুবই ছোট পায় তারপর আমরা যখন বড় নম্বরে ক্ষুদ্র সংখ্যার যোগ করার স্পষ্টতা ত্রুটি সম্মুখীন করতে পারেন)।
মূলত, dt
ভাল ফলাফল পাওয়ার জন্য আপনার সিমুলেশনটি সর্বাধিক স্থির করতে হবে । এবং যদি dt
যেটি আসে তা যদি খুব বড় হয় তবে কেবল সিমুলেশনটিকে ছোট ছোট ধাপে বিভক্ত করুন, যেখানে প্রতিটি পদক্ষেপ আপনার সর্বাধিক dt
অনুমোদিত।
void update( float dt )
{
acceleration = G * m / r^2;
velocity = velocity + acceleration * dt;
position = position + velocity * dt;
}
// this is the function we call. The above function is a helper to this function.
void updateLargeDt( float dt )
{
const float timeStep = 0.1;
while( dt > timeStep )
{
update( timeStep );
dt -= timeStep ;
}
update( dt ); // update with whatever dt is left over from above
}
সুতরাং এই কৌশলটির সাহায্যে timeStep
আপনি যা প্রয়োজন খাঁটিতার সাথে সামঞ্জস্য করতে পারেন (এটিকে দ্বিতীয়, মিনিট, ঘন্টা বা পদার্থবিদ্যার একটি সঠিক প্রতিনিধিত্ব পেতে যা প্রয়োজন তা তৈরি করুন।
বেশিরভাগ গেমগুলিতে ফরোয়ার্ড ইন্টিগ্রেশনের সহজ ইউলার পদ্ধতি ব্যবহার করার ঝোঁক থাকে (এটি সময়ের সাথে সাথে বেগকে পজিশনে সংহত করে এবং গতিবেগে ত্বরণকে সংহত করে)। দুর্ভাগ্যক্রমে, ইউলার পদ্ধতিটি কেবল খুব কম টাইমস্কেল এবং সংক্ষিপ্ত রানের জন্য উপযুক্ত।
আরও জটিল পদ্ধতি রয়েছে যা খুব দীর্ঘ সময়ের আইশের তুলনায় আরও নির্ভুল। কার্যকর করার জন্য সবচেয়ে জনপ্রিয় এবং সহজতমটি সম্ভবত রঞ্জ-কুট্টে -4 । আরকে 4 অতীতে চারটি অবস্থান এবং গতিবেগ নমুনা দিয়ে এবং ইন্টারপোলটিংয়ের মাধ্যমে ভবিষ্যতে অবস্থান নির্ধারণ করে। এটি দীর্ঘ সময়ের স্কেলগুলির তুলনায় অয়লার পদ্ধতির চেয়ে অনেক বেশি নির্ভুল হয়ে থাকে তবে এটি কম্পিউটারের চেয়ে ব্যয়বহুল।
উদাহরণস্বরূপ, আপনি যদি রিয়েল-টাইমের প্রতিটি কয়েক দিন আপডেট করে এমন কোনও বাস্তব প্রদক্ষিণ গ্রহের পদার্থবিজ্ঞান গণনা করতে চান, তবে অয়লার পদ্ধতিটি সংখ্যার ত্রুটির কারণে গ্রহটিকে কেবল কয়েকটি কক্ষপথের পরে মহাকাশে ছড়িয়ে দেবে। খুব বেশি ত্রুটি জমে যাওয়ার আগে আর কে ৪ সাধারণত গ্রহটিকে প্রায় একই আকারে প্রায় হাজার হাজার বার প্রদক্ষিণ করবে।
তবে, আরকে 4 এ সংঘর্ষগুলি বাস্তবায়ন করা খুব চ্যালেঞ্জিং হতে পারে ...