У меня есть суровое количество карт шума perlin и вес для каждого. Сумма всех весов равна 1, но это не имеет значения.Map Generator с взвешенными шумами Perlin
Я хочу получить этот шум с наивысшей оценкой веса.
Мой первый подход состоял в том, чтобы получить числа от каждого шума perlin, преобразовать их в проценты (у меня есть таблица петли), умножить на вес и выбрать самое высокое значение. Но этот подход имеет огромный недостаток: он различает меньшие веса и предпочитает более крупные, и поэтому беспорядок распространяет. Я хочу, чтобы вес 0,2 появился в 20%.
Я хочу использовать это для генератора карт, чтобы выбрать тип плитки. Я использую множественные шумы perlin, потому что я хочу использовать множество разных типов плитки, чтобы граничить друг с другом и, следовательно, не может использовать градиент.
Кто-нибудь знает, как исправить этот недостаток или по-другому создать таблицы на основе плитки?
EDIT: Тем временем я понял, почти приемлемое решение:
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 value * weight, а затем выберите самый большой. Но я также хочу, чтобы каждый из них был выбран равным весу, например, шум с весом 0,2 должен быть самым высоким в 20% случаев. – DiddiZ