首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理如何根据素描中的位置改变颜色?

处理如何根据素描中的位置改变颜色?
EN

Stack Overflow用户
提问于 2018-10-01 07:32:03
回答 1查看 630关注 0票数 3

我一直在尝试创建元胞自动机,在处理过程中使用Moore邻域,到目前为止已经相当成功了。我已经设法使基本系统正常工作,现在我希望通过添加不同的特性来处理它。现在,我检查细胞是否还活着。如果是的话,我使用fill()函数应用颜色,然后根据该单元格存活的时间改变该颜色的饱和度。但是,我希望能够根据活细胞的位置改变其颜色,例如

下图所示图像:

从外观上看,似乎使用了一个等式来实现这一效果,尽管我不完全确定。这已经困扰了我大约两天了。我不想要答案,因为我想自己找出答案。然而,如果有人能指出我的正确方向,我将非常感激!

现在,我已经使每个单元格成为类单元格的对象。在那里,我存储细胞的x,y坐标和当前的生命状态。它还包含一个draw()方法:

它对单元格应用不同的颜色,这取决于它是否活着(年龄变量存储单元格在几秒钟内存活的时间)。

这是:

是目前为止输出的样子。就像我之前说的,我想让它看起来像第一个链接中的示例图像。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-01 13:06:52

使用noise(x,y)根据每个小区的坐标计算Perlin噪声值。在绘制单元格时,将此值映射到色调(或饱和度或亮度),以实现全局颜色梯度效应。

更新:示例代码,用于生成更好地映射到整个颜色谱的噪声(参见在此之前之后)。

代码语言:javascript
复制
{
    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();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52586418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档