任何人都可以給我一個關於如何生成「平滑」隨機數的提示嗎? 以下是我的意思:平滑:「平滑」隨機數算法
隨機數字應在遊戲中使用,例如:風向和力量(有沒有人記得古老的「蠕蟲」?)。當然,每秒鐘爲這些值設置隨機數字看起來會非常不穩定。 我寧願在給定的數值範圍內有某種平滑的振盪。有點像正弦波,但更隨機。
有沒有人得到我後? ;-) 任何想法如何實現這種行爲將不勝感激。
任何人都可以給我一個關於如何生成「平滑」隨機數的提示嗎? 以下是我的意思:平滑:「平滑」隨機數算法
隨機數字應在遊戲中使用,例如:風向和力量(有沒有人記得古老的「蠕蟲」?)。當然,每秒鐘爲這些值設置隨機數字看起來會非常不穩定。 我寧願在給定的數值範圍內有某種平滑的振盪。有點像正弦波,但更隨機。
有沒有人得到我後? ;-) 任何想法如何實現這種行爲將不勝感激。
如果您希望增量(變化)很小,只需爲增量生成一個小的隨機數。
例如,而不是:
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 = 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)
佩林(或更好的單純形)噪聲是產生平滑噪聲時想到的第一種方法。它返回一個介於1和-1之間的數字,它將從當前值中加上或減去。你可以多倍使它看起來不那麼微妙或更好......使最低風值-1和最高風值1.
然後只需要一個播種機作爲計數器(1,2,3 ...等等)作爲perlin/simplex輸入保持值'平滑'。
如果你想模擬風,你可能會在隨機數後告訴你何時改變風向。當這個隨機時間事件發生時會改變風向,但將方向限制在一定的角度和速度(又是隨機的),所以只需在一定範圍內隨機選取一個隨機數並逐漸建立+ = 1(隨機的0.0 - 5.0)每秒一次(0-3秒隨機再次哈哈)等,直到它們在一定時間內隨機變化0-180度,這也是隨機的。很簡單,但完全取決於你如何實現這些時間和程度的變化等。 – pengibot
@Jodrell本福德的法律在這裏完全不適用。分佈之後的問題可能是一個有趣的問題,但本福德定律只是描述一個數值現象,它沒有描述連續的隨機數分佈(它確實描述了可以從中抽樣的離散分佈 - 但爲什麼要選出這個特定的分佈? )。 –
您可以將風表示爲一個矢量,並用隨機值進行移動平均。這將平均消除與您平均的樣本量成比例的波動。 –