Я предполагаю, что это достаточно распространенная проблема, и прошу решения, которое может быть более академическим по своей природе, или общего уравнения, используемого для общих проблем, подобных этой, в отличие от того, что я вырубаю то, что выглядит как очень большой беспорядок спагетти.
Я хочу сгенерировать края моего мозаичного мира. У меня есть основные 8 ребер. У меня есть массив целых чисел, которые представляют мои плитки. 0 — вода, 1 — трава. Я хотел бы добавить свои края, переход между водой и травой. Мои края от 10 до 17.
int edges[3][3] =
{
{10, 11, 12},
{13, 0, 14},
{15, 16, 17}
};
Первое, что я думаю, это то, что это напоминает матрицы. Я знаю, что у меня есть объект матрицы 3 на 3 с моей графической библиотекой. Существуют ли какие-либо стандартные операции с матрицами или масками для умного применения моих краев к моим плиткам?
Существует ли стандартная формула для слияния ребер? Например, если правый нижний угол перекрывается с плиткой травы, возможно, я бы просто не стал менять ее значение, однако, если правая нижняя часть перекрывается с верхней левой, я хочу изменить эту плитку на траву (0). Индивидуальных сценариев гораздо больше, и проблема становится сложной.
Поскольку для добавления ребер при создании плиток травы потребуется функция просмотра вперед, мои края генерируются как дополнительный анализ моего массива плиток. Поэтому я ищу решение, в котором я могу добавить края к краям моих участков травы.
Это также напоминает мне о сглаживании, интересно, есть ли соответствующая формула в этой области.
В идеале решение должно быть оптимальным. Например, у меня была бы какая-то маска, подобная приведенной выше, и, добавляя ее к каждому тайлу травы в массиве, я бы затем получал уникальные значения для углов и сторон, чтобы я мог преобразовать их в изображения краев.