2012-10-03 26 views
6

"Pürüzsüz" rasgele sayıların nasıl oluşturulacağına dair bana bir ipucu verebilir mi?"Düzgün" rasgele sayılar için algoritma

rasgele sayılar bir oyun kullanılacaktır, örneğin: ne pürüzsüz demek İşte rüzgar yönü ve gücü için (kimse goood eski "Worms" hatırlıyor mu?). Tabii ki, her saniye için bu değerler için rasgele sayılar ayarlanması çok dalgalı görünebilir. Belirli bir değer aralığında bir çeşit pürüzsüz salınım olmasını tercih ederim. Sinüs dalgası gibi ama çok daha rasgele.

Kullandığım şeyi yapan var mı? ;-) Bu tür davranışlara nasıl ulaşılacağı ile ilgili herhangi bir fikir takdir edilecektir.

+1

sen ne zaman rüzgarı benzetmek istiyorsanız rüzgar yönünü değiştirmek için söylemek rastgele bir sayı sonra muhtemelen. Bu rastlantısal zaman olayı meydana geldiğinde, rüzgar yönünü değiştirir, fakat yönü belli bir açıda ve hızda sınırlar (tekrar rastgele), böylece sadece belirli bir aralıktaki rastgele sayıları seçer ve değişime kademeli olarak + = 1 (0,0 - 5.0 rastgele) her saniyede (0-3 saniye rastgele tekrar lol) vb. rastgele bir rastgele değişime ulaşıncaya kadar belli bir süre 0-180 derece. Oldukça basit, ama tamamen size bu zamanları ve derece değişiklikleri vb. nasıl uyguladığınıza dair. – pengibot

+1

@Jodrell Benford’un yasası burada tamamen uygulanamaz. Dağıtımdan sonra soru ilginç bir soru olabilir ama Benford yasası basitçe sayısal bir fenomeni tanımlar, sürekli bir rasgele sayı dağılımını tarif etmez (örneklemeden ayrı bir dağılımı tanımlar - ama neden bu özel dağılımı tekilleştiriyorsun?). –

+0

Vektör olarak rüzgarı temsil edebilir ve rastgele değerlerle hareketli bir ortalama yapabilirsiniz. Bu, ortalama numune büyüklüğüyle orantılı olarak dalgalanmaları yumuşatır. –

cevap

4

Eğer delta (değişim) küçük olmasını istiyorsanız, sadece delta için küçük rasgele sayı üretir. gibi

windspeed = random (100)    # 0 thru 99 inclusive 

kullanım şey: yerine Örneğin

,

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

Bu şekilde, rüzgar hızı hala gerekli sınırlar içinde tutulur ve sadece şimdiye kadar kademeli olarak değiştirir.

yavaş yavaş değiştirirken şey sabit bir yönden açı ise bu hız gibi mutlak değerler için çalışmak ve aynı zamanda yön için olacaktır.

Oldukça iyi herhangi ölçüm için kullanılabilir.


Alternatif olarak, şu anda olduğu gibi rüzgar hızı bir olasılıkla büyük delta ile değişir, ama yavaş yavaş, hedef rüzgara oluşturabilir sağlamak ama ona doğru yavaş yavaş hareket etmek istiyorsanız:

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

Ancak rüzgar hızının üst veya alt sınırda sıkışması mümkün olmaz mıydı? – Boris

+2

@Boris, evet, ne anlamı var? Rastgele havanın da yapabileceği şey budur :-) Eğer belirli bir değere (50 gibi) yöneldiğinden emin olmak istiyorsanız, bunu başarmak için sadece rastgele sayıları tartın. – paxdiablo

+0

Veya artışlardan istenen değeri kesen güncellememi görün. – paxdiablo

0

Perlin (veya daha iyi simpleks) gürültüsü, düzleştirilmiş gürültü oluştururken akla ilk gelen yöntem olacaktır. Geçerli değerden eklenecek veya çıkarılacak olan 1 ile -1 arasında bir sayı döndürür. Sen ... Bu daha iyisi daha az ince veya görünmesine

1. Sonra basit bir sayaç (1,2,3 gibi bir ekim makinesi var en düşük rüzgar değerini -1 ve en yüksek rüzgar değere sahip olması için birden yapabilirsiniz ... vb) perlin/simpleks girişi değerleri 'pürüzsüz' olarak tutar.

İlgili konular