Обработка Как вы меняете цвет в зависимости от расположения на эскизе? - PullRequest
0 голосов
/ 01 октября 2018

Я пытался создать сотовые автоматы, используя окрестности Мура, в процессе обработки и до сих пор был довольно успешным.Мне удалось заставить базовую систему работать, и теперь я хочу поиграть с ней, добавив различные функции.Прямо сейчас я проверяю, жива ли клетка или нет.Если это так, я применяю цвет с помощью функции fill (), а затем я могу изменить насыщенность этого цвета в зависимости от того, как долго ячейка была жива.Но я хочу иметь возможность изменять цвет живых клеток в зависимости от их расположения, например,

Изображение, показанное здесь:

enter image description here

Судя по всему, кажется, что для достижения этого эффекта использовалось уравнение, хотя я не совсем уверен.Это поставило меня в тупик около 2 дней.Я не хочу ответа, поскольку я хотел бы выяснить это самостоятельно.Однако, если бы кто-то мог указать мне правильное направление, я был бы очень признателен!

Прямо сейчас я сделал каждую клетку объектом класса Cell.Там я храню координаты x, y ячейки и текущее состояние.Он также содержит метод draw():

enter image description here

, который применяет к ячейке другой цвет в зависимости от того, жив он или нет (переменная возрастахранит число, на которое ячейка прослужила в течение нескольких секунд)как пока.Как я уже говорил, мне бы хотелось, чтобы оно выглядело как пример изображения в первой ссылке.

1 Ответ

0 голосов
/ 01 октября 2018

Используйте noise(x,y) для расчета значения Perlin Noise для каждой ячейки на основе ее координат.При отрисовке ячеек для эффекта глобального градиента цвета сопоставьте это значение с оттенком (или насыщенностью, или яркостью).


Обновление: Пример кода для генерации шума, который лучше отображается на весь спектр цветов (см. до против после ).

{
    final float resolution = 0.0175f;
    noiseDetail(20);
    colorMode(HSB, 1, 1, 1);

    float[] hues = new float[width * height];

    loadPixels();

    float hueMax = 0;
    float hueMin = 1;

    for (int x = 0; x < width; x++) { // Create value hue per pixel.
        for (int y = 0; y < height; y++) {
            int i = (y * width) + x;

            hues[i] = noise(x * resolution, y * resolution); 

            if (hues[i] > max) {
                max = s[i];
            } else {
                if (hues[i] < min) {
                    min = hues[i];
                }
            }
        }
    }

    for (int x = 0; x < width; x++) { // Maps hue value to a more complete spectrum; updates PApplet pixels[].
        for (int y = 0; y < height; y++) {
            int i = (y * width) + x;

            float hue = map(hues[i], min/0.4f, max*0.9f, 0, 1); // constants found by experimenting

            pixels[i] = color(hue, 1, 1); // only map hues in this example
        }
    }

    updatePixels();
}
...