10

「滑らかな」乱数を生成する方法について誰かにヒントを教えてもらえますか?これが私がスムーズと言う意味です:

乱数は、たとえば風向や強さなどのゲームで使用されます(古くからの「ワーム」を覚えている人はいますか?)。もちろん、これらの値に1秒ごとに乱数を設定すると、ひどく途切れ途切れに見えます。むしろ、与えられた値の範囲である種の滑らかな振動が欲しいです。正弦波のようなものですが、はるかにランダムです。

誰かが私が求めているものを手に入れますか?;-)この種の振る舞いを実現する方法についてのアイデアをいただければ幸いです。

4

3 に答える 3

9

デルタ(変更)を小さくしたい場合は、デルタの小さな乱数を生成するだけです。

たとえば、次の代わりに:

windspeed = random (100)                # 0 thru 99 inclusive

次のようなものを使用します:

windspeed = windspeed - 4 + random (9)  # -4 + 0..8 gives -4..4
if   windspeed > 99: windspeed = 99
elif 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)
于 2012-10-03T08:30:36.597 に答える
3

Perlin(またはより良いシンプレックス)ノイズは、平滑化されたノイズを生成するときに頭に浮かぶ最初の方法です。1から-1までの数値を返し、現在の値に加算または減算します。これを乗算して、微妙さを抑えたり、より良く見せたりすることができます...最低の風の値を-1にし、最高の風の値を1にします。

次に、perlin /シンプレックス入力が値を「スムーズ」に保つため、カウンター(1、2、3 ...など)としてシーダーを使用します。

于 2013-03-31T23:08:23.953 に答える
0

滑らかな乱数の新しいバージョンを作成しました。乱数は制限=[平均-振動、平均+振動]の範囲内にあり、[-分散、+分散]ごとに変化するという考え方です。

しかし、それが限界に達すると、分散は減少します。

たとえば、[0、100]からの数値、分散は10です。現在の値= 8の場合、分散は[0、18]になります。

Pythonコード:

def calculate_smooth_random(current_value, average, oscillation, variance):
    max_value = average + oscillation
    min_value = average - oscillation

    max_limit = min(max_value, current_value + variance)
    min_limit = max(min_value, current_value - variance)
    total_variance = max_limit - min_limit

    current_value = min_limit + random.random() * total_variance

    print("current_value: {}".format(current_value))
    return current_value

値のある分布の画像:平均:20振動:10分散:5

ここに画像の説明を入力してください

于 2022-01-05T09:02:31.633 に答える