float r = 2, x, y, vx, vy; // глобальные переменные и их начальные значения int maxInertion = 75, cInertion = maxInertion, ci = -1; color[] c = new color[3]; // а это массив, о нем в следующей передаче... void setup() // функция начальных установок { size(720, 400); frameRate(30); // размер окна и частота рисования - draw() в нем background(0,0,0); smooth(); noStroke(); // все как обычно c[0] = color(255,80,0); c[1] = color(255,135,0); c[2] = color(255,25,45); // заносим цвета в массив } void draw() // функция рисования { if (mousePressed && (cInertion != 0)) // условие - "если мышка нажата и инерция не равна нулю" { if (cInertion == maxInertion) // если это начало рисования - заносим: { r = 2; x = mouseX; y = mouseY; vx = vy = 0; ci = (ci + 1) % 3; // начальные значения переменных fill(0,0,0,25); rect (0,0,719,399); // и немного гасим картинку }; vx += (float)(mouseX - pmouseX) * 0.05; // это как раз инерция перемещения, vy += (float)(mouseY - pmouseY) * 0.05; // вектор - если так понятней x += vx; y += vy; // это координаты drawRandomSpot2 (x, y, r, c[ci]); // вызов функции рисования r *= 1.07; cInertion--; // радиус - увеличился, счетчик инерции - уменьшился if (cInertion == 0) cInertion = maxInertion; } else if ((cInertion != 75) && (cInertion != 0)) // условия инерции рисвания { x += vx; y += vy; // а это сама инерция рисования после мыше-отпускания drawRandomSpot2 (x, y, r, c[ci]);// вызов функции рисования r *= 0.95; cInertion--; // радиус - увеличился, счетчик инерции - уменьшился if (cInertion == 0) cInertion = maxInertion; // закончилось? значит будет - начало }; } // это вся основная программа, ниже... - описание функций void drawSpot (float x, float y, float r, color c) { fill (0, 0, 0, 127); ellipse (x, y, r * 1.1 + 1, r * 1.1 + 1); fill (c); ellipse (x, y, r, r); }; void drawRandomSpot (float x, float y, float r, color c) { float rr, r2 = r * 0.5; for (int i = 0; i < 7; i++) { rr = r - r * i / 10; fill (red(c) - 35 + random(70), green(c) - 35 + random(70), blue(c) - 35 + random(70)); ellipse (x + (r2 - random(r)) , y + (r2 - random(r)), rr, rr); }; }; void drawRandomSpot2 (float x, float y, float r, color c) { float rr, r2 = r * 0.5, xx, yy; fill (0, 0, 0); ellipse (x, y, r * 1.1 + 1, r * 1.1 + 1); fill (red(c) - 25 + random(50), green(c) - 25 + random(50), blue(c) - 25 + random(50)); ellipse (x , y , r, r); for (int i = 1; i < 7; i++) { rr = r2 - r2 * i / 10; xx = x + (r2 - random(r)); yy = y + (r2 - random(r)); fill (0, 0, 0); ellipse (xx, yy, rr * 1.1 + 1, rr * 1.1 + 1); fill (red(c) - 35 + random(70), green(c) - 35 + random(70), blue(c) - 35 + random(70)); ellipse (xx , yy, rr, rr); }; };