EDIT (перефразированный вопрос): Как использовать предоставленную функцию плавного перехода для создания постепенного перехода между смежными 2d-массивами? Каждый массив имеет одинаковый размер и содержит значения от 0 до 1, имеющие плавный переход от края к краю через симплексный шум. В результате я хотел разницу между соседними значениями массива, чтобы быть в maxiumum 0,04«Сшивание» нескольких 2d массивов
function smoothstep (min, max, value) {
var x = Math.max(0, Math.min(1, (value-min)/(max-min)));
return x*x*(3 - 2*x);
};
У меня 6 2d массивы, содержащие значения между 0 и 1, чтобы представить высоты на лице сферы. Для перебора всех значений массивов у меня есть это:
for (var i = 0; i < cube.faces.length; i++) {
for (var x = 0; x < cube.faces[i].heightMap.length; x++) {
for (var z = 0; z < cube.faces[i].heightMap.length; z++) {
if (x == 0 || x == cube.faces[i].heightMap.length - 1 || z == 0 || z == cube.faces[i].heightMap.length - 1) {
switch (i) {
case 0:
if (x == 0) {
//match left of face 1 to top of face 4
} else if (z == 0) {
//match top of face 1 to top of face 6
} else if (z == cube.faces[i].heightMap.length - 1) {
//match bottom of face 1 to top of face 5
} else {
//match right of face 1 to top of face 3
}
break;
case 1:
if (x == 0) {
//match left of face 2 to bottom of face 3
} else if (z == 0) {
//match top of face 2 to bottom of face 6
} else if (z == cube.faces[i].heightMap.length - 1) {
//match bottom of face 2 to bottom of face 5
} else {
//match right of face 2 to bottom of face 4
}
break;
case 2:
if (x == 0) {
//match left of face 3 to right of face 5
} else if (z == 0) {
//~~match top of face 3 to right of face 1~~
} else if (z == cube.faces[i].heightMap.length - 1) {
//~~match bottom of face 3 to left of face 2~~
} else {
//match right of face 3 to left of face 6
}
break;
case 3:
if (x == 0) {
//match left of face 4 to right of face 6
} else if (z == 0) {
//~~match top of face 4 to left of face 1~~
} else if (z == cube.faces[i].heightMap.length - 1) {
//~~match bottom of face 4 to right of face 2~~
} else {
//match right of face 4 to left of face 5
}
break;
case 4:
break;
case 5:
break;
default:
break;
}
}
}
}
}
Однако у меня возникают некоторые проблемы с получением лица совпасть. Заглядывая в это, я нашел функцию под названием «smoothstep», которая, кажется, именно то, что мне нужно. я не знаю, как его реализовать, мне еще предстоит найти объяснение, которое мне полезно.
function smoothstep(min, max, value) {
var x = Math.max(0, Math.min(1, (value - min)/(max - min)));
return x * x * (3 - 2 * x);
};
Следующая страница, где я узнал об этом методе, но я не могу понять, что пытается сказать. если у кого есть время, вы могли бы объяснить, как я могу реализовать это в своей ситуации? Link to related question
Примеры входов, ожидаемых выходов, фактических выходов, объясните, что происходит. Не просто публикуйте кусок кода и говорите, что он не работает. – 1983
вопрос заключается в том, как реализовать алгоритм smoothstep для двух 2-мерных массивов, содержащих значения от 0 до 1, чтобы их в настоящее время не бесшовные края стали бесшовными. если вам действительно нужен пример, который я могу дать, но любой ввод, который соответствует этим параметрам, будет работать. –
Итак, какой желаемый результат? Что оно делает? У вас есть ссылка? Вы уже представили реализацию, так что в чем проблема? Входы и выходы, пожалуйста. – 1983