Создавать случайные карты градиента образца? - PullRequest
0 голосов
/ 03 мая 2018

Итак, я работал над процедурным генерированием, и мне удалось создать круговую монохромную карту градиента, которую я использую для генерации других карт.

def create_circular_gradient(self, world):
    center_x, center_y = self.mapSize[1] // 2, self.mapSize[0] // 2
    circle_grad = np.zeros_like(world)

    for y in range(world.shape[0]):
        for x in range(world.shape[1]):
            distx = abs(x - center_x)
            disty = abs(y - center_y)
            dist = math.sqrt(distx * distx + disty * disty)
            circle_grad[y][x] = dist

    # get it between -1 and 1
    max_grad = np.max(circle_grad)
    circle_grad = circle_grad / max_grad
    circle_grad -= 0.5
    circle_grad *= 2.0
    circle_grad = -circle_grad

    # shrink gradient
    for y in range(world.shape[0]):
        for x in range(world.shape[1]):
            if circle_grad[y][x] > 0:
                circle_grad[y][x] *= 20

    # get it between 0 and 1
    max_grad = np.max(circle_grad)
    circle_grad = circle_grad / max_grad
    grad_world = self.apply_gradient_noise(world, circle_grad)
    return grad_world

Теперь мой вопрос, как именно мне нужно изменить это, чтобы создать случайный градиент завихрения? и даже может быть коробка или разнообразные линейные градиенты?

Обратите внимание, что world - это случайно сгенерированный двумерный массив (и может иметь любую форму, например, 100x100 или даже 100x50, но, конечно, я использую его намного больше), и к градиенту окружности я добавляю шум перлина, чтобы рандомизировать поколение. Код, который рандомизирует его, будет работать для любой карты, но я не уверен, с чего начать создавать различные формы градиента.

Редактировать Игнорировать магические числа, это был единственный способ, которым я нашел, как создать круговой монохромный градиент

...