कैसे ज्यामिति युद्धों गुरुत्वाकर्षण प्रभाव को अच्छी तरह से करने के लिए


11

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

यहाँ एक वीडियो प्रभाव प्रदर्शित किया गया है: http://www.youtube.com/watch?v=YgJe0YI18Fg

मैं बस कुछ कणों पर एक वसंत या गुरुत्वाकर्षण प्रभाव को लागू कर सकता हूं, यह आसान है। लेकिन मैं GWs प्रभाव के समान दिखने के लिए प्रभाव प्राप्त नहीं कर सकता। जब मैं खेल में प्रभाव देखता हूं तो ऐसा लगता है कि कण वेल से ही गुच्छों में उत्सर्जित होते हैं, वे कुएं के केंद्र के चारों ओर बाहर की ओर सर्पिल होते हैं, और अंततः बाहर की ओर निकलते हैं, कुएं की ओर वापस आते हैं, और दोहराते हैं।

जब मैं पैदा होता हूं तो मैं कणों को सर्पिल कैसे बनाऊंगा? वेल के पास होने पर मैं कण के गुच्छों को एक साथ कैसे रखूंगा लेकिन जब वे बाहर की ओर बहते हैं तो एक दूसरे से दूर फैल जाते हैं? मैं वेल से जुड़े कणों को इतनी मजबूती से कैसे रखूंगा?

EDIT:
http://www.youtube.com/watch?v=1eEPl8kOXN8 <- वीडियो
https://dl.dropbox.com/u/49283213/gw.gif <- कण पथ का GIF

मैंने कण प्रभाव को देखने के लिए जीडब्ल्यू के भीतर यादृच्छिकरण को अक्षम कर दिया, यहां एक मिनट का वीडियो है जहां आप नीले-हरे रंग की नाली को कणों के गुच्छा को बाहर भेजते हुए देख सकते हैं। लाल कण विस्फोटों से होते हैं जो आम तौर पर सभी जगह दिखाई देते हैं। कुछ अवलोकन जो मैंने वीडियो से किए हैं:

  • कणों को नाली के केंद्र (या निकट केंद्र) से उत्सर्जित किया जाता है
  • सभी कणों को केंद्र के चारों ओर एक दक्षिणावर्त गति में मजबूर किया जा रहा है इसलिए किसी प्रकार की स्पर्शरेखा गति को लागू किया जा रहा है, आप इसे आसानी से देख सकते हैं जब लाल विस्फोट के कण नाली के करीब हो जाते हैं।

जवाबों:


7

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

प्रत्येक कण में एक X और Y वेग होता है, जिसके केंद्र में कोण और दूरी के आधार पर प्रत्येक फ्रेम में गुरुत्वाकर्षण जोड़ा जाता है। गुरुत्वाकर्षण हमेशा केंद्र की दिशा (कोण) में वेग जोड़ता है।

तो आपके पास कण के लिए है: स्थिति, वेग
गुरुत्वाकर्षण के लिए आपके पास अच्छी तरह से है: स्थिति, ताकत

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

dx = particle.x - gravity.x; dy = particle.y - gravity.y
angle = atan2(dy, dx)

यह कोण वेग सदिश का कोण है जिसे जोड़ने की आवश्यकता है।

लागू होने वाले बल की मात्रा दूरी पर निर्भर करती है। सटीक होने के लिए यह दूरी के वर्ग से घट जाती है। इसलिए यदि कोई चीज दो बार दूर है तो केवल एक चौथाई बल लगाया जाता है। दूरी के लिए डेल्टा की भी आवश्यकता होती है।

distance = sqrt(dx*dx + dy*dy)
force = gravity.strength / distance*distance

अब आपके पास बल और कोण है जो आपको उन्हें लागू करने की आवश्यकता है:

particle.velocity.x += force * sin(angle)
particle.velocity.y += force * cos(angle)

आपका समाधान मेरे लिए काफी समान है, लेकिन यह एटैन, सिन, कॉस, स्क्वेयर, ... का उपयोग करता है, इसलिए यह बहुत धीमा हो सकता है। एटान / पाप / कॉस भाग से बचने के लिए बेहतर है, मेरी पोस्ट को एक से देखें (शायद सबसे अच्छा नहीं) इसे तेजी से करें।
GameAlchemist 12

यह अनुकूलित नहीं है इसलिए यह बेहतर समझ में आता है।
एपीआई-बीस्ट

ऐसा करने के लिए आप सही हैं, लेकिन मुझे लगता है कि उत्तर बहुत अधिक उपयोग का है, खासकर उन लोगों के लिए जो कॉस / पाप चीजों में मजबूत नहीं हैं, यदि आप सैद्धांतिक स्पष्टीकरण के बाद 'अनुकूलित' छद्म कोड डालते हैं।
GameAlchemist

मुझे लगता है कि यहां कोड को अनुकूलित नहीं किया गया है, लेकिन ऐसा प्रतीत होता है कि आप दूरी पर sqrt () कॉल से बच सकते हैं, क्योंकि आप इसे तुरंत बाद एक पल का उपयोग करके इसे चुकता करते हैं।
काइल बरन

2

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

साथ: C कुएं का केंद्र, R इसकी त्रिज्या है।
P1 वह बिंदु है जिसे हम
K को एक 'बड़ा' स्थिरांक मान रहे हैं जिसे आप कुछ परीक्षणों (अच्छी तरह से द्रव्यमान) के साथ चुनते हैं।
vel0 प्रारंभिक वेग वेक्टर है, जो वृत्त के लिए स्पर्शरेखा है।
vel0 उच्च होना चाहिए (परीक्षण भी करें)
pos0 प्रारंभिक स्थिति, सर्कल पर, समय t0 पर।
: d दूरी चुकंदर C और P1
: Vn का मानक वेक्टर C P1

accx= - Vnx * K * 1 / square(d)   ; accy = - Vny * K * 1/square (d)  
velx = accx*(t-t0) + vel0x   ;   vely = accy(t-t0) + vel0y  
posx= (1/2)*accx*square(t-t0) + vel0x*(t-t0) + pos0x   ;   
posy= (1/2)*accx*square(t-t0) + vel0y*(t-t0) + pos0y   

Init: एक नया बिंदु स्पॉन पर जाने का सबसे आसान तरीका एक कोण A चुनना है, फिर:

  pos0x= Cx +R *cos(A)  ; pos0y = Cy + R*sin(A)  
  vel0x = v0*sin(A)   vel0y =  - v0*cos(A)     v0= float constant.

अद्यतन: प्रत्येक पुनरावृत्ति के लिए आपको गणना करनी होगी:

d= square root( square(P1x-Cx)+square(P1y-Cy) )  
Vnx= (P1x-Cx)/d   ;   Vny=(P1y-Cy)/d  
acc (accx,accy) and finally pos (posx, posy)  as described above.     

गति की गणना करने की आवश्यकता नहीं है।
शायद खेल किसी तरह के घर्षण का उपयोग करता है, तो समीकरण अलग होगा।
ध्यान दें कि आप कई बार कॉस (ए) और पाप (ए) का उपयोग करते हैं, इसलिए उन्हें स्टोर करें।

इसलिए यदि आप बहुत सारे बिंदुओं को दो-दो से जोड़ते हैं और एक ही समय में आप प्रारंभिक कोण ए को बदल देते हैं, तो खंड स्रोत को कुएं के चारों ओर घुमाया जाता है, आप समाधान से बहुत करीब आते हैं जो मुझे लगता है।

संपादित करें: मुझे लगता है कि आपको पहले बिना किसी घर्षण के इस पर ध्यान देना चाहिए, यह ठीक हो सकता है। घर्षण एक बल है जो गति के समानुपाती है, लेकिन उलट वेक्टर दिशा है। तो समीकरण बन जाता है:

    Acc = Gravity force + Friction Force.

घर्षण बल के साथ = - स्थिर * वेल। यह मुझे नहीं पता कि कैसे एकीकृत किया जाए, इसलिए मैं एक कदम से कदम एकीकरण के लिए जाऊंगा:

   Vel(t+dt) = vel(t) + acc(t)*dt,   
   pos(t+dt)= pos(t)+ vel(t)*dt.  

वहाँ संख्यात्मक स्थिरता मुद्दा होगा, लेकिन चूंकि कणिकाओं का जीवनकाल कम है, इसलिए यह एक मुद्दा नहीं होना चाहिए।


घर्षण के प्रभाव में समीकरण के बारे में क्या बदलना होगा? मेरे पास उस मुद्दे का कुछ हल है लेकिन मुझे आपकी बात सुनने में दिलचस्पी है।
मायकेल स्टोन

0

मैंने अंततः यह किया, कण व्यवहार की एक संतोषजनक प्रतिकृति।

http://www.openprocessing.org/sketch/73624

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

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