【发布时间】:2013-03-21 18:22:29
【问题描述】:
我有任意数量的柏林噪声图和每个的权重。所有权重的总和为 1,但这不应该有所作为。
我想获得关于权重的最高值的噪声。
我的第一种方法是从每个 perlin 噪声中获取数字,将它们转换为百分比(我有一个循环表),乘以权重并选择最高值。但是这种方法有一个巨大的缺陷:它区分较小的权重而偏爱较大的权重,因此会打乱分布。我希望 0.2 的权重出现在 20% 中。
我想将它用于地图生成器以选择图块类型。我使用多个 perlin 噪声,因为我想使用许多不同的瓷砖类型来彼此相邻,因此不能使用渐变。
有谁知道如何修复这个缺陷,或者用不同的方法来生成基于图块的地图?
编辑: 与此同时,我想出了一个几乎可以接受的解决方案:
final float[] values = new float[noises.length];
for (int i = 0; i < values.length; i++)
values[i] = noises[i].get(x, y) * (1f + (weights[i] - 1f / noises.length));
int max = 0;
for (int i = 1; i < values.length; i++)
if (values[i] > values[max])
max = i;
return noises[max];
唯一的缺陷是不够精确。即使权重为 0f,噪声仍然会在大约 6% 的所有时间内返回。
【问题讨论】:
-
您所说的“重量的最高值”到底是什么意思?当我第一次阅读时,我假设您想要区分小权重噪声图。
-
类似于 perlin 值 * 重量,然后选择最大的。但我也希望每一个都选择等于权重,例如权重为 0.2 的噪声应在 20% 的时间中最高。
标签: java random perlin-noise stochastic