2011-03-28 5 views
12

के लिए विस्फोटित दृश्य एल्गोरिदम मैं 3 डी सीएडी मॉडल देखने के लिए एक प्रोग्राम बना रहा हूं और स्वचालित विस्फोटित दृश्यों में निर्माण करना चाहता हूं। सभी असेंबली जिन्हें देखा जाएगा वेक्सी-सममित हैं। कुछ नहीं हो सकते हैं, लेकिन बहुमत हैं। मैं एक असेंबली में स्वचालित रूप से एक विस्फोटित दृश्य स्थिति में भागों को स्थानांतरित करने के लिए एक एल्गोरिदम का आकलन करना चाहता हूं। यहाँ मैं क्या एक एल्गोरिथ्म (ऋण निश्चित रूप से लेबल) के माध्यम से हासिल करना चाहते हैं का एक उदाहरण है:सीएडी

Exploded view

केवल मूल्य के साथ मैं काम करना है प्रत्येक भाग का सीमांकन बॉक्स का केंद्र है। यदि इसकी तुलना में अधिक जानकारी की आवश्यकता है, तो मैं अधिक जानकारी की गणना कर सकता हूं, लेकिन ऐसा लगता है कि यह पर्याप्त होना चाहिए। मेरे मन में एक मोटा दृष्टिकोण है कि असेंबली की उत्पत्ति से एक वेक्टर की गणना एक्सी-सममित अक्ष के साथ प्रत्येक भाग के केंद्र में करें, फिर केंद्र धुरी के संबंध में भाग के केंद्र में एक रेडियल वेक्टर की गणना करें। वहां से, मुझे कुछ गणना करने की आवश्यकता होगी जो उन दो वैक्टरों के कुछ संयोजन के साथ प्रत्येक भाग की स्थिति को स्केल करने में सक्षम होंगे। यही वह हिस्सा है जहां मुझे पूरा यकीन नहीं है कि इसके साथ किस दिशा में जाना है। जिस छवि में मैंने शामिल किया है, वह सटीक कार्यक्षमता दिखाता है जो मैं चाहता हूं, लेकिन मैं विस्फोटित दृश्य को विस्तारित या अनुबंध करने के लिए किसी भी फ्लोट वैल्यू द्वारा स्थिति को स्केल करने में सक्षम होना चाहता हूं, 1.0 मूल मूल मॉडल होने के साथ। कोई विचार?

उत्तर

9

आपका प्रश्न काफी व्यापक है और इस प्रकार मेरा स्पष्टीकरण किसी भी तरह लंबा हो गया है। मैं अक्षीय और रेडियल उपचार दोनों के लिए एक विस्फोट एल्गोरिदम के दो प्रकार का प्रस्ताव दूंगा।

उन्हें एक उदाहरण मैं निम्नलिखित संख्या (अक्ष के साथ बक्से बाउंडिंग केवल, केवल पांच भागों) का उपयोग करेंगे के साथ इसे समझने के लिए:

P1: [ 0,10] (battery) 
P2: [10,14] (motor) 
P3: [14,16] (cog) 
P4: [16,24] (bit holder) 
P5: [18,26] (gear casing) 

जबकि भागों P1P4 लिए वास्तव में, एक दूसरे को P4 और P5 स्पर्श वास्तव में ओवरलैप।

पहला वाला एक एल्गोरिदम है जो मूल रूप से आपके द्वारा प्रस्तावित कारक द्वारा दूरी को स्केल करता है। यदि असेंबली में टुकड़ों का आकार बहुत अलग होता है तो यह पीड़ित होगा, लेकिन अक्षरों को ओवरलैप करने के लिए भी (उदाहरण के लिए अक्ष के साथ आपके उदाहरण में सर्कल कोग का विस्तार बिट धारक से बहुत छोटा है)।

स्केलिंग कारक f होने दें, तो प्रत्येक बाउंडिंग बॉक्स का केंद्र f द्वारा स्केल किया गया है, लेकिन एक्सटेंशन नहीं है। पार्ट्स तो

P1: 5 + [-5,5] => P1': 5*f + [-5,5] 
P2: 12 + [-2,2] => P2': 12*f + [-2,2] 
P3: 15 + [-1,1] => P3': 15*f + [-1,1] 
P4: 20 + [-4,4] => P4': 20*f + [-4,4] 
P5: 22 + [-4,4] => P5': 22*f + [-4,4] 

भागों P1'P4 को तब तक

P2' - P1' : (12*f-2) - (5*f+5) = 7*(f-1) 
P3' - P2' : (15*f-1) - (12*f+2) = 3*(f-1) 
P4' - P3' : (20*f-4) - (15*f+1) = 5*(f-5) 

दिया जाता है जैसी उम्मीद थी अंतर f=0 के लिए शून्य है, लेकिन किसी भी के लिए विस्फोट देखने दूरी दृढ़ता से आकार पर निर्भर करता है के बीच की दूरी होगा अलग भागों के। मुझे नहीं लगता कि आकारों में बदलाव बड़ा होने पर यह बहुत अच्छा लगेगा।

ओवरलैपिंग भागों

P5' - P4' : (22*f-4) - (20*f+4) = 2*f-8 

वे अभी भी उचित च के लिए ओवरलैप के लिए इसके अतिरिक्त

एक और संभावना धुरी के लिए स्केलिंग कारक को परिभाषित करने के लिए नहीं बल्कि एक निरंतर भाग दूरी d परिभाषित करना होगा।तो बाउंडिंग बॉक्स निम्नलिखित की तरह गठबंधन किया जाएगा:

P1': [ 0,10] 
P2': [10,14]+d 
P3': [14,16]+2*d 
P4': [16,24]+3*d 
P5': [18,26]+4*d+6 

ध्यान दें कि अंतिम पंक्ति में हम 24-8=6 कहा, अर्थात आदेश दो भागों को अलग करने के में ओवरलैप।

हालांकि यह एल्गोरिदम उपर्युक्त मामलों को (मेरी राय में) बेहतर तरीके से संभालता है, हमें कई हिस्सों को विशेष देखभाल करना पड़ता है जो कई अन्य भागों को कवर करते हैं और समूह में शामिल नहीं किए जाने चाहिए (उदाहरण के लिए आपके मामले में शीर्ष पर संभाल लें) ।

एक संभावना समूह को समूह में पहले चरण में समूहित करना होगा और फिर इन समूहों के बाध्यकारी बॉक्स में एल्गोरिदम लागू करना होगा। बाद में इसे एक से अधिक उपसमूह को कवर करने वाले हिस्सों को छोड़कर, प्रत्येक समूह के हिस्सों में दोबारा लागू किया जा सकता है। आपके मामले में यह होगा (ध्यान दें नेस्टेड समूह है संभव):

[ 
    ([battery,(switch,circuit switch),motor],handle top), 
    motor cog, 
    tri-cog, 
    red-cog, 
    circle-cog, 
    bit-holder, 
    (gear casing,spring,lock knob) 
] 

आप देख सकते हैं कि मैं समूहों के दो अलग तरह पेश किया है: भागों/वर्ग कोष्ठकों में समूहों, एल्गोरिथ्म द्वारा नियंत्रित किया जाता है यानी एक रिक्ति है ऐसे समूह के अंदर प्रत्येक भाग/उपसमूह के बीच जोड़ा गया है, जबकि गोल ब्रेसिज़ के अंदर के समूहों को विस्फोट नहीं किया गया है।

अब तक हमने रेडियल विस्फोट को संभाला नहीं है क्योंकि यह धुरी उपचार से अच्छी तरह से decouples है। लेकिन फिर वही दृष्टिकोण दोनों रेडियल विस्फोट के लिए भी इस्तेमाल किया जा सकता है। लेकिन फिर मेरी राय में दूसरा एल्गोरिदम अधिक सुखद परिणाम पैदा करता है। जैसे

[ 
    (battery,switch,<many parts>,gear casing), 
    (switch,spring), 
    (handle top, lock knob) 
] 

इस मामले में हम एक अतिरिक्त घटक r सभी रेडियल केन्द्रों के लिए दूसरे समूह और 2*r में सभी को तीसरे समूह में जोड़ना होगा: समूहों के रूप में रेडियल उपचार के लिए इस प्रकार किया जा सकता है।

ध्यान दें कि सरल स्केलिंग एल्गोरिदम विशेष उपयोगकर्ता मार्गदर्शन के बिना चलता है (एक बार स्केलिंग कारक दिया जाता है) जबकि दूसरा अतिरिक्त जानकारी (समूह) का उपयोग करता है।

मुझे उम्मीद है कि यह लंबे समय तक स्पष्टीकरण आपको आगे बढ़ने के बारे में कुछ विचार देता है। अगर मेरी व्याख्या किसी बिंदु पर अस्पष्ट है या यदि आपके पास और प्रश्न हैं तो कृपया टिप्पणी करने में संकोच न करें।

+1

वाह। पूर्णता के लिए +1। इच्छा है कि मैं और दे सकता हूं। –

संबंधित मुद्दे