2012-03-07 21 views
9

मैं यादृच्छिक चलती कणों के समूह को बनाने के लिए ब्राउनियन गति का उपयोग करने की कोशिश कर रहा हूं। http://jsfiddle.net/J75Em/16/दिशाओं के साथ कण ब्राउनियन गति

अब तक मुझे कणों को यादृच्छिक रूप से चल रहा है, लेकिन मुझे यकीन नहीं है कि यह आगे की दिशा को और अधिक प्राकृतिक बनाने के लिए कैसे सेट करें।

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

क्या यह इस प्रकार के आंदोलन के लिए सही दृष्टिकोण है? धन्यवाद;

+0

में समाधान 2 देख सकते हैं यदि आप वास्तव में मधुमक्खियों का उपयोग कर रहे हैं तो मेरे पास वास्तव में अनियमित होने के लिए एक सेट होगा और एक झुंड नेता का अनुसरण करेगा। – Incognito

+0

आप बाधाओं को थोड़ा सा कुशल बना सकते हैं ताकि यह पूरी तरह से यादृच्छिक न हो। 85% यादृच्छिक और 15% अंतिम दिशा या उस तरह कुछ।मुझे लगता है कि यह आगे की दिशा में थोड़ा और आगे जाएगा – ajax333221

उत्तर

8

यह बहुत साफ है!

आप इसके बारे में सही तरीके से जा रहे हैं लेकिन आपको वास्तव में atan2 फ़ंक्शन का उपयोग करना चाहिए। यह किसी भी 0 चेक की आवश्यकता को हटा देता है।

atan2 समारोह आप एक कोण जो सकारात्मक एक्स वेक्टर से घड़ी की विपरीत है

(1, 0) --->

मधुमक्खियों 90 डिग्री इस शुरू करने की दृष्टि से बंद ताकि आप घटाना चाहिए देता है दिशा से 90 डिग्री। (आप जिस तरह से डीई और डीएक्स गणना करते हैं, उसके आधार पर आपको

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

मैं वास्तव में इसके बारे में कहूँगा- -पीआई/8 और पीआई/8 रेडियंस और एक यादृच्छिक लंबाई के बीच एक कोण उत्पन्न करके। अनिवार्य रूप से ध्रुवीय निर्देशांक का उपयोग कर। फिर इस नई यादृच्छिक ध्रुवीय एक्स और

newX = currentX + (randomLength * cos(randomAngle + currentAngle)) and 
newY = currentY + (randomLength * sin(randomAngle + currentAngle)) 

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

अद्यतन:

तो मैं करीब से देख लिया है। समस्या यह है कि आप उम्मीद करते हैं। रोटेशन सेट करने के लिए रोटेशन सेट करें जब वास्तव में रोटेशन

में इसे ठीक करने के लिए 2 विकल्प हैं।

  1. घुमाएँ पिछले और वर्तमान कोण

  2. .transform विधि का उपयोग कर रोटेशन सेट के बीच अंतर से

आप कार्रवाई यहाँ http://jsfiddle.net/c5A2A/

+0

मदद me232 के लिए धन्यवाद, मैंने राफेल रोटेशन की कल्पना की लेकिन मुझे लगता है कि ब्राउनियन गति इस मामले में उपयुक्त नहीं हो सकती है। मधुमक्खियों को थोड़ा अनियमित बनाता है। बीमार पहले आपकी दूसरी विधि पर है! धन्यवाद फिर से – michael

+0

मुझे वास्तव में उनकी अनियमित आंदोलनों को पसंद आया, ऐसा लगता है कि वे गूंज रहे हैं :) –

+0

फिडल काम नहीं कर रहा था क्योंकि यह राफेल जेएस और एक छवि गायब था। यहां एक त्वरित अपडेट है: http://jsfiddle.net/brunoimbrizi/c5A2A/54/ – imbrizi

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