Система координат. Вращение и перемещение
источник: П.А.Орлов ПРОГРАММИРОВАНИЕ
ДЛЯ ДИЗАЙНЕРОВ
Учебное пособие
Вращение
Функция rotate() вращает систему координат окна. Для нее требуется один параметр - угол (в радианах). Вращение происходит относительно точки (0,0).
- По умолчанию команда rotate осуществляет поворот на указанный угол в радианах. Для преобразования из числа градусов в радианы используется команда radians(z)
- Изменение заключается в изменении направлений координатных осей.
Пример 1. Вращение вокруг заданной точки
int xc, yc; // Вращение вокруг заданной точки int xc, yc; translate(xc, yc); итог: |
|
Пример 2 Перемещение и вращение фигуры произвольной формы вокруг заданной точки почасовой стрелке.
int xc, yc; // Вращение вокруг заданной точки int xc, yc;
float k=0; //для хранения значения угла поворота системы координат
size(300, 300);
noFill();
xc = 80;
yc = 80;
/*функция translate() переместит начало системы координат в точку(80, 80),
относительно первоначальной системы координат*/
translate(xc, yc);
for(int i = 0; i < 4; i += 1) {
stroke(random(255), 0,0);
beginShape();
vertex(0,0); vertex(15,20);
vertex(0,40); vertex(-15,20);
vertex(0,0);
endShape(CLOSE);
k=k+PI/2;
rotate(k);// вращение системы координат
}
Пример 2. Вращение вокруг заданной точки почасовой и против часовой стрелки.
-
Вращение происходит относительно начала системы координат.
-
Если вы передаете отрицательные числа функции rotate(), то вращение будет происходить против часовой стрелки.
size(300,300); |
|
size(300,300); |
Схема соотношения между градусной и радианной мерой значения угла
Значения 4 углов в радианах используются настолько часто, что в Processing им присвоены имена:
|
Для того, чтобы запрограммировать вращение некоторой фигуры относительно ее центральной точки:
- сначала используйте функцию translate(), чтобы расположить фигуру там, где вы хотите,
- затем вызовите функцию rotate() и нарисуйте нужную фигуру с центром в точке (0,0):
Трансформации с системой координат суммируются, общая трансформация системы координат может быть представлена как «смещение + вращение + вращение и так далее...».
Пример 3 . В коде проекта представлена логика перемещения и вращения системы координат Processing.
Вариант1
void draw () { background (100);// закрасит фон окна приложения в серый цвет strokeWeight (40);// установка толщины кисти (контура фигуры или параметров контура) /* передаем два аргумента, два значения половины ширины и половину высоты окна, функция translate() переместит начало системы координат в эту точку, в нашем примере – в точку(300,300) по первоначальной системе координат*/ translate(width/2, height /2); /*Все вызовы, связанные с координатами, которые будут сделаны после перемещения системы координат в новую точку, будут пересчитаны Processing в рамках нового положения системы координат*/ //рисуем первую светлую линию rotate(PI/4);// Вращение системы координат: 180/4 = 45 градусов /*Трансформации с системой координат суммируются, т.е. в нашем примере к следующей строке общая трансформация системы координат может быть представлена как «смещение + вращение».*/ rotate(PI/4);/*Теперь общая трансформация системы координат представляет собой «смещение + вращение + вращение», и т. д.*/ rotate(PI/4); rotate(PI/4); rotate(PI/4); rotate(PI/4); } |
Вариант2
int z=245;//для хранения текущего значения цвета контура(линии) size (600, 600); /* передаем два аргумента, два значения половины ширины и половину высоты окна приложения, функция translate() переместит начало системы координат в эту точку, в нашем примере – в точку(300,300) по первоначальной системе координат*/ translate(width/2, height /2); for(int i = 0; i < 7; i += 1) {
|
Задание . Измените код проекта таким образом, чтобы вращение системы координат происходило против часовой стрелки.