任何人都可以给我一个关于如何生成“平滑”随机数的提示吗? 以下是我的意思:平滑:“平滑”随机数算法
随机数字应在游戏中使用,例如:风向和力量(有没有人记得古老的“蠕虫”?)。当然,每秒钟为这些值设置随机数字看起来会非常不稳定。 我宁愿在给定的数值范围内有某种平滑的振荡。有点像正弦波,但更随机。
有没有人得到我后? ;-) 任何想法如何实现这种行为将不胜感激。
任何人都可以给我一个关于如何生成“平滑”随机数的提示吗? 以下是我的意思:平滑:“平滑”随机数算法
随机数字应在游戏中使用,例如:风向和力量(有没有人记得古老的“蠕虫”?)。当然,每秒钟为这些值设置随机数字看起来会非常不稳定。 我宁愿在给定的数值范围内有某种平滑的振荡。有点像正弦波,但更随机。
有没有人得到我后? ;-) 任何想法如何实现这种行为将不胜感激。
如果您希望增量(变化)很小,只需为增量生成一个小的随机数。
例如,而不是:
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本福德的法律在这里完全不适用。分布之后的问题可能是一个有趣的问题,但本福德定律只是描述一个数值现象,它没有描述连续的随机数分布(它确实描述了可以从中抽样的离散分布 - 但为什么要选出这个特定的分布? )。 –
您可以将风表示为一个矢量,并用随机值进行移动平均。这将平均消除与您平均的样本量成比例的波动。 –