Язык программирования:
Java
Среда программирования:
Processing
float circle_x = 0; float circle_y = 0; float circle_diam = 20; int state = 0; float colors[] = {120, 0, 200, 213, 15, 121, 35, 95, 67}; // how much to move the circle on each frame float move_x = 2; float move_y = -2; int i=0; float j=0.1f; int k=0; int x_shift = 60; int y_shift = 60; int stroke_weight = 4; int stroke_weight_2 = stroke_weight+1; void setup() { size(500, 500); background(0); noStroke(); while(circle_y < height){ //заполняем наши круги различными цветами. Как только заполнили нужный круг цветом, переходим к //следующей тройке rgb в нашем массиве colors[] fill(colors[i], colors[i+1], colors[i+2]); i+=3; if(i>8) { i=0; } //отрисовываем круги, сдвигаясь каждый раз на определенное расстояние x_shift //до тех пор, пока не дойдем до края окна ellipse(circle_x, circle_y, circle_diam, circle_diam); circle_x+=x_shift; if(circle_x > width+circle_diam/2){ //если дошли до края окна, то сдвигаем координату y на y_shift circle_y+=y_shift; // сдвигаясь, начинаем рисовать с третьего цвета, сдвигаемся с начала координат вправо // на половину x_shift для большей красоты демосцена // меняем значение переменной state на 1, дабы в следующий раз рисовать окружности, как // в первое линии if(state==0){ i=6; circle_x=x_shift/2; state=1; } else{ i=0; circle_x=0; state=0; } } } // устанавливаем значения координат центром наших будущих окружностей-пульсаций перед // функцией draw(), чтобы значения не устанавливались каждый раз в 0 с новым обновлением circle_x=0; circle_y=0; state=1; } void draw() { //пульсацией будут незаполненные окружности noFill(); //здесь мы отрисовываем те окружности, что в дальнейшем станут пульсацией. Их цвет //выбирается тем же способом, что и в функции setup() strokeWeight(stroke_weight); stroke(colors[k], colors[k+1], colors[k+2]); // в цикле рисуем пульсацию для каждой окружности определенного цвета // в этом цикле рисуем для нечетных строк for(i=0; i<=height; i+=120){ for(j=0; j<=width; j+=180){ ellipse(circle_x+j, circle_y+i, circle_diam+10, circle_diam+10); } } // в этом для четных for(i=y_shift; i<=height; i+=120){ for(j=x_shift+x_shift/2; j<=width; j+=180){ ellipse(circle_x+j, circle_y+i, circle_diam+10, circle_diam+10); } } // повторяем то же самое, только теперь делаем нашу окружность с толстыми черными стенками // эти окружности будут выполнять роль своего рода ластика, затирающего предыдущие цветные // пульсации stroke(0); strokeWeight(stroke_weight_2); for(i=0; i<=height; i+=120){ for(j=0; j<=width; j+=180){ ellipse(circle_x+j, circle_y+i, circle_diam+6, circle_diam+6); } } for(i=y_shift; i<=height; i+=120){ for(j=x_shift+x_shift/2; j<=width; j+=180){ ellipse(circle_x+j, circle_y+i, circle_diam+6, circle_diam+6); } } // пульсация первого столбца зеленого цвета if(circle_x == 120){ strokeWeight(stroke_weight); stroke(colors[k], colors[k+1], colors[k+2]); for(i=y_shift; i<=height; i+=120){ ellipse(x_shift/2, circle_y+i, circle_diam+10, circle_diam+10); } stroke(0); strokeWeight(stroke_weight_2); for(i=y_shift; i<=height; i+=120){ ellipse(x_shift/2, circle_y+i, circle_diam+6, circle_diam+6); } } // увеличиваем радиус пульсации, от значения на которое увеличиваем радиус зависит скорость // пульсации circle_diam+=1.5f; // проверяем, если наша пульсация достигла кружков друго цвета if(circle_diam > x_shift+18) { // затираем остатки пульсации for(i=0; i<=height; i+=120){ for(j=0; j<=width; j+=180){ ellipse(circle_x+j, circle_y+i, circle_diam+10, circle_diam+10); } } for(i=60; i<=height; i+=120){ for(j=90; j<=width; j+=180){ ellipse(circle_x+j, circle_y+i, circle_diam+10, circle_diam+10); } } // пульсация первого столбца зеленого цвета if (circle_x == 120){ for(i=y_shift; i<=height; i+=120){ ellipse(x_shift/2, circle_y+i, circle_diam+10, circle_diam+10); } } //вовзращаемся к изначальному диаметру circle_diam = 20; //если мы еще не прошли все цветные кружки, переходим к следоющему цвету if(circle_x < 120){ circle_x+=60; k+=3; } //иначе возвращаемся в начало else{ circle_x = 0; k=0; } } }
Прикрепленный файл | Размер |
---|---|
demoscene_mesnhykov_1.pde_.zip | 1.92 кб |