दो वस्तुओं के बीच घूमता रहता है


9

मेरे XNA गेम में मेरे पास दो ऑब्जेक्ट हैं जो टकराते हैं। जब पहली वस्तु दूसरे से टकराती है तो वह उस पर कुंडी लगाने में सक्षम होता है और उसे दुनिया के बारे में बताता है। मैं यहाँ गणित के साथ एक समस्या है (गणित मेरी मजबूत बात नहीं है)। वर्तमान में मेरे पास दूसरी वस्तु है जो पहले पर लटकी है और उसके साथ घूमती है, लेकिन मैं इसे मूल दिशा रखने के लिए नहीं पा सकता हूं। इसलिए, यदि वस्तु का सामना करना पड़ रहा है, तो उसे इस दिशा के सापेक्ष रखना चाहिए कि उसे मूल वस्तु के साथ कैसे घुमाया जा रहा है।

यहाँ छवि विवरण दर्ज करें

कैसे मैं इसे प्राप्त करने के लिए सबसे अच्छा हो सकता है पर कोई सुझाव?


मुझे लगता है कि दोनों ऑब्जेक्ट दूसरी वस्तु के केंद्र के अक्ष के बारे में घूमेंगे।
MichaelHouse

जवाबों:


3

जहां तक ​​कोण का संबंध है, बस दूसरी वस्तु के कोण को पहले के कोण के समान रखें। स्थिति के लिए, जब दो वस्तुएं एक-दूसरे से टकराती हैं, तो दूरी सूत्र का उपयोग करके पहले से दूसरी वस्तु की दूरी का पता लगाएं।

distance = math.sqrt((x2 - x1)^2 + (y2 - y1)^2)

पहली वस्तु के सापेक्ष दूसरी वस्तु की स्थिति ज्ञात करने के लिए:

x2 = x1 + distance * math.cos(angle)
y2 = y1 + distance * math.sin(angle)

2

@ Tesselode के उत्तर के अलावा, मैं आपको अपने खेल में प्रत्येक विश्व वस्तु के लिए संलग्न वस्तुओं की एक सूची रखने की सलाह दूंगा। की तर्ज पर कुछ List<WorldObject> AttachedObjects। फिर, जब आप टकराव का पता लगाएंगे, तो आप काले आयत को लाल रंग में जोड़ देंगे AttachedObjects। उसके बाद, माता-पिता की स्थिति को अद्यतन करने के लिए हर बार @ टेसलोड की विधि का उपयोग करके बच्चों के पदों को अपडेट करने की बात है।


2

मैं मान रहा हूँ कि दोनों में से एक का दूसरे पर नियंत्रण होगा, बहुत कुछ कांटा-लिफ्ट की तरह। आपके ड्राइंग में, मैं मान रहा हूं कि यह एक काला है, और लाल एक पैकेज है। आप केवल उल्लेख कर रहे हैं कि आपको कोणों से परेशानी है, इसलिए मैं इसे कवर करूँगा।

जब वस्तुएँ एक साथ बैठती हैं, तो आपको दोनों के बीच कोण अंतर याद रखना चाहिए (मैं इस थीटा को कॉल करूँगा)। मैंने इसे चित्र 2 में एक दूसरे के ऊपर खींची गई पहली आकृति के तीरों के साथ खींचा है। जब तक ऑब्जेक्ट्स को अनलेक्ट नहीं किया जाता है, तब तक रेड ऑब्जेक्ट का कोण ब्लैक के कोण प्लस थीटा द्वारा निर्धारित किया जाएगा, जैसा कि आकृति 3 में दिखाया गया है।

// When Latching:
theta = Red.angle - Black.angle;

// When retrieving Red's angle:
Red.angle = Black.angle + theta

कोण भेद


1

आप किसी वस्तु के लिए बच्चे की वस्तुओं को रखने की क्षमता को लागू कर सकते हैं (जहां बाल वस्तुओं को माता-पिता की स्थिति / रोटेशन में परिवर्तन से स्वचालित रूप से प्रभावित किया जाएगा)। फिर टकराव होने पर जब उन्हें एक साथ लेटना चाहिए, तो आप एक अदृश्य वस्तु बनाते हैं और दोनों जुड़ी हुई वस्तुओं को उसके बच्चे बनाते हैं। फिर, व्यक्तिगत वस्तुओं पर परिवर्तन (आंदोलन, रोटेशन) को लागू करने के बजाय, आप इसे बड़े पर लागू करते हैं, या आप अभी भी व्यक्तिगत बच्चों की वस्तुओं पर बल लागू कर सकते हैं, जो यह जांच करेगा कि "क्या मेरे पास माता-पिता हैं?", और यदि हां, बल को माता-पिता के पास भेजा जाएगा (जो सभी बाल वस्तुओं से एक वेक्टर में बलों को मर्ज कर देगा जो इसे खुद पर लागू होगा)।

इसके अलावा, इस दृष्टिकोण को उनके रोटेशन को ठीक से संभालना चाहिए, यदि आप कुपित वस्तुओं के भार के अनुसार अदृश्य माता-पिता के लिए द्रव्यमान के केंद्र की गणना करते हैं, जो जॉन की विधि को पूरा नहीं लगता है (उनके नए साझा केंद्र के चारों ओर ऑब्जेक्ट को घुमाने में शामिल है, नहीं किसी एक वस्तु के द्रव्यमान का केंद्र), और आप बिना किसी अतिरिक्त कोड के इस तरह के व्यवहार को आसानी से पकड़ सकते हैं। यह अधिक मजबूत और लचीला दृष्टिकोण प्रतीत होता है।

+ स्थिति यदि बच्चे पर लागू किया गया बल संयुक्त को तोड़ने के लिए पर्याप्त मजबूत है, और आप इसे माता-पिता के बच्चे के रिश्ते को हटाकर "अनचाहे" को संभाल सकते हैं। यदि केवल एक बच्चा बचा है, तो आप इसे अलग भी कर देते हैं और अदृश्य माता-पिता को भी हटा देते हैं।

यदि आप रुचि रखते हैं तो मैं अधिक विवरण (चित्रों के साथ और कम से कम स्यूडोकोड और ऐसे) प्रदान कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.