SlideShare a Scribd company logo
1 of 35
Download to read offline
Компьютерная графика
Основные 2D-примитивы
Jordi Linares i Pellicer
Escola Politècnica Superior d’Alcoi
Dep. de Sistemes Informàtics i Computació
jlinares@dsic.upv.es
http://www.dsic.upv.es/~jlinares
Режимы визуализации
•
•
•
•
•

В processing есть несколько режимов визуализации:
JAVA2D, P2D, P3D и OPENGL
Есть и другие возможности в специальных библиотеках
(например, метод трассировки лучей)
Режим визуализации определяется третьим аргументом
функции size(). Режим по умолчанию, если ничего не
указано, JAVA2D.
Режимы JAVA2D и P2D поддерживают двухмерное
представление. P2D более производителен (аппаратное
ускорение), но в нём пока ещё не реализованы все
функции из JAVA2D.
Мы будем использовать режим по умолчанию, JAVA2D,
так как в нём есть все 2D-функции
Система координат в 2D
функции
• Размер окна определяется впервых
size(), обычно это одно из
действий, происходящих в
функции setup()

• Точка(0,0)лежит слева вверху,

положительное направление оси
x — слева направо, оси y —
сверху вниз
Основные 2D-примитивы в
processing

• Точки
• Линии
• Эллипсы / Окружности / Дуги
• Прямоугольники
• Треугольники
• Четырёхугольники
• Кривые (Безье и Кэтмул-Рома)
• Объекты (свободные формы)
Цвет и настройки
В processing многие функции вызывают изменение состояния =>
они устанавливают параметры, которые будут оставаться
активными, пока мы их не поменяем. Пример: stroke() =>
меняет цвет кисти до тех пор, пока новый цвет не будет задан

•

Цвет кисти можно менять функцией stroke()
stroke(255) => RGB(255, 255, 255), один цвет означает параметр
внутри 256-значной серой шкалы (grayscale)
stroke(128, 0, 128) => Любой цвет в RGB
Толщина кисти указывается функцией strokeWeight()
strokeWeight(5) => Толщина в 5 пикселей
Цвет заполнения 2D-фигуры указывается функцией fill()
fill(128) => RGB(128, 128, 128)
fill(200, 120, 90) => RGB(200, 120, 90)

•
•
•
•
•
•
•
Цвет и настройки
background()

• Стирает окно и заполняет указанным цветом
Примеры: background(0)
•
background(128, 100, 128)

noFill()

•

2D-фигуры не будут заполнены

noStroke()

•

2D-фигуры не будут иметь внешней границы
(особенно полезно для замкнутых фигур, но
влияет на все виды фигур, даже на линии)
Точки
point(x, y)
Рисует точку в координатах (x, y)
Цвет задаётся stroke(), а толщина (размер) - функцией
strokeWeight()

•
•

set(x, y, color)
Рисует точку в координатах (x, y) с определённым цветом
Не учитывает stroke() или strokeWeight()
Пример:
set(50, 50, color(128, 120, 255))

•
•
•

•

Другие применения set (в следующих уроках будет подробнее)
Функция set может переместить изображение в (x, y)
set может быть применена к изображению

•
•
Линии
line(x1, y1, x2, y2)
Рисует линию между точками (x1, y1) и (x2, y2)
С помощью функции stroke мы можем определить их свойства
Пример:

•
•
•

size(100, 100);
background(0);
stroke(255);
strokeWeight(5);
line(0, 0, 99, 99);

size(200, 200);
background(0);
for (int i=0; i<100; i++) {
stroke(random(255), random(255), random(255));
strokeWeight(random(10));
line(0, 0, random(200), random(200));
}
Линии
•

Окончание линии
ROUND (скруглённое), PROJECT (линия удлиняется
в зависимости от толщины кисти), SQUARE (квадратное)
Пример:

•
•

size(100, 100);
background(0);
stroke(255);
strokeWeight(10);
strokeCap(ROUND);
line(50,50,150,50);
strokeCap(PROJECT);
line(50,75,150,75);
strokeCap(SQUARE);
line(50,100,150,100);
Эллипсы и окружности
ellipse(x, y, width, height)
Рисует эллипс в точке с координатами (x, y) с указанными
шириной и высотой

•

ellipseMode()
Меняет интерпретацию параметров эллипса
ellipseMode(CENTER) => (x, y) - центр эллипса (режим
по умолчанию).
ellipseMode(RADIUS) => как в предыдущем случае, но
ширина и высота — радиусы, а не диаметры
ellipseMode(CORNER) => (x, y) определяет верхний левый угол
ограничивающего эллипс прямоугольника (bounding box).
ellipseMode(CORNERS) => четыре параметра определяют
координаты противоположных углов ограничивающего
прямоугольника

•
•
•
•
•
Эллипсы и окружности
•

Пример:
size(200, 200);
background(0);
stroke(255, 0, 0);
strokeWeight(5);
fill(0, 255, 0);
// (x, y) и диаметры
ellipse(100, 100, 100, 50);
// 2 противоположных угла
ellipseMode(CORNERS);
ellipse(0, 0, 50, 50);
Дуги
arc(x, y, width, height, start, end)
Рисует дугу как сектор эллипса с координатами (x, y) и с
указанными шириной и высотой. Этот фрагмент или сектор
определяется углами, заданными как start и end
(в радианах по умолчанию) по часовой стрелке
Их параметры тоже интерпретируются подобно ellipseMode()
В processing заполнение фигур происходит по умолчанию, даже
для незамкнутых фигур. Функция noFill() должна быть вызвана
явно, если заполнение нежелательно
Пример:

•
•
•
•

size(200, 200);
background(0);
stroke(255, 0, 0);
strokeWeight(5);
fill(0, 255, 0);
// (x, y) и диаметры
arc(100, 100, 100, 100, 0, PI / 2.0);
// Не заполнять
noFill();
arc(100, 100, 100, 100, PI, 3 * PI / 2.0);
Прямоугольники

rect(x, y, width, height)
Рисует прямоугольник

•

rectMode()
Меняет интерпретацию параметров прямоугольника
Параметры те же, что и у эллипса: CENTER , RADIUS,
CORNER и CORNERS
Режим по умолчанию - CORNER (x и y — координаты левого
угла)

•
•
•
Треугольники и
четырёхугольники
triangle(x1, y1, x2, y2, x3, y3)
Рисует треугольник по трём вершинам

•

quad(x1, y1, x2, y2, x3, y3, x4, y4)
Рисует четырёхугольник. Первая точка - (x1, y1), остальные 3
вершины определены по часовой или против часовой стрелки
(любым из вариантов)

•

size(200, 400);
background(0);
stroke(255, 0, 0);
strokeWeight(5);
fill(0, 255, 0);
// (100,25) - (25,175) - (175,175)
triangle(100,25,25,175,175,175);
// По часовой
// (38,231) - (186,220) - (169,363) - (30,376)
quad(38, 231, 186, 220, 169, 363, 30, 376);
Практика 2-1
Представление тригонометрических функций

•
•
•
•
•

Нарисуйте функции синуса и косинуса, значения от 0 до 2*pi радиан
(0,0) в декартовых координатах находится в x=0 и y=height/2 в
координатах окна (слева с краю, с середины)
Путь от 0 до 2*pi должен занять большую часть окна
Запрограммируйте функцию, которая рисует синус, другую для
косинуса.
Входные параметры — цвет, толщина кисти и ширина и высота окна
На заднем плане нарисуйте координатную декартову ось.
Кривые Безье
bezier(x1, y1, cx1, cy2, cx2, cy2, x2, y2)

•
•
•

Кубические кривые (имеют точку перегиба)
Называются в честь инженера и математика Пьера Безье
Определяются через 4 точки:
Первая и последняя — начальная и конечная
точка кривой
Центральные точки — контрольные точки, и они
«притягивают» кривую, изменяя её, но не заставляя
проходить через них

•
•
Кривые Безье
void setup()
{
size(400, 400);
background(0);
// Рисуем две кривые Безье
drawBezier(100,140,50,40,350,40,300,140);
drawBezier(50,290,150,190,200,390,350,290);
}
void drawBezier(int x1, int y1,
int cx1, int cy1,
int cx2, int cy2,
int x2, int y2)
{
noFill();
stroke(255);
// Сама кривая Безье
bezier(x1, y1, // Начальная точка
cx1, cy1, // Контрольная точка 1
cx2, cy2, // Контрольная точка 2
x2, y2); // Конечная точка
// Нарисуем контрольные точки, чтобы
// лучше понять их влияние
strokeWeight(3);
stroke(255,0,0);
point(x1, y1); point(x2, y2);
point(cx1, cy1); point(cx2, cy2);
strokeWeight(1);
line(x1, y1, cx1, cy1);
line(x2, y2, cx2, cy2);
}
Кривые Кэтмулл-Рома
•
•
•
•

curve(cx1, cy1, x1, y1, x2, y2, cx2, cx2)
Их ввели Эдвин Катмулл и Рафи Ром
Полезно, чтобы сделать кривую, интерполируемую
множеством точек и очень полезно для компьютерной
графики - например, для анимации с ключевыми кадрами
(keyframe animation)
curve рисует кривую от (x1, y1) до (x2, y2). Первая
контрольная точка определяет кривизну в (x1, y1).
Последняя контрольная точка определяет кривизну в
(x2, y2).
Особенно интересны внутри «фигур» - свободных форм,
где могут быть определены коллекции вершин.
Кривые Кэтмулл-Рома
size(175, 125);
background(0);
noFill();
stroke(255);
curve(25, 25, // Контрольная точка 1
125, 25, // (x1, y1)
125, 75, // (x2, y1)
25, 75); // Контрольная точка 2
// Нарисуем все точки, чтобы лучше понять, как
// это всё работает.
strokeWeight(3);
stroke(255, 0, 0);
point(125, 25); point(125, 75);
point(25, 25); point(25, 75);
strokeWeight(1);
line(25, 25, 125, 25);
line(125, 75, 25, 75);
Фигуры
•
•
•
•
•

В processing можно рисовать свободные и сложные
формы простым перечислением их вершин
Основной примитив - vertex(x, y) , который
определяет одну из вершин фигуры
Чтобы начать фигуру, нужно вызвать beginShape().
Потом через vertex() определяются вершины.
Фигуру можно завершить вызовом endShape() .
Потрясающая гибкость: между вызовами beginShape()
и endShape()может быть любой код (вызовы функций,
циклы и пр.) для управления заданием вершин.
Однако, не любая функция может быть использована
между beginShape() и endShape() . Это касается
rotate(), scale() и translate(), об этом будет
дальше отдельно.
Фигуры
•
•
•

Когда beginShape() вызывается без аргументов, она позволяет
определять полилинии.
Если параметр CLOSE определён внутри endShape() , полилиния
автоматически замкнётся: последняя вершина соединится с первой
Пример:
size(200, 200);
background(0);
// Фигуры также могут быть охарактеризованы
// с помощью функций fill и stroke.
// По умолчанию фигуры заполнены, и,
// чтобы это отключить, используется noFill().
noFill();
stroke(255);
// Полилиния
beginShape();
// Теперь мы можем определить вершины ...
vertex(25, 25);
vertex(175, 25);
vertex(175, 175);
vertex(25, 175);
// Конец фигуры
endShape();
Фигуры
•

С параметром CLOSE фигура будет замкнута:
// Полилиния
beginShape();
// Теперь мы можем задать вершины ...
vertex(25, 25);
vertex(175, 25);
vertex(175, 175);
vertex(25, 175);
// Конец фигуры
endShape(CLOSE);
Фигуры
•

Можно передать аргумент в функцию beginShape()
и задать другую интерпретацию вершин:

•
•
•
•
•
•
•

POINTS. Вершины рисуются как множество точек
LINES. Вершины, по парам, задают линии
TRIANGLES. Вершины, группами по 3, задают
треугольники.
TRIANGLE_STRIP. Лента треугольников.
TRIANGLE_FAN. Веер треугольников.
QUADS. Вершины, группами по четыре, задают
четырёхугольники.
QUAD_STRIP. Лента четырёхугольников.
Фигуры
// Точки
beginShape(POINTS);
// Теперь мы определяем вершины ...
vertex(25, 25);
vertex(175, 25);
vertex(175, 175);
vertex(25, 175);
// Конец фигуры
endShape();

// Линии
beginShape(LINES);
// Теперь мы определяем вершины ...
vertex(25, 25);
vertex(175, 25);
vertex(175, 175);
vertex(25, 175);
// Конец фигуры
endShape();
Фигуры
// Треугольники
beginShape(TRIANGLES);
// Теперь мы определяем вершины ...
vertex(25, 25);
vertex(50, 175);
vertex(125, 40);
vertex(125, 150);
vertex(120, 60);
vertex(180, 190);
// Конец фигуры
endShape();

// Четырёхугольники
beginShape(QUADS);
// Теперь мы определяем вершины ...
vertex(25, 25);
vertex(50, 175);
vertex(125, 150);
vertex(115, 40);
vertex(130,
vertex(190,
vertex(195,
vertex(140,

60);
70);
150);
190);

// Конец фигуры
endShape();
Фигуры

TRIANGLE_STRIP

QUAD_STRIP

TRIANGLE_FAN
(Последняя точка должна повторяться)
Фигуры
•
•
•
•

Кроме определения вершин с помощью vertex()
в processing есть функции curveVertex()и
bezierVertex(), рисующие кривые вместо прямых
линий
Эти функции работают только с непараметрической
версией beginShape()
С этими функциями можно создать цепочку кубических
кривых Безье или Кэтмулл-Рома: bezierVertex()
или curveVertex()
Их можно комбинировать с функцией vertex() и
последовательно создавать сложные функции
Фигуры
curveVertex(x, y)

•
•
•
•

Функция curveVertex() задаёт кривую Кэтмул-Рома,
которая может интерполировать любое множество точек
Первая и последняя точки, заданные curveVertex() ,
расцениваются как контрольные, и определяют начальную
и конечную кривизну цепочки кривых.
Внутренние точки будут входить в интерполяцию
множеством кубических кривых
Должны быть заданы как минимум 4 вершины через
функцию curveVertex(), внутри beginShape() и
endShape()
Фигуры
size(400, 400);
background(0);
noFill();
stroke(255);
// Полилиния
beginShape();
// Теперь мы определяем вершины ...
curveVertex(0, 0);
for (int i = 0; i < 20; i++)
{
int x = (int)random(400), y = (int)random(400);
curveVertex(x, y); // Точка кривой
rect(x-2, y-2, 4, 4); // Мы рисуем их, чтобы было проще воспринимать
}
curveVertex(width-1, height-1);
// Конец фигуры
endShape();
Фигуры
bezierVertex(cx1, cy1, cx2, cy2, x, y)

•
•
•
•

В цепочке кривых Безье первая точка кривой должна
быть определена с помощью функции vertex()
Каждый вызов bezierVertex() после первой вершины
определит две новые контрольные точки и опорную точку
Опорная точка будет начальной точкой в случае новых
вызовов bezierVertex()
Последняя точка кривой Безье будет первой точкой у
следующей. Чтобы обеспечить гладкость (непрерывность)
в месте соединения, эти точки должны лежать на одной:
последняя контрольная точка первой кривой, первая
контрольная точка второй кривой и конечная
и начальная точки кривых (на самом деле — одна и та же)
Фигуры
size(300, 200);
background(0);
noFill();
stroke(255);
// Полилиния
beginShape();
vertex(10,100); // Первая точка кривой
bezierVertex(70, 140, 160, 140, 150, 100);
bezierVertex(140, 60, 210, 60, 290, 100);
// // Конец фигуры
endShape();
// Рисуем точки, чтобы результат
// был лучше виден
strokeWeight(5);
// Точки кривой
stroke(255);
point(10, 100); point(150, 100); point(290, 100);
// Контрольные точки
stroke(255, 0, 0);
point(70, 140); point(160, 140);
point(140, 60); point(210, 60);
// Контрольные точки по линии...
strokeWeight(1);
line(160, 140, 140, 60);
Фигуры
// Создание сложных фигур
// путём комбинирования линейных и
// кривых функций.
size(400, 300);
background(0);
stroke(255);
noFill();
// Полилиния
beginShape();
vertex(10, 10);
vertex(150, 10);
bezierVertex(175, 200, 225, 200, 250, 10);
vertex(390, 10);
vertex(390, 290);
vertex(10, 290);
vertex(10, 10);
endShape();
Практика 2-2
Практики
• Перепишите код фигур, 1-1 с
использованием
чтобы нарисовать n-сторонний
многоугольник
Практика 2-3
•
•
•
•
•
•
•

В целях статистики необходимо строить круговую диаграмму
значений в процентах
Элементы лежат в массиве, и их сумма равна 100%
Пример:
float[] values = {25.0, 45.0, 5.0, 15.0, 10.0};

Напишите функцию, получающую этот массив
на входе и отображающую эту информацию
в виде круговой диаграммы
Функция на входе также получает центр и
радиус диаграммы
Функция может узнать число элементов
массива из атрибута length
Выберите случайный цвет для каждого сектора
Практика 2-4
•
•
•

Напишите функцию, аналогичную функции из Практики 2-3,
но теперь рисующую двухмерную столбчатую диаграмму.
Возьмите максимально большой размер экрана и нарисуйте
координатные оси
Ширина столбца будет функцией от
общего числа величин и ширины окна;
высота столбца — функцией значения
соответствующей ему величины и
максимального значения среди всех
величин, учитывая, что высота
столбца с максимальной величиной
должна быть равна высоте окна.

More Related Content

What's hot

Конспект уроку на тему: "Поняття про мультимедійні повідомлення, Об’єкти муль...
Конспект уроку на тему: "Поняття про мультимедійні повідомлення, Об’єкти муль...Конспект уроку на тему: "Поняття про мультимедійні повідомлення, Об’єкти муль...
Конспект уроку на тему: "Поняття про мультимедійні повідомлення, Об’єкти муль...Андрей Виноходов
 
Піраміда. площі бічної та повної поверхні
Піраміда. площі бічної та повної поверхніПіраміда. площі бічної та повної поверхні
Піраміда. площі бічної та повної поверхніЛюдмила Яхно
 
Урок 1. Поняття комп'ютерної графіки. Растрові зображення, їхні властивості.
Урок 1. Поняття комп'ютерної графіки. Растрові зображення, їхні властивості.Урок 1. Поняття комп'ютерної графіки. Растрові зображення, їхні властивості.
Урок 1. Поняття комп'ютерної графіки. Растрові зображення, їхні властивості.Ihor Tkachenko
 
Урок 16. Розробка і створення відеофільму
Урок 16. Розробка і створення відеофільмуУрок 16. Розробка і створення відеофільму
Урок 16. Розробка і створення відеофільмуВасиль Тереховський
 
Формати аудіо- та відеофайлів. Програмне забезпечення для опрацювання об’єкт...
Формати аудіо- та відеофайлів. Програмне забезпечення для  опрацювання об’єкт...Формати аудіо- та відеофайлів. Програмне забезпечення для  опрацювання об’єкт...
Формати аудіо- та відеофайлів. Програмне забезпечення для опрацювання об’єкт...Юлія Артюх
 
8771 малюнки за координатами
8771 малюнки за координатами8771 малюнки за координатами
8771 малюнки за координатамиurvlan
 
властивості арифметичного квадратного кореня
властивості арифметичного квадратного коренявластивості арифметичного квадратного кореня
властивості арифметичного квадратного кореняГергель Ольга
 
Презентація: Паралельне перенесення
Презентація: Паралельне перенесенняПрезентація: Паралельне перенесення
Презентація: Паралельне перенесенняsveta7940
 
1656 теорема піфагора
1656 теорема піфагора1656 теорема піфагора
1656 теорема піфагораjasperwtf
 
квадратне рівняння як математична модель прикладної задачі
квадратне рівняння як математична модель прикладної задачіквадратне рівняння як математична модель прикладної задачі
квадратне рівняння як математична модель прикладної задачіssuserd3e938
 
к.р. за рік геометрія 8
к.р. за рік геометрія 8к.р. за рік геометрія 8
к.р. за рік геометрія 8jkmuffgrhdcv
 
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.sveta7940
 
Коло. круг. Дотична до кола, її властивості, 7 клас
Коло. круг. Дотична до кола, її властивості, 7 класКоло. круг. Дотична до кола, її властивості, 7 клас
Коло. круг. Дотична до кола, її властивості, 7 класNataliya Shulgan
 
8 клас контрольна робота 1г (математика)
8 клас контрольна робота 1г (математика)8 клас контрольна робота 1г (математика)
8 клас контрольна робота 1г (математика)Andy Levkovich
 
редагування даних таблиці 7 клас
редагування даних таблиці 7 класредагування даних таблиці 7 клас
редагування даних таблиці 7 класaniadania
 
Урок 17 для 8 класу - Програми для редагування аудіо- та відеоданих. Загальні...
Урок 17 для 8 класу - Програми для редагування аудіо- та відеоданих. Загальні...Урок 17 для 8 класу - Програми для редагування аудіо- та відеоданих. Загальні...
Урок 17 для 8 класу - Програми для редагування аудіо- та відеоданих. Загальні...VsimPPT
 

What's hot (20)

Конспект уроку на тему: "Поняття про мультимедійні повідомлення, Об’єкти муль...
Конспект уроку на тему: "Поняття про мультимедійні повідомлення, Об’єкти муль...Конспект уроку на тему: "Поняття про мультимедійні повідомлення, Об’єкти муль...
Конспект уроку на тему: "Поняття про мультимедійні повідомлення, Об’єкти муль...
 
Модулі Python
Модулі PythonМодулі Python
Модулі Python
 
Піраміда. площі бічної та повної поверхні
Піраміда. площі бічної та повної поверхніПіраміда. площі бічної та повної поверхні
Піраміда. площі бічної та повної поверхні
 
Урок 1. Поняття комп'ютерної графіки. Растрові зображення, їхні властивості.
Урок 1. Поняття комп'ютерної графіки. Растрові зображення, їхні властивості.Урок 1. Поняття комп'ютерної графіки. Растрові зображення, їхні властивості.
Урок 1. Поняття комп'ютерної графіки. Растрові зображення, їхні властивості.
 
Урок 16. Розробка і створення відеофільму
Урок 16. Розробка і створення відеофільмуУрок 16. Розробка і створення відеофільму
Урок 16. Розробка і створення відеофільму
 
Формати аудіо- та відеофайлів. Програмне забезпечення для опрацювання об’єкт...
Формати аудіо- та відеофайлів. Програмне забезпечення для  опрацювання об’єкт...Формати аудіо- та відеофайлів. Програмне забезпечення для  опрацювання об’єкт...
Формати аудіо- та відеофайлів. Програмне забезпечення для опрацювання об’єкт...
 
8771 малюнки за координатами
8771 малюнки за координатами8771 малюнки за координатами
8771 малюнки за координатами
 
властивості арифметичного квадратного кореня
властивості арифметичного квадратного коренявластивості арифметичного квадратного кореня
властивості арифметичного квадратного кореня
 
Презентація: Паралельне перенесення
Презентація: Паралельне перенесенняПрезентація: Паралельне перенесення
Презентація: Паралельне перенесення
 
1656 теорема піфагора
1656 теорема піфагора1656 теорема піфагора
1656 теорема піфагора
 
квадратне рівняння як математична модель прикладної задачі
квадратне рівняння як математична модель прикладної задачіквадратне рівняння як математична модель прикладної задачі
квадратне рівняння як математична модель прикладної задачі
 
к.р. за рік геометрія 8
к.р. за рік геометрія 8к.р. за рік геометрія 8
к.р. за рік геометрія 8
 
О.А.Рудь. «Модуль числа» (6 клас)
О.А.Рудь. «Модуль числа» (6 клас)О.А.Рудь. «Модуль числа» (6 клас)
О.А.Рудь. «Модуль числа» (6 клас)
 
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
 
Коло. круг. Дотична до кола, її властивості, 7 клас
Коло. круг. Дотична до кола, її властивості, 7 класКоло. круг. Дотична до кола, її властивості, 7 клас
Коло. круг. Дотична до кола, її властивості, 7 клас
 
презентація до уроку №3
презентація до уроку №3презентація до уроку №3
презентація до уроку №3
 
8 клас контрольна робота 1г (математика)
8 клас контрольна робота 1г (математика)8 клас контрольна робота 1г (математика)
8 клас контрольна робота 1г (математика)
 
редагування даних таблиці 7 клас
редагування даних таблиці 7 класредагування даних таблиці 7 клас
редагування даних таблиці 7 клас
 
нерівності
нерівностінерівності
нерівності
 
Урок 17 для 8 класу - Програми для редагування аудіо- та відеоданих. Загальні...
Урок 17 для 8 класу - Програми для редагування аудіо- та відеоданих. Загальні...Урок 17 для 8 класу - Програми для редагування аудіо- та відеоданих. Загальні...
Урок 17 для 8 класу - Програми для редагування аудіо- та відеоданих. Загальні...
 

Viewers also liked

Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияTatiana Volkova
 
Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingTatiana Volkova
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиTatiana Volkova
 
Компьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текстКомпьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текстTatiana Volkova
 
Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Tatiana Volkova
 
Creative Tech — Processing 1
Creative Tech — Processing 1Creative Tech — Processing 1
Creative Tech — Processing 1Alexander Katin
 
Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"Tatiana Volkova
 
What is engineering_leaflet
What is engineering_leafletWhat is engineering_leaflet
What is engineering_leafletizzet-kamil
 
Guilford standards for promotion and tenure
Guilford standards for promotion and tenureGuilford standards for promotion and tenure
Guilford standards for promotion and tenureDave Dobson
 
Leadership for Lasting Change - Andy Blumenthal
Leadership for Lasting Change - Andy BlumenthalLeadership for Lasting Change - Andy Blumenthal
Leadership for Lasting Change - Andy BlumenthalAndy (Avraham) Blumenthal
 
Codigo procesal - proyecto
Codigo procesal - proyectoCodigo procesal - proyecto
Codigo procesal - proyectoMendoza Post
 
Process Automation Makeover: Transform Multiple Workflows into One Process by...
Process Automation Makeover: Transform Multiple Workflows into One Process by...Process Automation Makeover: Transform Multiple Workflows into One Process by...
Process Automation Makeover: Transform Multiple Workflows into One Process by...Salesforce Admins
 
同志為什麼要保障?
同志為什麼要保障?同志為什麼要保障?
同志為什麼要保障?lalacamp07
 
Going viral
Going viral Going viral
Going viral FINN
 

Viewers also liked (20)

Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. Анимация
 
Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в Processing
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
 
Компьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текстКомпьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текст
 
Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.
 
Creative Tech — Processing 1
Creative Tech — Processing 1Creative Tech — Processing 1
Creative Tech — Processing 1
 
Africa presa
Africa presaAfrica presa
Africa presa
 
Vetrov museum 24.06
Vetrov museum 24.06Vetrov museum 24.06
Vetrov museum 24.06
 
Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"
 
Vanvasa resort
Vanvasa resortVanvasa resort
Vanvasa resort
 
Want Your Carpets To Look Like New?
Want Your Carpets To Look Like New?Want Your Carpets To Look Like New?
Want Your Carpets To Look Like New?
 
What is engineering_leaflet
What is engineering_leafletWhat is engineering_leaflet
What is engineering_leaflet
 
Guilford standards for promotion and tenure
Guilford standards for promotion and tenureGuilford standards for promotion and tenure
Guilford standards for promotion and tenure
 
Leadership for Lasting Change - Andy Blumenthal
Leadership for Lasting Change - Andy BlumenthalLeadership for Lasting Change - Andy Blumenthal
Leadership for Lasting Change - Andy Blumenthal
 
Codigo procesal - proyecto
Codigo procesal - proyectoCodigo procesal - proyecto
Codigo procesal - proyecto
 
The Ideal Proxy Statement
The Ideal Proxy StatementThe Ideal Proxy Statement
The Ideal Proxy Statement
 
Process Automation Makeover: Transform Multiple Workflows into One Process by...
Process Automation Makeover: Transform Multiple Workflows into One Process by...Process Automation Makeover: Transform Multiple Workflows into One Process by...
Process Automation Makeover: Transform Multiple Workflows into One Process by...
 
同志為什麼要保障?
同志為什麼要保障?同志為什麼要保障?
同志為什麼要保障?
 
Distributed Pair Programming
Distributed Pair ProgrammingDistributed Pair Programming
Distributed Pair Programming
 
Going viral
Going viral Going viral
Going viral
 

Similar to Компьютерная графика в Processing, часть 2. Основные 2D-примитивы

Презентация на тему: Повторение курса информатики 7 класс
Презентация на тему: Повторение курса информатики 7 классПрезентация на тему: Повторение курса информатики 7 класс
Презентация на тему: Повторение курса информатики 7 класс2berkas
 
Анимационные эффекты
Анимационные эффектыАнимационные эффекты
Анимационные эффектыvivalis2010
 
модуль 1. основы работы в illustrator 1. введение
модуль 1. основы работы в illustrator 1. введениемодуль 1. основы работы в illustrator 1. введение
модуль 1. основы работы в illustrator 1. введениеEd Solovey
 
к уроку 29. исполнитель чертежник
к уроку 29. исполнитель чертежникк уроку 29. исполнитель чертежник
к уроку 29. исполнитель чертежникguest3af4c4
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовMikhail Kurnosov
 
Исполнитель чертежник.6 класс
Исполнитель чертежник.6 классИсполнитель чертежник.6 класс
Исполнитель чертежник.6 классSecondary School from Helsinki
 
Функция y = x^2 и её график
Функция y = x^2 и её графикФункция y = x^2 и её график
Функция y = x^2 и её графикFormula.co.ua
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3Andrei V, Zhuravlev
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовMikhail Kurnosov
 
0. основы r
0. основы r0. основы r
0. основы rmsuteam
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовТранслируем.бел
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовMikhail Kurnosov
 

Similar to Компьютерная графика в Processing, часть 2. Основные 2D-примитивы (20)

Презентация на тему: Повторение курса информатики 7 класс
Презентация на тему: Повторение курса информатики 7 классПрезентация на тему: Повторение курса информатики 7 класс
Презентация на тему: Повторение курса информатики 7 класс
 
Анимационные эффекты
Анимационные эффектыАнимационные эффекты
Анимационные эффекты
 
Logomir
LogomirLogomir
Logomir
 
модуль 1. основы работы в illustrator 1. введение
модуль 1. основы работы в illustrator 1. введениемодуль 1. основы работы в illustrator 1. введение
модуль 1. основы работы в illustrator 1. введение
 
функция х2
функция х2функция х2
функция х2
 
графика Pascal ABC
графика Pascal ABCграфика Pascal ABC
графика Pascal ABC
 
графические возможности языка программирования
графические возможности языка программированияграфические возможности языка программирования
графические возможности языка программирования
 
к уроку 29. исполнитель чертежник
к уроку 29. исполнитель чертежникк уроку 29. исполнитель чертежник
к уроку 29. исполнитель чертежник
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
 
Исполнитель чертежник.6 класс
Исполнитель чертежник.6 классИсполнитель чертежник.6 класс
Исполнитель чертежник.6 класс
 
Функция y = x^2 и её график
Функция y = x^2 и её графикФункция y = x^2 и её график
Функция y = x^2 и её график
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
 
0. основы r
0. основы r0. основы r
0. основы r
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетов
 
Canvas
CanvasCanvas
Canvas
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
 
Chjotnye i nechjotnye_funkcii
Chjotnye i nechjotnye_funkciiChjotnye i nechjotnye_funkcii
Chjotnye i nechjotnye_funkcii
 

Компьютерная графика в Processing, часть 2. Основные 2D-примитивы

  • 1. Компьютерная графика Основные 2D-примитивы Jordi Linares i Pellicer Escola Politècnica Superior d’Alcoi Dep. de Sistemes Informàtics i Computació jlinares@dsic.upv.es http://www.dsic.upv.es/~jlinares
  • 2. Режимы визуализации • • • • • В processing есть несколько режимов визуализации: JAVA2D, P2D, P3D и OPENGL Есть и другие возможности в специальных библиотеках (например, метод трассировки лучей) Режим визуализации определяется третьим аргументом функции size(). Режим по умолчанию, если ничего не указано, JAVA2D. Режимы JAVA2D и P2D поддерживают двухмерное представление. P2D более производителен (аппаратное ускорение), но в нём пока ещё не реализованы все функции из JAVA2D. Мы будем использовать режим по умолчанию, JAVA2D, так как в нём есть все 2D-функции
  • 3. Система координат в 2D функции • Размер окна определяется впервых size(), обычно это одно из действий, происходящих в функции setup() • Точка(0,0)лежит слева вверху, положительное направление оси x — слева направо, оси y — сверху вниз
  • 4. Основные 2D-примитивы в processing • Точки • Линии • Эллипсы / Окружности / Дуги • Прямоугольники • Треугольники • Четырёхугольники • Кривые (Безье и Кэтмул-Рома) • Объекты (свободные формы)
  • 5. Цвет и настройки В processing многие функции вызывают изменение состояния => они устанавливают параметры, которые будут оставаться активными, пока мы их не поменяем. Пример: stroke() => меняет цвет кисти до тех пор, пока новый цвет не будет задан • Цвет кисти можно менять функцией stroke() stroke(255) => RGB(255, 255, 255), один цвет означает параметр внутри 256-значной серой шкалы (grayscale) stroke(128, 0, 128) => Любой цвет в RGB Толщина кисти указывается функцией strokeWeight() strokeWeight(5) => Толщина в 5 пикселей Цвет заполнения 2D-фигуры указывается функцией fill() fill(128) => RGB(128, 128, 128) fill(200, 120, 90) => RGB(200, 120, 90) • • • • • • •
  • 6. Цвет и настройки background() • Стирает окно и заполняет указанным цветом Примеры: background(0) • background(128, 100, 128) noFill() • 2D-фигуры не будут заполнены noStroke() • 2D-фигуры не будут иметь внешней границы (особенно полезно для замкнутых фигур, но влияет на все виды фигур, даже на линии)
  • 7. Точки point(x, y) Рисует точку в координатах (x, y) Цвет задаётся stroke(), а толщина (размер) - функцией strokeWeight() • • set(x, y, color) Рисует точку в координатах (x, y) с определённым цветом Не учитывает stroke() или strokeWeight() Пример: set(50, 50, color(128, 120, 255)) • • • • Другие применения set (в следующих уроках будет подробнее) Функция set может переместить изображение в (x, y) set может быть применена к изображению • •
  • 8. Линии line(x1, y1, x2, y2) Рисует линию между точками (x1, y1) и (x2, y2) С помощью функции stroke мы можем определить их свойства Пример: • • • size(100, 100); background(0); stroke(255); strokeWeight(5); line(0, 0, 99, 99); size(200, 200); background(0); for (int i=0; i<100; i++) { stroke(random(255), random(255), random(255)); strokeWeight(random(10)); line(0, 0, random(200), random(200)); }
  • 9. Линии • Окончание линии ROUND (скруглённое), PROJECT (линия удлиняется в зависимости от толщины кисти), SQUARE (квадратное) Пример: • • size(100, 100); background(0); stroke(255); strokeWeight(10); strokeCap(ROUND); line(50,50,150,50); strokeCap(PROJECT); line(50,75,150,75); strokeCap(SQUARE); line(50,100,150,100);
  • 10. Эллипсы и окружности ellipse(x, y, width, height) Рисует эллипс в точке с координатами (x, y) с указанными шириной и высотой • ellipseMode() Меняет интерпретацию параметров эллипса ellipseMode(CENTER) => (x, y) - центр эллипса (режим по умолчанию). ellipseMode(RADIUS) => как в предыдущем случае, но ширина и высота — радиусы, а не диаметры ellipseMode(CORNER) => (x, y) определяет верхний левый угол ограничивающего эллипс прямоугольника (bounding box). ellipseMode(CORNERS) => четыре параметра определяют координаты противоположных углов ограничивающего прямоугольника • • • • •
  • 11. Эллипсы и окружности • Пример: size(200, 200); background(0); stroke(255, 0, 0); strokeWeight(5); fill(0, 255, 0); // (x, y) и диаметры ellipse(100, 100, 100, 50); // 2 противоположных угла ellipseMode(CORNERS); ellipse(0, 0, 50, 50);
  • 12. Дуги arc(x, y, width, height, start, end) Рисует дугу как сектор эллипса с координатами (x, y) и с указанными шириной и высотой. Этот фрагмент или сектор определяется углами, заданными как start и end (в радианах по умолчанию) по часовой стрелке Их параметры тоже интерпретируются подобно ellipseMode() В processing заполнение фигур происходит по умолчанию, даже для незамкнутых фигур. Функция noFill() должна быть вызвана явно, если заполнение нежелательно Пример: • • • • size(200, 200); background(0); stroke(255, 0, 0); strokeWeight(5); fill(0, 255, 0); // (x, y) и диаметры arc(100, 100, 100, 100, 0, PI / 2.0); // Не заполнять noFill(); arc(100, 100, 100, 100, PI, 3 * PI / 2.0);
  • 13. Прямоугольники rect(x, y, width, height) Рисует прямоугольник • rectMode() Меняет интерпретацию параметров прямоугольника Параметры те же, что и у эллипса: CENTER , RADIUS, CORNER и CORNERS Режим по умолчанию - CORNER (x и y — координаты левого угла) • • •
  • 14. Треугольники и четырёхугольники triangle(x1, y1, x2, y2, x3, y3) Рисует треугольник по трём вершинам • quad(x1, y1, x2, y2, x3, y3, x4, y4) Рисует четырёхугольник. Первая точка - (x1, y1), остальные 3 вершины определены по часовой или против часовой стрелки (любым из вариантов) • size(200, 400); background(0); stroke(255, 0, 0); strokeWeight(5); fill(0, 255, 0); // (100,25) - (25,175) - (175,175) triangle(100,25,25,175,175,175); // По часовой // (38,231) - (186,220) - (169,363) - (30,376) quad(38, 231, 186, 220, 169, 363, 30, 376);
  • 15. Практика 2-1 Представление тригонометрических функций • • • • • Нарисуйте функции синуса и косинуса, значения от 0 до 2*pi радиан (0,0) в декартовых координатах находится в x=0 и y=height/2 в координатах окна (слева с краю, с середины) Путь от 0 до 2*pi должен занять большую часть окна Запрограммируйте функцию, которая рисует синус, другую для косинуса. Входные параметры — цвет, толщина кисти и ширина и высота окна На заднем плане нарисуйте координатную декартову ось.
  • 16. Кривые Безье bezier(x1, y1, cx1, cy2, cx2, cy2, x2, y2) • • • Кубические кривые (имеют точку перегиба) Называются в честь инженера и математика Пьера Безье Определяются через 4 точки: Первая и последняя — начальная и конечная точка кривой Центральные точки — контрольные точки, и они «притягивают» кривую, изменяя её, но не заставляя проходить через них • •
  • 17. Кривые Безье void setup() { size(400, 400); background(0); // Рисуем две кривые Безье drawBezier(100,140,50,40,350,40,300,140); drawBezier(50,290,150,190,200,390,350,290); } void drawBezier(int x1, int y1, int cx1, int cy1, int cx2, int cy2, int x2, int y2) { noFill(); stroke(255); // Сама кривая Безье bezier(x1, y1, // Начальная точка cx1, cy1, // Контрольная точка 1 cx2, cy2, // Контрольная точка 2 x2, y2); // Конечная точка // Нарисуем контрольные точки, чтобы // лучше понять их влияние strokeWeight(3); stroke(255,0,0); point(x1, y1); point(x2, y2); point(cx1, cy1); point(cx2, cy2); strokeWeight(1); line(x1, y1, cx1, cy1); line(x2, y2, cx2, cy2); }
  • 18. Кривые Кэтмулл-Рома • • • • curve(cx1, cy1, x1, y1, x2, y2, cx2, cx2) Их ввели Эдвин Катмулл и Рафи Ром Полезно, чтобы сделать кривую, интерполируемую множеством точек и очень полезно для компьютерной графики - например, для анимации с ключевыми кадрами (keyframe animation) curve рисует кривую от (x1, y1) до (x2, y2). Первая контрольная точка определяет кривизну в (x1, y1). Последняя контрольная точка определяет кривизну в (x2, y2). Особенно интересны внутри «фигур» - свободных форм, где могут быть определены коллекции вершин.
  • 19. Кривые Кэтмулл-Рома size(175, 125); background(0); noFill(); stroke(255); curve(25, 25, // Контрольная точка 1 125, 25, // (x1, y1) 125, 75, // (x2, y1) 25, 75); // Контрольная точка 2 // Нарисуем все точки, чтобы лучше понять, как // это всё работает. strokeWeight(3); stroke(255, 0, 0); point(125, 25); point(125, 75); point(25, 25); point(25, 75); strokeWeight(1); line(25, 25, 125, 25); line(125, 75, 25, 75);
  • 20. Фигуры • • • • • В processing можно рисовать свободные и сложные формы простым перечислением их вершин Основной примитив - vertex(x, y) , который определяет одну из вершин фигуры Чтобы начать фигуру, нужно вызвать beginShape(). Потом через vertex() определяются вершины. Фигуру можно завершить вызовом endShape() . Потрясающая гибкость: между вызовами beginShape() и endShape()может быть любой код (вызовы функций, циклы и пр.) для управления заданием вершин. Однако, не любая функция может быть использована между beginShape() и endShape() . Это касается rotate(), scale() и translate(), об этом будет дальше отдельно.
  • 21. Фигуры • • • Когда beginShape() вызывается без аргументов, она позволяет определять полилинии. Если параметр CLOSE определён внутри endShape() , полилиния автоматически замкнётся: последняя вершина соединится с первой Пример: size(200, 200); background(0); // Фигуры также могут быть охарактеризованы // с помощью функций fill и stroke. // По умолчанию фигуры заполнены, и, // чтобы это отключить, используется noFill(). noFill(); stroke(255); // Полилиния beginShape(); // Теперь мы можем определить вершины ... vertex(25, 25); vertex(175, 25); vertex(175, 175); vertex(25, 175); // Конец фигуры endShape();
  • 22. Фигуры • С параметром CLOSE фигура будет замкнута: // Полилиния beginShape(); // Теперь мы можем задать вершины ... vertex(25, 25); vertex(175, 25); vertex(175, 175); vertex(25, 175); // Конец фигуры endShape(CLOSE);
  • 23. Фигуры • Можно передать аргумент в функцию beginShape() и задать другую интерпретацию вершин: • • • • • • • POINTS. Вершины рисуются как множество точек LINES. Вершины, по парам, задают линии TRIANGLES. Вершины, группами по 3, задают треугольники. TRIANGLE_STRIP. Лента треугольников. TRIANGLE_FAN. Веер треугольников. QUADS. Вершины, группами по четыре, задают четырёхугольники. QUAD_STRIP. Лента четырёхугольников.
  • 24. Фигуры // Точки beginShape(POINTS); // Теперь мы определяем вершины ... vertex(25, 25); vertex(175, 25); vertex(175, 175); vertex(25, 175); // Конец фигуры endShape(); // Линии beginShape(LINES); // Теперь мы определяем вершины ... vertex(25, 25); vertex(175, 25); vertex(175, 175); vertex(25, 175); // Конец фигуры endShape();
  • 25. Фигуры // Треугольники beginShape(TRIANGLES); // Теперь мы определяем вершины ... vertex(25, 25); vertex(50, 175); vertex(125, 40); vertex(125, 150); vertex(120, 60); vertex(180, 190); // Конец фигуры endShape(); // Четырёхугольники beginShape(QUADS); // Теперь мы определяем вершины ... vertex(25, 25); vertex(50, 175); vertex(125, 150); vertex(115, 40); vertex(130, vertex(190, vertex(195, vertex(140, 60); 70); 150); 190); // Конец фигуры endShape();
  • 27. Фигуры • • • • Кроме определения вершин с помощью vertex() в processing есть функции curveVertex()и bezierVertex(), рисующие кривые вместо прямых линий Эти функции работают только с непараметрической версией beginShape() С этими функциями можно создать цепочку кубических кривых Безье или Кэтмулл-Рома: bezierVertex() или curveVertex() Их можно комбинировать с функцией vertex() и последовательно создавать сложные функции
  • 28. Фигуры curveVertex(x, y) • • • • Функция curveVertex() задаёт кривую Кэтмул-Рома, которая может интерполировать любое множество точек Первая и последняя точки, заданные curveVertex() , расцениваются как контрольные, и определяют начальную и конечную кривизну цепочки кривых. Внутренние точки будут входить в интерполяцию множеством кубических кривых Должны быть заданы как минимум 4 вершины через функцию curveVertex(), внутри beginShape() и endShape()
  • 29. Фигуры size(400, 400); background(0); noFill(); stroke(255); // Полилиния beginShape(); // Теперь мы определяем вершины ... curveVertex(0, 0); for (int i = 0; i < 20; i++) { int x = (int)random(400), y = (int)random(400); curveVertex(x, y); // Точка кривой rect(x-2, y-2, 4, 4); // Мы рисуем их, чтобы было проще воспринимать } curveVertex(width-1, height-1); // Конец фигуры endShape();
  • 30. Фигуры bezierVertex(cx1, cy1, cx2, cy2, x, y) • • • • В цепочке кривых Безье первая точка кривой должна быть определена с помощью функции vertex() Каждый вызов bezierVertex() после первой вершины определит две новые контрольные точки и опорную точку Опорная точка будет начальной точкой в случае новых вызовов bezierVertex() Последняя точка кривой Безье будет первой точкой у следующей. Чтобы обеспечить гладкость (непрерывность) в месте соединения, эти точки должны лежать на одной: последняя контрольная точка первой кривой, первая контрольная точка второй кривой и конечная и начальная точки кривых (на самом деле — одна и та же)
  • 31. Фигуры size(300, 200); background(0); noFill(); stroke(255); // Полилиния beginShape(); vertex(10,100); // Первая точка кривой bezierVertex(70, 140, 160, 140, 150, 100); bezierVertex(140, 60, 210, 60, 290, 100); // // Конец фигуры endShape(); // Рисуем точки, чтобы результат // был лучше виден strokeWeight(5); // Точки кривой stroke(255); point(10, 100); point(150, 100); point(290, 100); // Контрольные точки stroke(255, 0, 0); point(70, 140); point(160, 140); point(140, 60); point(210, 60); // Контрольные точки по линии... strokeWeight(1); line(160, 140, 140, 60);
  • 32. Фигуры // Создание сложных фигур // путём комбинирования линейных и // кривых функций. size(400, 300); background(0); stroke(255); noFill(); // Полилиния beginShape(); vertex(10, 10); vertex(150, 10); bezierVertex(175, 200, 225, 200, 250, 10); vertex(390, 10); vertex(390, 290); vertex(10, 290); vertex(10, 10); endShape();
  • 33. Практика 2-2 Практики • Перепишите код фигур, 1-1 с использованием чтобы нарисовать n-сторонний многоугольник
  • 34. Практика 2-3 • • • • • • • В целях статистики необходимо строить круговую диаграмму значений в процентах Элементы лежат в массиве, и их сумма равна 100% Пример: float[] values = {25.0, 45.0, 5.0, 15.0, 10.0}; Напишите функцию, получающую этот массив на входе и отображающую эту информацию в виде круговой диаграммы Функция на входе также получает центр и радиус диаграммы Функция может узнать число элементов массива из атрибута length Выберите случайный цвет для каждого сектора
  • 35. Практика 2-4 • • • Напишите функцию, аналогичную функции из Практики 2-3, но теперь рисующую двухмерную столбчатую диаграмму. Возьмите максимально большой размер экрана и нарисуйте координатные оси Ширина столбца будет функцией от общего числа величин и ширины окна; высота столбца — функцией значения соответствующей ему величины и максимального значения среди всех величин, учитывая, что высота столбца с максимальной величиной должна быть равна высоте окна.