我如何分配不同世界生成器的影响以生成地形?
How do i distribute the influence of different world generators to generate terrain?
我对这个标题很满意,因为我不知道我的问题的正确术语。
我正在使用 Simplex Noise(具有 8 个八度)为我的地形生成高度图。为了融入地形,我使用温度值和降雨量值计算出哪个生物群落最适合该位置,并通过以下方式获得平方值:
Math.abs((biome.optimumTemperature-temp)*(biome.optimumTemperature-temp) + (biome.optimumRainfall-rain)*(biome.optimumRainfall-rain));
此值然后用于获取对点影响最大的生物群落(仅测试了 3 个生物群落)即 1/(squared value)
意味着越接近理想条件,生物群落对地形的控制就越多。但是我不知道如何让权重之和等于1。
示例 1:
Biome 0: FOREST Weight:0.04317983014648879
Biome 1: MOUNTAINS Weight:0.9954832102244979
Biome 2: PLAINS Weight:0.06793829435632236
这里和是:≈1,10660133 大于1
例二:
FOREST Weight:0.01621210578957933
MOUNTAINS Weight:0.023389024085188184
PLAINS Weight:0.017797794332510785
这里,总和为:≈0.0573989242,小于1
如果 biome.optimumTemperature = temp
和 biome.optimumRainfall = rain
意味着以后会变成 1 / 0(不好),为了防止影响接近无穷大,我已经将每个平方值限制在最大值 1 3.
我的问题是如何根据条件将影响分配给所有3个生物群落?
注意:如果一个生物群落与温度和雨水完美匹配,那么它的影响力为 1 是可以的,但在这种情况下,其他 2 个生物群落的影响力应该为 0 .
您似乎想对数字进行标准化。这是通过将每个数字除以总和来完成的:
double a, b, c;
double sum = a + b + c;
double normalizedA = a / sum;
double normalizedB = b / sum;
double normalizedC = c / sum;
这确保新值的总和变为 1(加上或减去处理浮点数的任何舍入误差),同时保留不同数字的相对大小。
我对这个标题很满意,因为我不知道我的问题的正确术语。
我正在使用 Simplex Noise(具有 8 个八度)为我的地形生成高度图。为了融入地形,我使用温度值和降雨量值计算出哪个生物群落最适合该位置,并通过以下方式获得平方值:
Math.abs((biome.optimumTemperature-temp)*(biome.optimumTemperature-temp) + (biome.optimumRainfall-rain)*(biome.optimumRainfall-rain));
此值然后用于获取对点影响最大的生物群落(仅测试了 3 个生物群落)即 1/(squared value)
意味着越接近理想条件,生物群落对地形的控制就越多。但是我不知道如何让权重之和等于1。
示例 1:
Biome 0: FOREST Weight:0.04317983014648879
Biome 1: MOUNTAINS Weight:0.9954832102244979
Biome 2: PLAINS Weight:0.06793829435632236
这里和是:≈1,10660133 大于1
例二:
FOREST Weight:0.01621210578957933
MOUNTAINS Weight:0.023389024085188184
PLAINS Weight:0.017797794332510785
这里,总和为:≈0.0573989242,小于1
如果 biome.optimumTemperature = temp
和 biome.optimumRainfall = rain
意味着以后会变成 1 / 0(不好),为了防止影响接近无穷大,我已经将每个平方值限制在最大值 1 3.
我的问题是如何根据条件将影响分配给所有3个生物群落?
注意:如果一个生物群落与温度和雨水完美匹配,那么它的影响力为 1 是可以的,但在这种情况下,其他 2 个生物群落的影响力应该为 0 .
您似乎想对数字进行标准化。这是通过将每个数字除以总和来完成的:
double a, b, c;
double sum = a + b + c;
double normalizedA = a / sum;
double normalizedB = b / sum;
double normalizedC = c / sum;
这确保新值的总和变为 1(加上或减去处理浮点数的任何舍入误差),同时保留不同数字的相对大小。