পদার্থবিজ্ঞানের ইঞ্জিনে কীভাবে আমি পপিং বা ঝাঁকুনিগুলি স্থির করব?


11

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

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

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

এখানে চিত্র বর্ণনা লিখুন

কেবল আপনাকে সোর্স কোডটি না দিয়ে - এটি কী হতে পারে?


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

@ ট্রাভিসজি আপনি কীভাবে সমস্যার সমাধান করলেন? খুব সাধারণ পদার্থবিজ্ঞানের ইঞ্জিন বাস্তবায়নের চেষ্টা করার সময় আমি একই ধরণের সমস্যার দিকে নজর দিচ্ছি।
cheesus

1
@ চিসিস এটিতে কাজ করার পরে অনেকক্ষণ হয়ে গেছে, তবে আমি বিশ্বাস করি যে আমি আরও ছোট ছোট টাইমস্টেপগুলি দিয়ে আরও পুনরাবৃত্তি ব্যবহার করেছি।
ট্র্যাভিসিজ

উত্তর:


5

অবস্থান সংশোধন করার সময় আমি যে একটি সমাধান পেয়েছি তা হল কয়েকটি পুনরাবৃত্তি হওয়া এবং প্রতিটি পুনরাবৃত্তির সাথে শক্তি পরিবর্তন করা vary

doPhysics();

int num_iterations = 5;
for(int iteration=0; iteration<num_iterations; ++iteration)
{
    float strength = float(iteration+1)/num_iterations;
    correctPositions(strength);
}

সুতরাং প্রথম পুনরাবৃত্তির 1 / num_iteration শক্তি রয়েছে এবং শেষেরটির শক্তি 1 টি of


2
দুর্দান্ত সমাধান, তবে এটি কেন কাজ করে?
গুস্তাভো ম্যাকিয়েল

5

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

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

পদার্থবিজ্ঞানের ইঞ্জিনগুলি এই মানটিকে "opালু" বলে।

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


0

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

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