Кейси Риз и Бен Фрай Учимся программировать вместе с Processing Учебное пособие
Обратите внимание!!!
Чтобы смещение одной группы фигур не влияло на позицию других фигур, нарисованных следом за ними, примените функции pushMatrix() и popMatrix():
• при запуске функции pushMatrix() происходит сохранение текущей координаты системы,
• функция popMatrix() восстанавливает сохраненную координату.
Пример 1. Вращение нескольких объектов
Шаг 1 void setup() {
size(400, 400);
background(255);
noStroke();//фигуры не будут иметь внешней границы fill(0); /*интерпретирует первые два параметра rect() как центральную
точку прямоугольника, а третий и четвертый – как его ширину и высоту.*/ rectMode(CENTER);
}
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() задает расстояние от угла до фигуры: