2012-04-28 36 views
5

मैं फ़िशिक्स प्रोग्रामिंग में टकराव के बारे में सीख रहा हूं, और मुझे एक बड़ा संदेह है।ऑब्जेक्ट टकराव प्रोग्रामिंग (एकाधिक टक्कर केस)

गोलाकारों में सोचते हुए, जब एक ही समय में 2 के साथ टकराव होता है, तो मैंने सोचा कि बल की परिमाण जो दोनों गोलाकारों को स्थानांतरित करती है, को 2 से विभाजित किया जाना चाहिए। लेकिन जब मैं इसे प्रोग्रामिंग कर रहा हूं, तो मैं हमेशा देखता हूं कि एक क्षेत्र में दूसरे की तुलना में अधिक गति होती है, जिस तरह से मैं प्रोग्रामिंग करता हूं, यह एक दूसरे के साथ पहली बार टकराव करता है। के स्पष्ट रूप से समस्या आकर्षित करने के लिए एक छवि दिखाने दें:

enter image description here

पहले यह लाल क्षेत्र का पता लगाने पर। फिर टकराव का पता चला है, और बल परिमाण ऐसा है जैसे केवल एक क्षेत्र था। फिर यह नारंगी क्षेत्र का पता लगाता है, और बल परिमाण पहले से कम है।

किसी भी विचार के लिए मुझे इसका उपयोग करने के लिए क्या उपयोग करना चाहिए, या अगर मुझे कोई गलत धारणा है?

आधुनिक:

इसके अलावा, अगर तुम मुझे एक तंत्र इस अच्छी तरह से हो मैं आप और अधिक 50 + देना होगा कि बनाता है के लिए खोज मदद करते हैं।

+0

यह यथार्थवादी है। क्या आप वाकई इसे और अधिक "परिपूर्ण" बनाना चाहते हैं? – Beta

+0

मैं इसे वास्तविक टक्कर के लिए निकटतम सकारात्मक बनाना चाहता हूं ताकि बाद में अपरिवर्तनीयता हो सके यदि यह कम्प्यूटेशनल लागत इसके लायक नहीं है। –

उत्तर

1

समस्या यह है कि एक दो शरीर टक्कर के लिए, ऊर्जा और गति के संरक्षण मूल रूप से परिणाम को निर्धारित करने के लिए पर्याप्त हैं, लेकिन एक तीन शरीर समस्या के लिए यह नहीं रह गया है मामला है। यहां तक ​​कि यदि आप मार्क और डैरेन का सुझाव देते हैं, और सभी टकराव के भीतर सभी टकराव निकायों को निर्धारित करते हैं, तो यह वास्तव में आपको कहीं भी नहीं लेता है, क्योंकि 1) आप अभी भी नहीं जान पाएंगे कि टकराव के बाद वस्तुओं को कैसे स्थानांतरित किया जाए; और 2) प्रत्येक टकराव के दौरान कितनी वस्तुओं पर विचार करना प्राथमिक प्रश्न है, यह समय सारिणी नहीं है बल्कि वस्तुओं का विरूपण है, और यदि आप इसे सही तरीके से इलाज करते हैं तो एक टाइमस्टेप के भीतर अद्यतन करने का अनुक्रम नहीं है। उदाहरण के लिए, यदि आपके पास बहुत नरम वस्तुएं हैं, तो वे शायद कई टाइमस्टेप्स के संपर्क में रहेंगी, और बहुत कठिन वस्तुएं केवल कुछ समय-सारिणी हैं।

इस समस्या का एक अच्छा जवाब थोड़ा मुश्किल है, और इसका कारण आपके बोनस प्रश्न में है, यानी तंत्र क्या है। यह तंत्र मूल रूप से केवल उन चीज़ों पर है जिन्हें आप अपनी सरलीकृत समस्या में नहीं सोच रहे हैं: वस्तुओं, पर्ची, रोटेशन इत्यादि का विरूपण, लेकिन ये आमतौर पर तीन शरीर टकराव में प्रमुख मुद्दे होंगे।

आप जो करते हैं वह पूरी तरह से निर्भर करता है कि आपको कितनी सटीकता की आवश्यकता है। आप सिर्फ यह दिखा सकते हैं कि सभी टकराव दो वस्तुओं के बीच हैं, या एक तिहाई मारने वाला दो हमेशा सटीक सममित होता है (जो एक बहुत ही दुर्लभ घटना है)। एक और सटीक शुरुआत के रूप में आप केवल यह मान सकते हैं कि वे विकृत वस्तुओं हैं, मान लीजिए कि प्रत्येक टक्कर में एक पल होता है जब सब कुछ अधिकतम रूप से विकृत होता है, और इन विकृतियों के परिणामस्वरूप बलों क्या हैं, और इन बलों के आधार पर चीजें भेजती हैं (एफ = डी पी/dt)। यद्यपि अन्य अनुमान लगाए जा सकते हैं, केवल उस गति के आधार पर गति हस्तांतरण को विभाजित करें, जिस पर पहली बार हिट किया जाता है, और यह आनुपातिक कार्य (विरूपण की मात्रा)/(अगली वस्तु की दूरी), या ऐसी कुछ चीज़ दें।

-2

यह N-body problem का मामला है। आम तौर पर कोई विश्लेषणात्मक समाधान नहीं होता है, इसलिए आपको जो अनुमान मिलता है वह सब कुछ है। इसे दो अलग टक्कर के रूप में पेश करना काफी अच्छा अनुमान है।

[संपादित करें] स्पष्टीकरण के लिए: जब तीन निकाय सभी बातचीत कर रहे हैं, तो बहुत कम समय अवधि के लिए, यह एन-बॉडी समस्या है। न्यूटनिन एन-बॉडी समस्या नहीं है, लेकिन एक और सामान्य मामला है।

+6

नहीं यह * एन * शरीर की समस्या नहीं है। – Beta

+0

हां यह है। न्यूटनियन एन-बॉडी समस्या का एकमात्र अंतर यह है कि यह गुरुत्वाकर्षण बल नहीं है, इसलिए निरंतर अलग है। बातचीत अभी भी एक व्यस्त दूरी वर्ग कानून का पालन करती है। भले ही आप इसे तत्काल बातचीत में सरल बनाते हैं। – Aleph7

+0

मैंने गलती से इसे वोट दिया। क्षमा करें, मुझे लगता है कि आप सही हैं, कि सबकुछ टकराव के क्षण से निर्धारित होता है, जब वे सभी विकृत होते हैं और संपर्क में होते हैं, और फिर यह तीन शरीर की समस्या है। (मेरे लिए बदलने में बहुत देर हो चुकी है, लेकिन यदि आप अपना जवाब संपादित करते हैं तो मैं ऊपर जाऊंगा।) – tom10

1

किसी भी बल, वेग, ऊर्जा इत्यादि में बदलाव करने से पहले सभी संभावित जोड़ी-वार इंटरैक्शन का परीक्षण करने के लिए सावधान रहें। आपके भौतिकी सिमुलेशन की तरह लगता है कि पहली टकराव के तुरंत बाद गतिशीलता की गणना करने के बारे में खुशी मिलती है।

+0

तब आप गतिशीलता की गणना कैसे करेंगे? –

1

क्या DarenW मतलब (मैं उसका जवाब सीधे पर कोई टिप्पणी नहीं कर सकते हैं एक n00b के रूप में) था कि अनुक्रम कुछ इस तरह जाना चाहिए:

//test for collisions 
blueHitRed = didCollide(blue, red) 
blueHitOrange = didCollide(blue, orange) 
... 
//calculate resultant velocities 
red.velocity = ... 
orange.velocity = ... 
blue.velocity 

जबकि यह अपने विवरण है कि कुछ इस तरह वास्तव में है से लगता है हो रहा

//red 
blueHitRed = ... 
red.velocity = ... 
blue.velocity = ... 
//orange 
blueHitOrange = ... 
orange.velocity = ... 
blue.velocity = ... 
+0

मम्मम्म, यह एक बहुत अच्छा तरीका है। गणना करें कि क्या और उसके साथ टकराव करता है, क्रम में वेग की गणना करता है। आपके लिए एक बिंदु :)। –