Processing 形成某种毯子的彩色线条

Processing 形成某种毯子的彩色线条,processing,Processing,所以我试着用彩色线条做一条毯子,但我似乎无法得到下面所示的结果 我的代码首先放置水平线并应用数组中的颜色(颜色正确),然后放置垂直线并应用数组中的颜色 但是我似乎不能得到这个结果 这是我的密码。有人能启发我吗 float[][] vclrs = { //Array with color values for the vertical lines {220,31,24}, //Red {128,100,172}, //Purple {39,52,142}, //Blue {225

所以我试着用彩色线条做一条毯子,但我似乎无法得到下面所示的结果

我的代码首先放置水平线并应用数组中的颜色(颜色正确),然后放置垂直线并应用数组中的颜色

但是我似乎不能得到这个结果

这是我的密码。有人能启发我吗

float[][] vclrs = { //Array with color values for the vertical lines
  {220,31,24}, //Red
  {128,100,172}, //Purple
  {39,52,142}, //Blue
  {225,104,0}, //Beige
  {77,137,11}, //Green
  {83,188,188}, //Light Blue
};

float[][] hclrs = { //Array with color values for the horizontal lines
  {220,31,24}, //Red
  {187,167,212}, //Purple
  {39,52,142}, //Blue
  {244,198,149}, //Beige
  {77,137,11}, //Green
  {183,207,209}, //Light Blue
};

int controller = 8; //Width of the line and distance between the lines
int hlinedistance = controller; //Horizontal distance to place the next line
int vlinedistance = controller; //Vertical distance to place the next line

void setup() {
   size(576,480);
   background(255);
   strokeWeight(controller); //Stroke of the controller
}

void draw() {
  for(int i=0;i<6;i=i+1) {

      stroke(vclrs[i][0], vclrs[i][1], vclrs[i][2]);
      line(vlinedistance, 0, vlinedistance, displayHeight);
      vlinedistance = vlinedistance + (controller + controller);

      line(0, hlinedistance, displayWidth, hlinedistance);
      stroke(hclrs[i][0], hclrs[i][1], hclrs[i][2]);
      hlinedistance = hlinedistance + (controller + controller);

    }
}
float[][]vclrs={//数组,带有垂直线的颜色值
{220,31,24},//红色
{128100172},//紫色
{39,52142},//蓝色
{225104,0},//米色
{77137,11},//绿色
{83188188},//浅蓝色
};
float[][]hclrs={//带有水平线颜色值的数组
{220,31,24},//红色
{187167212},//紫色
{39,52142},//蓝色
{244198149},//米色
{77137,11},//绿色
{183207209},//浅蓝色
};
int控制器=8//线条的宽度和线条之间的距离
int hlinedistance=控制器//放置下一行的水平距离
int vlinedistance=控制器//放置下一行的垂直距离
无效设置(){
规模(576480);;
背景(255);
冲程重量(控制器);//控制器的冲程
}
作废提款(){

对于(inti=0;我很抱歉没有澄清细节(现在已经很晚了,但现在最好不要澄清),我不想以任何方式冒犯他人。 就像在每种编程语言中一样,代码是从上到下查看的,因此代码行是从上到下排列的

stroke(255, 0, 0); //red
line(x1, y1, x2, y2);
stroke(0, 255, 0); //green
line(x1, y1, x2, y2);
在这个代码段中,先画红线,然后在红线上画绿线。因此,您最终只能看到绿线。在您的示例中,有4层线

  • 第一组垂直线
  • 第一组水平线
  • 第2组垂直线
  • 第2组水平线
  • 这4组中的每一组都存储了不同的颜色。在我的解决方案中,您有如下不同的笔划:

  • vclrs=垂直组1的颜色
  • hclrs=水平组1的颜色
  • vclrs2=垂直组2的颜色
  • hclrs2=水平组2的颜色
  • 我们还使用strokeCap(项目);使线条边缘化。为了增加线条宽度,我们使用strokeWeight(宽度)

    在绘图部分,我们现在编写这4个for循环,它们使用模3-->相应地切换颜色,因此每组有3种不同的颜色。模是可供选择的颜色数组。 所有这4个for循环都有些不同,因为它们涉及不同的位置,我相信您可以理解其中的细节

    这是修改后的代码,以匹配您的结果。 我希望这有助于:

    float[][] vclrs = { //Array with color values for the vertical lines
       {220,31,24}, //Red
       {128,100,172}, //Purple
       {39,52,142}, //Blue
     };
    
    float[][] vclrs2 =
    {
      {225,104,0}, //Beige
      {77,137,11}, //Green
      {83,188,188}, //Light Blue
    };
    
    float[][] hclrs = { //Array with color values for the horizontal lines
      {220,31,24}, //Red
      {187,167,212}, //Purple
      {39,52,142}, //Blue
    };
    float[][] hclrs2 = 
    {
      {244,198,149}, //Beige
      {77,137,11}, //Green
      {183,207,209}, //Light Blue
    };
    
    int controller = 30; //Width of the line and distance between the lines
    
    void setup() {
       size(576,480);
       background(255);
       strokeCap(PROJECT);
       strokeWeight(controller / 2); //Stroke of the controller
    }
    
    void draw() {
      background(255);
      pushMatrix();
      translate(controller / 4, controller / 4);
      for(int i = 0; i < displayHeight / (3 * controller); i++) {
          stroke(vclrs[i % 3][0], vclrs[i % 3][1], vclrs[i % 3][2]);
          line((i * 2 * controller), 0, (i * 2 * controller), displayHeight);
      }
      for(int i = 0; i < displayWidth / (3 * controller); i++) {
          stroke(hclrs[i % 3][0], hclrs[i % 3][1], hclrs[i % 3][2]);
          line(0, (i * 2 * controller), displayWidth, (i * 2 * controller));
      }
    
        for(int i = 0; i < displayHeight / (3 * controller); i++)
      {
          stroke(vclrs2[i % 3][0], vclrs2[i % 3][1], vclrs2[i % 3][2]);
          line((i * 2 * controller + controller), 0, (i * 2 * controller + controller), displayHeight);
      }
      for(int i = 0; i < displayWidth / (3 * controller); i++)
      {
          stroke(hclrs2[i % 3][0], hclrs2[i % 3][1], hclrs2[i % 3][2]);
          line(0, (i * 2 * controller + controller), displayWidth, (i * 2 * controller + controller));
      }
      popMatrix();
    }
    
    float[][]vclrs={//数组,带有垂直线的颜色值
    {220,31,24},//红色
    {128100172},//紫色
    {39,52142},//蓝色
    };
    浮动[][]vclrs2=
    {
    {225104,0},//米色
    {77137,11},//绿色
    {83188188},//浅蓝色
    };
    float[][]hclrs={//带有水平线颜色值的数组
    {220,31,24},//红色
    {187167212},//紫色
    {39,52142},//蓝色
    };
    浮动[]hclrs2=
    {
    {244198149},//米色
    {77137,11},//绿色
    {183207209},//浅蓝色
    };
    int controller=30;//线条的宽度和线条之间的距离
    无效设置(){
    规模(576480);;
    背景(255);
    strokeCap(项目);
    冲程重量(控制器/2);//控制器的冲程
    }
    作废提款(){
    背景(255);
    pushMatrix();
    翻译(控制器/4,控制器/4);
    对于(int i=0;i
    在示例图像中,您必须更仔细地考虑线条的绘制顺序。哪些线条先绘制?哪些最后绘制?有没有办法在绘制之后更改线条的顺序?或者只有在第一次以正确的顺序绘制线条?您可以尝试使用Z-o进行一些巧妙的操作RDE和OpenGL渲染,但这远不止是坐下来试着弄清楚顺序的工作。即使这个答案解决了问题,它的质量也很低。它没有说明你是如何解决问题的,也没有说明OP做错了什么。我尝试了很多事情,但没有得到上面所示的结果。发布了我想要的结果中的结果对我一点帮助都没有。对于“懒惰”部分来说,这是非常令人反感的。我对处理是新手,不知道你的代码到底做了什么。所以我不感谢你,因为这对我一点帮助都没有,也没有激励我。。