एक जटिल और लंबा सवाल है कि, मैं मानता हूँ, मैं अभी तक बहुत अच्छी तरह से समझ नहीं है तो मैं कोशिश करूँगा और सबसे अच्छा के रूप में मैं कर सकता हूँ समझा सकता हूँ।
लघु संस्करण: क्या कोई सामान्य सी ++ / फिजिक्स फॉर्मूला है जो किसी वस्तु के आकार के आधार पर जड़ता के दसियों की गणना करता है?
लंबा संस्करण: हमारी भौतिकी के लिए, हमें x, y और z जड़ता द्योतक को निर्दिष्ट करने की आवश्यकता है। वर्तमान में जिस तरह से हम यह कर रहे हैं वह बहुत बड़े पैमाने पर आधारित अनुपात है। इसलिए यदि कोई वस्तु X अक्ष पर लंबी और Y और Z पर पतली है, और द्रव्यमान 10000 है, तो हम Z और Y को 7000 और X से 3000 पर सेट करेंगे। (यह सटीक नहीं है, लेकिन सिर्फ एक विचार देने के लिए)
यह अपेक्षाकृत अच्छी तरह से काम करता है, लेकिन हमारी सबसे बड़ी समस्या यह है कि जब कहीं संयुक्त अस्थिरता होती है, तो हमें टेनर्स पर अनुमान लगाना पड़ता है जब तक कि हम सबसे अच्छा काम नहीं करते। यह बहुत समय लेने वाला बन सकता है यदि हमारे पास एक बहुत बड़ा भौतिकी सिमुलेशन है और 20+ जोड़ों में से एक अन्य सभी को स्थिरता खोने का कारण बन रहा है।
मैं जिस पर काम कर रहा हूं वह एक ऐसा फ़ंक्शन है जो किसी ऑब्जेक्ट की बाउंडिंग बॉक्स ले जाएगा और उम्मीद है कि अपेक्षाकृत सटीक टेंसरों की गणना करेगा। मैंने http://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensors से कुछ गणित निकाले हैं और एक फ़ंक्शन बनाया है जो मूल रूप से नीचे दिए गए समान घुमावों के लिए निम्नलिखित की तरह काम करता है।
या यदि रोटेशन समाप्ति पर है, तो इस तरह:
तो, यह मुझे ऐसे परिणाम देता है जो हमारे द्वारा किए जा रहे तरीके के समान हैं, लेकिन मैं यह सुनिश्चित करने के बिना इस तरह से स्विच नहीं करना चाहता कि यह सामान्य उपयोग के लिए काम करेगा। नीचे एक घन और केंद्र धुरी के साथ पहली छवि के आधार पर मेरे कार्य के लिए कोड है।
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);
}
मैं यह गारंटी नहीं दे सकता कि यह ऐसा करने का सही तरीका है (जैसा कि सबसे सटीक तरीका एक बाउंडिंग बॉक्स के बजाय वास्तविक आकार का उपयोग करना है) और मैं जड़ता के दसियों और गणित से बहुत परिचित नहीं हूं लेकिन यह संख्याओं को वापस करता है। हम जो प्रयोग कर रहे थे, उसके समान। यहां किसी को भी यह जानने के लिए होता है कि क्या ऐसा करने का एक बेहतर तरीका है?