Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
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_.zip1.92 кб