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


Меню сайта


Статистика

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


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


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

Система координат. Вращение и перемещение

источник: П.А.Орлов ПРОГРАММИРОВАНИЕ
ДЛЯ ДИЗАЙНЕРОВ
Учебное пособие

Вращение

Функция rotate() вращает систему координат окна. Для нее требуется один параметр - угол (в радианах). Вращение происходит относительно точки (0,0).

  • По умолчанию команда rotate осуществляет поворот на указанный угол в радианах. Для преобразования из числа градусов в радианы используется команда radians(z)
  • Изменение заключается в изменении направлений координатных осей.

Пример 1Вращение вокруг заданной точки

 

int xc, yc; // Вращение вокруг заданной точки int xc, yc; 
size(400, 400);
noFill();
xc = width/4;
// 100 пикселей
yc = height/4; //100 пикселей

translate(xc, yc);
stroke(255, 0,0);
ellipse(xc, yc, 100, 200);
 
rotate(PI/4);
stroke(0, 255,0);
ellipse(xc, yc, 100, 200);

итог: 

 

Пример 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);
fill(255,0,0);
rect(0,0,40,80);
translate(150,50);
rotate(radians(15));
//rotate(PI/12);
fill(0,255,0);
rect(0,0,40,80);

size(300,300);
fill(255,0,0);
rect(0,0,40,80);
translate(150,50);
rotate(radians(-60));
//rotate(PI/3);
fill(0,255,0);
rect(0,0,40,80);

 

Схема  соотношения  между градусной и радианной мерой значения угла

Значения 4 углов в радианах используются настолько часто, что в Processing им присвоены имена:

  • PI - 180,
  • QUARTER_PI - 45,
  • НALF_PI  - 90,
  • TWO_PI - 360.

 

 

Для того, чтобы запрограммировать вращение некоторой фигуры относительно ее центральной точки:

  • сначала используйте функцию translate(), чтобы расположить фигуру там, где вы хотите,
  •  затем вызовите функцию rotate() и нарисуйте нужную фигуру с центром в точке (0,0):

Трансформации с системой координат суммируются, общая трансформация системы координат может быть представлена как «смещение + вращение + вращение и так далее...».

 

 

Пример 3 . В коде проекта  представлена логика перемещения и вращения системы координат Processing.

Вариант1  

 


void setup () {  
size (600, 600); 
noLoop ();
//вызов этой функции означает, что наш холст будет обрисовываться один раз на экране
}

void draw () {

background (100);// закрасит фон окна приложения в серый цвет
smooth (); //установка параметров контура

strokeWeight (40);// установка толщины кисти (контура фигуры или параметров контура)

/* передаем два аргумента, два значения половины ширины и половину высоты окна, функция translate() переместит начало системы координат в эту точку, в нашем примере – в точку(300,300) по первоначальной системе координат*/

translate(width/2, height /2);

/*Все вызовы, связанные с координатами, которые будут сделаны после перемещения системы координат в новую точку, будут пересчитаны Processing в рамках нового положения системы координат*/

//рисуем первую светлую линию
stroke (210);//цвет контура  
line (0 ,0 ,150 ,30);

rotate(PI/4);// Вращение системы координат: 180/4 = 45 градусов
 

/*Трансформации с системой координат суммируются, т.е. в нашем примере к  следующей строке  общая трансформация системы координат может быть представлена как «смещение + вращение».*/
stroke (175);
line (0 ,0 ,150 ,30);

rotate(PI/4);/*Теперь общая трансформация системы координат представляет собой «смещение + вращение + вращение», и т. д.*/

stroke (140);
line (0 ,0 ,150 ,30);

rotate(PI/4);
stroke (105);
line (0 ,0 ,150 ,30);

rotate(PI/4);
stroke (70);
line (0 ,0 ,150 ,30);

rotate(PI/4);
stroke (35);
line (0 ,0 ,150 ,30);

rotate(PI/4);
stroke (0);
line (0 ,0 ,150 ,30);

}

Вариант2 

int z=245;//для хранения текущего значения  цвета контура(линии)
float k=0;//для хранения значения угла поворота системы координат

size (600, 600);
  
background (100);
// закрасит фон окна приложения в серый цвет
smooth (); //сглаживаем края контура фигуры
strokeWeight (40);// т
олщина кисти (контура фигуры)

/* передаем два аргумента, два значения половины ширины и половину высоты окна приложения, функция translate() переместит начало системы координат в эту точку, в нашем примере – в точку(300,300) по первоначальной системе координат*/

translate(width/2, height /2);

for(int i = 0; i < 7; i += 1) {
  stroke (z);
  line (0 ,0 ,150 ,0);
  z=z-35;
  k=k+PI/4;
 rotate(k);
// вращение системы координат

}

 

Задание . Измените код проекта  таким образом, чтобы вращение системы координат происходило против часовой стрелки.

Форма входа
Поиск
Календарь
«  Сентябрь 2019  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

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