2012-10-03 16 views
6

क्या कोई मुझे "चिकनी" यादृच्छिक संख्याओं को उत्पन्न करने के बारे में संकेत दे सकता है? यहां मेरा मतलब चिकनी है:"चिकनी" यादृच्छिक संख्याओं के लिए एल्गोरिदम

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

क्या कोई मुझे बाद में प्राप्त करता है? ;-) इस तरह के व्यवहार को प्राप्त करने के तरीके पर कोई भी विचार की सराहना की जाएगी।

+1

यदि आप हवा को अनुकरण करना चाहते हैं तो हवा दिशा को बदलने के लिए आपको यादृच्छिक संख्या के बाद शायद आप शायद याद रखें। जब यह यादृच्छिक समय घटना हवा की दिशा बदलती है, लेकिन दिशा को एक निश्चित कोण और वेग (फिर से यादृच्छिक) तक सीमित करें, तो बस एक निश्चित सीमा के भीतर यादृच्छिक संख्या चुनें और धीरे-धीरे + = 1 (0.0 - 5.0 यादृच्छिक रूप से) परिवर्तन पर निर्माण करें। प्रत्येक सेकेंड (0-3 सेकेंड यादृच्छिक फिर से लॉल) इत्यादि। जब तक वे एक निश्चित समय पर 0-180 डिग्री यादृच्छिक परिवर्तन तक नहीं पहुंच जाते हैं जो फिर से यादृच्छिक होता है। काफी सरल, लेकिन आप पर निर्भर करता है कि आप इन समयों और डिग्री परिवर्तन आदि को कैसे कार्यान्वित करते हैं। – pengibot

+1

@ जोड्रेल बेनफोर्ड का कानून यहां पूरी तरह से लागू नहीं है। वितरण के बाद सवाल एक दिलचस्प सवाल हो सकता है लेकिन बेनफोर्ड का कानून बस एक संख्यात्मक घटना का वर्णन करता है, यह निरंतर यादृच्छिक संख्या वितरण का वर्णन नहीं करता है (यह एक अलग वितरण का वर्णन करता है जिसे से नमूना दिया जा सकता है - लेकिन इस विशेष वितरण को क्यों बाहर निकाला जा सकता है?)। –

+0

आप एक वेक्टर के रूप में हवा का प्रतिनिधित्व कर सकते हैं और यादृच्छिक मूल्यों के साथ एक चलती औसत कर सकते हैं। इससे आप औसतन नमूना आकार के साथ आनुपातिक रूप से उतार-चढ़ाव को सुगम बना देंगे। –

उत्तर

4

यदि आप डेल्टा (परिवर्तन) छोटा होना चाहते हैं, तो डेल्टा के लिए बस एक छोटा यादृच्छिक संख्या उत्पन्न करें।

उदाहरण के लिए, के बजाय: की तरह

windspeed = random (100)    # 0 thru 99 inclusive 

उपयोग कुछ:

windspeed = windspeed - 4 + random (9) # -4 + 0..8 gives -4..4 
if windspeed > 99: 
    windspeed = 99 
if windspeed < 0: 
    windspeed = 0 

इस तरह, आपके हवा की गति अभी भी आवश्यक सीमा के भीतर रखा जाता है और यह केवल कभी धीरे-धीरे बदल जाता है।

यह गति जैसे पूर्ण मूल्यों के लिए काम करेगा, और दिशा के लिए भी यदि आप धीरे-धीरे बदल रहे चीज को एक निश्चित दिशा से कोण है।

यह किसी भी माप के लिए बहुत अच्छी तरह से उपयोग किया जा सकता है।


वैकल्पिक रूप से, आप यह सुनिश्चित करें कि एक सम्भवतः बड़े डेल्टा के साथ windspeed परिवर्तन, लेकिन धीरे धीरे, आप अपने लक्ष्य windspeed उत्पन्न कर सकते हैं के रूप में आप वर्तमान में है, लेकिन यह की ओर धीरे-धीरे ले जाना चाहते हैं:

windspeed = 50 
target = windspeed 
while true: 
    # Only set new target if previous target reached. 

    if target == windspeed: 
     target = random (100) 

    # Move gradually toward target. 

    if target > windspeed: 
     windspeed = windspeed + max (random (4) + 1, target - windspeed) 
    else: 
     windspeed = windspeed - max (random (4) + 1, target - windspeed) 

    sleep (1) 
+2

लेकिन क्या यह संभव नहीं होगा कि हवा की गति ऊपरी या निचली सीमा पर फंस जाए? – Boris

+2

@ बोरीस, हाँ, आपका क्या मतलब है? यही यादृच्छिक मौसम भी कर सकता है :-) यदि आप यह सुनिश्चित करना चाहते हैं कि यह एक विशिष्ट मान (जैसे 50) की ओर गुरुत्वाकर्षण करता है, तो इसे प्राप्त करने के लिए केवल यादृच्छिक संख्याओं को वज़न दें। – paxdiablo

+0

या मेरा अपडेट देखें जो वांछित मूल्य को वांछित से डिस्कनेक्ट करता है। – paxdiablo

0

पर्लिन (या बेहतर सरल) शोर पहली विधि होगी जो चिकना शोर पैदा करते समय दिमाग में आती है। यह 1 और -1 के बीच एक संख्या देता है, जो वर्तमान मूल्य से जोड़ या घटाएगा। आप इसे कम सूक्ष्म या बेहतर लगने के लिए कई कर सकते हैं ... सबसे कम हवा मान -1 और उच्चतम पवन मूल्य 1.

फिर बस एक काउंटर के रूप में एक बीजर (1,2,3 ... इत्यादि) क्योंकि पर्लिन/सरल इनपुट इनपुट मानों को 'चिकनी' रखता है।

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