2014-09-22 3 views
0

Так что я пытаюсь сделать одеяло с цветными линиями, но я не могу показаться, чтобы получить к результату, показанному ниже ...Цветные линии, чтобы сформировать своего рода одеяло

Мой код первого помещает горизонтальный line и применяет цвет из массива, (цвета правильные), а не помещает вертикальную линию и применяет цвет из массива.

Но я не могу показаться, чтобы получить этот результат ..

Result I'm trying to make

Это мой код. Кто-то просветил меня?

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); 

    } 
} 
+0

Вы собираетесь должны думать труднее о порядке линии нарисованы в вашем примере изображения. Какие строки рисуются первыми? Какие последние нарисованы? –

+0

Есть ли способ изменить порядок строк после их рисования? Или можно только в первый раз нарисовать линии в правильном порядке? – Azylak

+1

Вы могли бы * попробовать * попробовать что-то умное с помощью Z-order и OpenGL-рендеринга, но это намного больше, чем просто сидеть и пытаться выяснить порядок. –

ответ

1

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

stroke(255, 0, 0); //red 
line(x1, y1, x2, y2); 
stroke(0, 255, 0); //green 
line(x1, y1, x2, y2); 

В этом фрагменте кода сначала нарисована красная линия, а затем зеленая линия прокладывается над красной линией. Таким образом, вы просто просматриваете зеленую линию. В вашем примере у вас есть 4 слоя линий.

  1. Группа 1 вертикальных линий.
  2. Группа 1 горизонтальных линий.
  3. Группа 2 вертикальных линий.
  4. Группа 2 горизонтальных линий.

Каждая из этих 4 групп имеет разные цвета, хранящиеся внутри них. В моем решении у вас есть различные штрихи следующим образом:

  1. vclrs = цвет вертикальной группы 1
  2. hclrs = цвет горизонтальной группы 1
  3. vclrs2 = цвет вертикальной группы 2
  4. hclrs2 = цвет горизонтальной группы 2

Мы также используем strokeCap ​​(PROJECT); чтобы сделать линии острыми. Чтобы увеличить ширину линий, мы используем strokeWeight (width);

В части чертежа мы теперь записываем эти 4 петли, которые переключают цвета соответственно по модулю 3 -> Следовательно, у вас есть 3 разных цвета для каждой группы. Modulo является массивом цвета на выбор. Все эти 4 для петель немного отличаются друг от друга, поскольку они имеют разные позиции, я уверен, что вы можете понять детали там.

Ваш код изменен, чтобы соответствовать вашему результату. Я надеюсь, что это помогает:

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(); 
} 
+1

Даже если этот ответ решает проблему, он имеет низкое качество. Он ничего не говорит о том, что вы решили проблему, или о том, что ОП сделал неправильно. –

+0

Я пробовал много вещей, но я не мог получить результат, как показано выше. Проводка кода, который приводит к результату, который я хотел, не помогает мне вообще. И для «ленивой» части это довольно оскорбительно. Я новичок в обработке и не знаю, что делает ваш код. Так что спасибо от меня, потому что это не помогает мне вообще или мотивирует меня .. – Azylak

Смежные вопросы