Пятница, 19.04.2024, 20:39
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Тестування онлайн
тестування онлайн 


Социальные закладк

Вращение  и перемещение нескольких объектов

источники: Оксана Пасічник   Креативне програмування у Processing

Кейси Риз и Бен Фрай   Учимся программировать вместе с Processing Учебное пособие

Обратите внимание!!!

Чтобы смещение одной группы фигур не влияло на позицию других фигур, нарисованных следом за ними, примените функции pushMatrix() и popMatrix():


•    при запуске функции pushMatrix() происходит сохранение текущей координаты системы, 
•    функция popMatrix() восстанавливает сохраненную координату.

Пример 1. Вращение нескольких объектов

Шаг 1
void setup() {
  size(400, 400);
  background(255);
  noStroke();
//фигуры не будут иметь внешней границы
  fill(0);
/*интерпретирует первые два параметра rect() как центральную 
  точку прямоугольника, а третий и четвертый – как его ширину и высоту.*/

  rectMode(CENTER);
}


void draw() {
  background(255);
  translate(100, 100);/
/сдвигает координаты системы 
  rect(0, 0, 80, 80);

  translate(300, 100);
  rect(0, 0, 80, 80);
 }

 

 

Шаг 2

.....

void draw() {
  background(255);

  pushMatrix(); //происходит сохранение текущей координаты системы
  translate(100, 100);  rect(0, 0, 80, 80);
 
popMatrix();//восстанавливает сохраненную координату

  pushMatrix(); 
  translate(300, 100);  rect(0, 0, 80, 80);
 
popMatrix();
 }

Шаг 3

...

void draw() {
  background(255);

  pushMatrix();   translate(100, 100);
  rect(0, 0, 80, 80);
  popMatrix();

  pushMatrix();   translate(300, 100);
  rect(0, 0, 80, 80);
  popMatrix();

  pushMatrix();   translate(100, 300);
   rect(0, 0, 80, 80);
  popMatrix();

  pushMatrix();  translate(300, 300);
  rect(0, 0, 80, 80);
  popMatrix();
 }

 

Шаг 4.

float r = 0;//для хранения значения угла вращения

....

void draw() {
  background(255);

pushMatrix();  translate(100, 100);
 rotate(r); rect(0, 0, 80, 80);
popMatrix();

 pushMatrix();  translate(300, 100);
rotate(r*0.5);  rect(0, 0, 80, 80);
popMatrix();

  pushMatrix();   translate(100, 300);
 rotate(r*2);  rect(0, 0, 80, 80);
  popMatrix();

  pushMatrix();  translate(300, 300);
 rotate(r*4);  rect(0, 0, 80, 80);
popMatrix();

  r = r + 0.02;
}

 

Пример 2 Вращение квадратов

floa r=0;//для хранения значения угла вращения
void setup() {
  size(512,512);
  frameRate(10);
}
void draw(){
  background(255);
  translate(width*0.5, height*0.5);  
//перемещает рисование в центр экрана
  noFill();//выключить заливку
 r =r + 0.01;
  for (int i=0; i<20; i++) {
   
rotate(r);
    rect(i,i,i*5,i*5);  // рисования 20 квадратов с каждый раз возрастающей стороной в координатах i, i

println("r =  ",r, "   i =  ",i);
  }

Пример 3. Круги разных радиусов

float r = 0;
void setup() {
  size(500,500);
  background(10);
}
void draw() {
  translate(width/2, height/2);
// перемещения рисования в центр полотна
  fill(255);
  rotate(r);
//поворот на r радиан
  float z = random(5, 15); // случайный выбор радиуса окружности
  ellipse(100 + r, 10, z, z); //круг в координатах 100+r, 10 (отступ постоянно увеличивается вместе с r)
  r = r + 0.2; // увеличение угла поворота
}

 

Пример 4. Перемещение и вращение

В зависимости от того, в каком порядке вы записываете функции translate() и rotate(), результат будет различным. Следующий пример отличается от предыдущих примеров  тем, что функции translate() и rotate() записаны в обратном порядке. Здесь фигура вращается относительно левого верхнего угла окна, а функция translate() задает расстояние от угла до фигуры:

float r = 0.0;
void setup() {
size(300,300);
smooth();
}
void draw() {

rotate(r);
fill(random(255),random(255),random(255));
translate(
mouseX, mouseY);
rect(-5, -5, 40, 40);

r += 0.1;
}

 

Форма входа
Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2024
    Конструктор сайтов - uCoz