জড়তা টেনেসর গণনা


10

একটি জটিল এবং দীর্ঘ প্রশ্ন, যা আমি স্বীকার করব, আমি এখনও খুব ভাল বুঝতে পারি না তাই আমি চেষ্টা করব এবং যথাসম্ভব সেরা ব্যাখ্যা করব।

সংক্ষিপ্ত সংস্করণ: কোনও বস্তুর আকারের ভিত্তিতে জড়তা টেনেসর গণনা করার জন্য কি কোনও সাধারণ সি ++ / ফিজিক্স সূত্র আছে?

দীর্ঘ সংস্করণ: আমাদের পদার্থবিজ্ঞানের জন্য আমাদের x, y এবং z জড়তা টেনারগুলি নির্দিষ্ট করতে হবে। বর্তমানে আমরা যেভাবে এটি করি তা ভর ছাড়াই একটি অনুপাত মাত্র। সুতরাং যদি কোনও বস্তু এক্স অক্ষের উপরে দীর্ঘ এবং ওয়াই এবং জেডের উপর পাতলা হয় এবং ভর 10000 হয় তবে আমরা জেড এবং ওয়াইকে 7000 এবং এক্স থেকে 3000 সেট করব ((এটি সঠিক নয়, তবে কেবল একটি ধারণা দেওয়ার জন্য)

এটি তুলনামূলকভাবে ভাল কাজ করে তবে আমাদের বৃহত্তম সমস্যাটি হ'ল যখন কোথাও যৌথ অস্থিতিশীলতা রয়েছে, তখন কোনটি সবচেয়ে ভাল কাজ করে তা বের না করা অবধি আমাদের ট্যান্সারে অনুমান করতে হবে। যদি আমাদের কাছে খুব বড় পদার্থবিজ্ঞানের সিমুলেশন থাকে এবং 20+ জনের মধ্যে একটিতে অন্য সমস্ত স্থিরতা হারাতে পারে তবে এটি খুব সময়সাপেক্ষ হয়ে উঠতে পারে।

আমি যা নিয়ে কাজ করছি তা হ'ল একটি ফাংশন যা কোনও বস্তুর বাউন্ডিং বাক্সটি গ্রহণ করবে এবং আশা করি তুলনামূলকভাবে সঠিক টেনজারগুলি গণনা করবে। আমি http://en.wikedia.org/wiki/List_of_moment_of_inertia_tensors থেকে কিছু গণিত নিয়েছি এবং একটি ফাংশন তৈরি করেছি যা নীচে অনুরূপ ঘূর্ণনের জন্য মূলত নীচের মতো কাজ করে।

প্রস্থের ঘন কিউবড, উচ্চতা h, গভীরতা ডি এবং ভর মি এখানে চিত্র বর্ণনা লিখুন

অথবা ঘূর্ণন যদি শেষ হয় তবে এটির মতো:

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

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

NxVec3 CalculateInertiaTensor( VisBoundingBox_cl boundingBox, float m )
{
    float width = boundingBox.GetSizeX();
    float height = boundingBox.GetSizeZ();
    float depth = boundingBox.GetSizeY();

    float xTensor = 0.083f * m*(height*height + depth*depth);
    float yTensor = 0.083f * m*(width*width + depth*depth);
    float zTensor = 0.083f * m*(width*width + height*height);

    return NxVec3(xTensor, yTensor, zTensor);
}

আমি গ্যারান্টি দিতে পারি না যে এটি করার সঠিক উপায় (সর্বাধিক সঠিক উপায়টি হ'ল বাউন্ডিং বাক্সের পরিবর্তে আসল আকৃতিটি ব্যবহার করা) এবং আমি জড়তা টেনেসর এবং গণিতের সাথে খুব বেশি পরিচিত নই তবে মনে হয় এটিগুলি ফিরে আসে আমরা যা ব্যবহার করছিলাম তার সাথে মোটামুটি মিল similar এটির জন্য আরও ভাল উপায় আছে কিনা তা এখানে কেউ জানতে পারে?


3
আপনি যদি নিজের বস্তুকে টেট্রহেডারে বিভক্ত করতে পারেন তবে একটি টেট্রহেড্রনের জড়তার মুহুর্তের জন্য মূল সূত্রের সাথে আপনি টেনসারের লাইনারিটি ব্যবহার করতে সক্ষম হবেন (উদাহরণস্বরূপ ওল্ফ্রাম আলফার সাথে এটি সন্ধান করতে পারেন) সঠিক হিসাব করার জন্য টেন্সর। বাউন্ডিং বক্স পদ্ধতির সাথে আমার উদ্বেগটি হ'ল এটি আপনার বিবি কতটা বস্তু পূরণ করে তা নির্ভর করে; উদাহরণস্বরূপ, একটি চর্বি উপবৃত্তাকার এবং একটি সরু হেলিকাল বসন্তের মধ্যে পার্থক্যটি কল্পনা করুন।
স্টিভেন স্টাডনিকি 21

ইনপুট জন্য ধন্যবাদ। এবং আপনি সঠিক, আমার মূল সমস্যাটি উপস্থিত হবে যখন বলুন, একটি 'এ' আকৃতির অবজেক্ট থাকবে, বিবি টেনারগুলি ভুলভাবে ফিরে আসতে বাধ্য করবে। আমি আপনার তথ্য যাচাই করব, ধন্যবাদ!
মুনগোইড

আপনি স্বাগত - আপনি যদি আরও বিশদে এটির কথা বলতে চান তবে আমার উচিত এটি থেকে সঠিক উত্তর তৈরি করতে সক্ষম হওয়া, তবে আপনাকে শুরু করার পক্ষে এটি যথেষ্ট হওয়া উচিত।
স্টিভেন স্টাডনিকি

আপনি যদি ইচ্ছুক হন, এটি দুর্দান্ত! আমি কিছুক্ষণের জন্য এটি বের করার চেষ্টা করছি তবে আমি এখনও এই অঞ্চলে কিছুটা
নতুনভাবে

উত্তর:


7

আমি পরামর্শ দিতে যাচ্ছিলাম যে এটি একটি কঠিন সমস্যা কারণ গ্রিনের উপপাদ্যকে ভলিউম ইন্টিগ্রালগুলিকে ভূপৃষ্ঠের ইন্টিগ্রালগুলিতে রূপান্তর করতে ব্যবহারের উপর ভিত্তি করা সাধারণ সূত্রগুলি প্রয়োগ হয় না, এবং তাই আপনাকে প্রকৃতপক্ষে আপনার চিত্রের একটি টেট্রহেড্রাল পচন সরবরাহ করতে হবে - তবে এটি পরিণত হয় যে সঠিক নয়। যতক্ষণ না আপনার আকৃতি অভিন্ন ঘনত্বের (এটি একটি প্রাকদর্শন যা আপনি ইতিমধ্যে যেকোন উপায়ে তৈরি করেছেন, সম্ভবত এবং বেশিরভাগ পরিস্থিতিতে একেবারে যুক্তিসঙ্গত) তবে ভলিউম ইন্টিগ্রালগুলি পৃষ্ঠের সংহতগুলিতে সহজতর করা যেতে পারে এবং পরবর্তীটি আরও সরল করা যায়। আরও ভাল, এটি করার জন্য নেটটিতে খুব সুন্দর দেখাবার একটি অ্যালগরিদম এবং কোড রয়েছে বলে মনে হচ্ছে; কটাক্ষপাত আছে http://www.cs.berkeley.edu/~jfc/mirtich/massProps.html, ব্রায়ান মির্তিচের পৃষ্ঠা মুহুর্ত এবং ভর কেন্দ্রে গণনার জন্য তাঁর অ্যালগরিদমগুলি বর্ণনা করে। এটি এই ফ্রন্টে আপনার সমস্ত চাহিদা আবশ্যক। নোট করুন যে এটি এমন কিছু যা আপনি একবারে করতে চান, হয় আকারের রফতানির সরঞ্জাম হিসাবে বা আমদানির সময়, তবে এমন কিছু নয় যা আপনাকে প্রতিটি ফ্রেম করতে হবে; বাকী আকারের তথ্যের পাশাপাশি ভর কেন্দ্রে সম্পর্কে জড়তা টেনসরটি সংরক্ষণ করুন এবং যদি কখনও কখনও অন্য কোনও অক্ষ সম্পর্কে জড়ের মুহুর্তের জন্য যদি সেন্সরটি সন্ধান করতে হয় তবে আপনি এটি অর্জনের জন্য আদর্শ উপপাদাগুলি ব্যবহার করতে পারেন।

আশা করি এটি আপনার যা প্রয়োজন তা কভার করবে - যদি আমি আরও কিছু সাহায্য করার চেষ্টা করতে পারি তবে কেবল আমাকে জানান!


4

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

পয়েন্টগুলি আকৃতির সীমানা বাক্সের ভিতরে একত্রে উত্পন্ন করা যেতে পারে এবং তারপরে প্রকৃত আকারের বাইরে থাকাগুলি এড়িয়ে যায়। এটি সমস্যাটি কেবলমাত্র কোনও বিন্দুর আকারের ভিতরে রয়েছে কিনা তা পরীক্ষা করে দেখায় reduce


0

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

আমি ১৯৯ F সালে পতিত সংস্থাগুলিতে মির্তিচের অ্যালগরিদম ব্যবহার করেছি It এটি ভাল কাজ করে তবে আপনার অবশ্যই পরিষ্কার জ্যামিতি থাকতে হবে - একটি টপোলজিক্যালি সঠিকভাবে বন্ধ-অ-স্ব-ছেদ করা জাল। যদি গর্ত থাকে তবে জড়তা গণনা সম্পূর্ণ জালিয়াতি ফলাফল আনবে। আমি কেবল উত্তল জ্যামিতি ব্যবহার করেছি, তাই সংঘর্ষের উদ্দেশ্যে একটি উত্তল হাল পেতে প্রথমে কিউএল দৌড়েছি, তারপরে সেখান থেকে জড়তা গণনা করেছি।

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