SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Компьютерная графика
Анимация
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 очень легко делать анимацию через функцию
draw()
Если мы определим в приложении функцию draw(),
она будет постоянно запускаться в бесконечном цикле
(в отдельном потоке))
Изначально для draw() частота повторения равняется
60 раз в секунду
Это поведение можно изменить функцией frameRate()
frameRate() лишь задаёт цель, но будет ли она
достигнута, зависит от возможностей компьютера —
сможет ли он вызывать draw() с указанной частотой.
Анимация
//
//
//
//

Классический пример:
прыгающий мячик
Если хотим работать с анимацией, мы
должны определить функции setup() и draw()

// Местоположение
int px, py;
// Скорость
int vx, vy;
// Диаметр мяча
int diametre = 20;
void setup()
{
size(600, 300);
fill(255);
noStroke();
// Изначальное
// местоположение мяча
px = width/4;
py = height/2;
// Начальная скорость
vx = vy = 1;
}

// Рисование
void draw()
{
background(0);
// Обнаружение столкновений
// и прыгание
if (px + diametre/2 > width - 1 ||
px - diametre/2 < 0)
vx *= -1;
if (py + diametre/2 > height - 1 ||
py - diametre/2 < 0)
vy *= -1;
// Обновление местоположений
px += vx;
py += vy;
// Рисование мяча
ellipse(px, py, diametre, diametre);
}
Анимация
// Эффект следа...
// Заменяем background(0)
// на следующее:
...
void draw()
{
// заполняем всё окно
// цветом RGB (0, 0, 0) и
// прозрачностью 20
fill(0, 20);
rect(0, 0, width, height);
// Заполняем 255, чтобы нарисовать
// мяч
fill(255);
...
Практика 5-1
•
•
•

Измените предыдущую программу так, чтобы рисовать
n прыгающих мячей. Используйте массивы, чтобы
изменять скорость и местоположение каждого мяча
Изначальные местоположения должны быть случайны,
с учётом диаметра мячей и размера окна
Скорости тоже должны быть случайны, со значениями
от -4 до 4 (не включая нуля)
Анимация
•

Учёт силы притяжения:
Интегрирование по Эйлеру:

F = m· g
Сила
притяжения (g)

a=g
v(t+1) = v(t) + a
e(t+1) = e(t) + v(t+1)
Анимация
// Изучаем эффект
// Местоположение
float px, py;
// Скорость
float vx, vy;
// Диаметр мяча
int diametre = 20;
// Сила притяжения
float gravity = 0.5;
void setup()
{
size(600, 300);
fill(255);
noStroke();
// Изначальное притяжение мяча
px = width/4;
py = diametre/2;
// Изначальная скорость
vx = vy = 1.0;
// Изначальный фон
background(0);
}

void draw()
{
fill(0, 20);
rect(0, 0, width, height);
fill(255);
// Обнаружение столкновений
// и прыгание
if (px + diametre/2 > width - 1)
{
vx *= -1;
px = width - 1 - diametre/2;
}
if (px - diametre/2 < 0)
{
vx *= -1;
px = diametre/2;
}
if (py + diametre/2 > height - 1)
{
vy *= -1;
py = height - 1 - diametre/2;
}
if (py - diametre/2 < 0)
{
vy *= -1;
py = diametre/2;
}
// Обновление местоположений
vy += gravity;
px += vx;
py += vy;
// Рисование
ellipse(px, py, diametre, diametre);
}
Анимация
Анимация
•
•

Чтобы поведение было более реалистичным, нужно
учитывать торможение, связанное с проходом мяча
через жидкость (атмосферу)
Этого эффекта можно достигнуть простым уменьшением
скорости, как в этом примере:
// Обновляем местоположение
vy += gravity;
vy *= 0.98; // Это - новое !
px += vx;
py += vy;
Анимация
// Постоянно вращающийся эллипс
float angle = 0.0;
void setup()
{
size(400, 400);
}
// Внимание!
// draw() сбрасывает матрицу
// моделирования до единичной
void draw()
{
fill(0, 20);
noStroke();
rect(0, 0, width, height);
noFill();
stroke(255);
// Вращаем вокруг центра окна,
// так что нужно
// сделать там центр (0,0).
// Мы должны учитывать
// порядок операций
// (снизу вверх)
translate(width/2, height/2);
rotate(angle+=0.1);
translate(-width/2, -height/2);
ellipse(width/2, height/2, 100, 300);
}
Анимация
Солнечная Система:
Анимация
// Планетарная система в 2D
// Солнце, 3 планеты и две луны
float angPlanet1 = 0.0,
angPlanet2 = PI/3.0,
angPlanet3 = 2.0*PI/3.0,
angMoon1 = 0.0,
angMoon2 = PI;

// Планета 2
popMatrix();
pushMatrix();
rotate(angPlanet2 += 0.05);
translate(width/2/4*2, 0);
fill(#0BA00A);
ellipse(0, 0, 15, 15);

void setup()
{
size(400, 400);
stroke(255);
frameRate(30);
}

// Луна 1
pushMatrix();
rotate(angMoon1 += 0.1);
translate(width/2/4/3, 0);
fill(#08E4FF);
ellipse(0, 0, 6, 6);

void draw()
{
background(0);

// Луна 2
popMatrix();
rotate(angMoon2 += 0.05);
translate(width/2/4/3*2, 0);
fill(#118998);
ellipse(0, 0, 6, 6);

//
//
//
//

Будем рисовать всё из центра
в (0,0) и вычислим их
окончательное местоположение
при помощи преобразований на плоскости

// Солнце будет центром
// нашей вселенной
translate(width/2, height/2);
// Солнце
fill(#F1FA03); // Цвет задан как шестнадцатеричное
//число при помощи «color selector»
ellipse(0, 0, 20, 20);
pushMatrix();
// Планета 1
rotate(angPlanet1 += 0.1);
translate(width/2/4, 0);
fill(#05FA03);
ellipse(0, 0, 15, 15);

// Планета 3
popMatrix();
rotate(angPlanet3 += 0.025);
translate(width/2/4*3, 0);
fill(#075806);
ellipse(0, 0, 15, 15);
}
Практика 5-2
•

Измените код планетарной системы так, чтобы рисовать
орбиты планет и лун
Практика 5-3
•

Измените предыдущую программу так, чтобы солнце
тоже вращалось по орбите:

Mais conteúdo relacionado

Mais procurados

Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
Mikhail Kurnosov
 
Alexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphicsAlexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphics
Andrew Mayorov
 
СИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДСИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОД
IT_1315
 
6. java lecture swing
6. java lecture swing6. java lecture swing
6. java lecture swing
MERA_school
 
вращение
вращениевращение
вращение
busujeva
 
CV2011-2. Lecture 03. Photomontage, part 2.
CV2011-2. Lecture 03.  Photomontage, part 2.CV2011-2. Lecture 03.  Photomontage, part 2.
CV2011-2. Lecture 03. Photomontage, part 2.
Anton Konushin
 
CV2011-2. Lecture 09. Single view reconstructin.
CV2011-2. Lecture 09.  Single view reconstructin.CV2011-2. Lecture 09.  Single view reconstructin.
CV2011-2. Lecture 09. Single view reconstructin.
Anton Konushin
 

Mais procurados (20)

Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графе
 
6.0a
6.0a6.0a
6.0a
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
 
Progr labrab-4-2013-c++
Progr labrab-4-2013-c++Progr labrab-4-2013-c++
Progr labrab-4-2013-c++
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
 
Alexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphicsAlexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphics
 
СИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДСИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОД
 
Агоритм пчёл и его сравнение с ГА
Агоритм пчёл и его сравнение с ГААгоритм пчёл и его сравнение с ГА
Агоритм пчёл и его сравнение с ГА
 
УПРАВЛЕНИЕ ИСПОЛНИТЕЛЕМ ЧЕРТЁЖНИК
УПРАВЛЕНИЕ ИСПОЛНИТЕЛЕМ ЧЕРТЁЖНИКУПРАВЛЕНИЕ ИСПОЛНИТЕЛЕМ ЧЕРТЁЖНИК
УПРАВЛЕНИЕ ИСПОЛНИТЕЛЕМ ЧЕРТЁЖНИК
 
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...
 
6. java lecture swing
6. java lecture swing6. java lecture swing
6. java lecture swing
 
2.139
2.1392.139
2.139
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Definite integral
Definite integralDefinite integral
Definite integral
 
вращение
вращениевращение
вращение
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
 
CV2011-2. Lecture 03. Photomontage, part 2.
CV2011-2. Lecture 03.  Photomontage, part 2.CV2011-2. Lecture 03.  Photomontage, part 2.
CV2011-2. Lecture 03. Photomontage, part 2.
 
Лекция по Трёхмерной графике
Лекция по Трёхмерной графикеЛекция по Трёхмерной графике
Лекция по Трёхмерной графике
 
CV2011-2. Lecture 09. Single view reconstructin.
CV2011-2. Lecture 09.  Single view reconstructin.CV2011-2. Lecture 09.  Single view reconstructin.
CV2011-2. Lecture 09. Single view reconstructin.
 

Destaque

Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Tatiana Volkova
 
Смерть тайм-менеджмента
Смерть тайм-менеджментаСмерть тайм-менеджмента
Смерть тайм-менеджмента
Sasha Kulam
 

Destaque (20)

Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
 
Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.
 
Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"
 
Компьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текстКомпьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текст
 
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
 
Bionic arduino class1_russian
Bionic arduino class1_russianBionic arduino class1_russian
Bionic arduino class1_russian
 
Iot meetup 07.10.15
Iot meetup 07.10.15Iot meetup 07.10.15
Iot meetup 07.10.15
 
Bionic arduino class4_russian
Bionic arduino class4_russianBionic arduino class4_russian
Bionic arduino class4_russian
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
Raspberry pi lnl
Raspberry pi lnlRaspberry pi lnl
Raspberry pi lnl
 
01
0101
01
 
Arduino training day 1
Arduino training day 1Arduino training day 1
Arduino training day 1
 
Arduino – это просто!
Arduino – это просто!Arduino – это просто!
Arduino – это просто!
 
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде ArduinoЛабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
 
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...
 
How to Upgrade a Coffee Machine Using Arduino
How to Upgrade a Coffee Machine Using ArduinoHow to Upgrade a Coffee Machine Using Arduino
How to Upgrade a Coffee Machine Using Arduino
 
Подготовка к производству
Подготовка к производствуПодготовка к производству
Подготовка к производству
 
Смерть тайм-менеджмента
Смерть тайм-менеджментаСмерть тайм-менеджмента
Смерть тайм-менеджмента
 
Подборка лучших мировых диджитал-продакшн студий и агентств
Подборка лучших мировых диджитал-продакшн студий и агентствПодборка лучших мировых диджитал-продакшн студий и агентств
Подборка лучших мировых диджитал-продакшн студий и агентств
 

Semelhante a Компьютерная графика в Processing, часть 5. Анимация

создание HTML игр на элементе canvas
создание HTML игр на элементе canvasсоздание HTML игр на элементе canvas
создание HTML игр на элементе canvas
Alexander Samantsov
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетов
Транслируем.бел
 

Semelhante a Компьютерная графика в Processing, часть 5. Анимация (12)

создание HTML игр на элементе canvas
создание HTML игр на элементе canvasсоздание HTML игр на элементе canvas
создание HTML игр на элементе canvas
 
Анимационные эффекты
Анимационные эффектыАнимационные эффекты
Анимационные эффекты
 
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
 
Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
 Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур  Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
 
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетов
 
Shader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for gamesShader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for games
 
рисование точками 9 класс
рисование точками 9 классрисование точками 9 класс
рисование точками 9 класс
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
лекция 1
лекция 1лекция 1
лекция 1
 

Компьютерная графика в Processing, часть 5. Анимация

  • 1. Компьютерная графика Анимация 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 очень легко делать анимацию через функцию draw() Если мы определим в приложении функцию draw(), она будет постоянно запускаться в бесконечном цикле (в отдельном потоке)) Изначально для draw() частота повторения равняется 60 раз в секунду Это поведение можно изменить функцией frameRate() frameRate() лишь задаёт цель, но будет ли она достигнута, зависит от возможностей компьютера — сможет ли он вызывать draw() с указанной частотой.
  • 3. Анимация // // // // Классический пример: прыгающий мячик Если хотим работать с анимацией, мы должны определить функции setup() и draw() // Местоположение int px, py; // Скорость int vx, vy; // Диаметр мяча int diametre = 20; void setup() { size(600, 300); fill(255); noStroke(); // Изначальное // местоположение мяча px = width/4; py = height/2; // Начальная скорость vx = vy = 1; } // Рисование void draw() { background(0); // Обнаружение столкновений // и прыгание if (px + diametre/2 > width - 1 || px - diametre/2 < 0) vx *= -1; if (py + diametre/2 > height - 1 || py - diametre/2 < 0) vy *= -1; // Обновление местоположений px += vx; py += vy; // Рисование мяча ellipse(px, py, diametre, diametre); }
  • 4. Анимация // Эффект следа... // Заменяем background(0) // на следующее: ... void draw() { // заполняем всё окно // цветом RGB (0, 0, 0) и // прозрачностью 20 fill(0, 20); rect(0, 0, width, height); // Заполняем 255, чтобы нарисовать // мяч fill(255); ...
  • 5. Практика 5-1 • • • Измените предыдущую программу так, чтобы рисовать n прыгающих мячей. Используйте массивы, чтобы изменять скорость и местоположение каждого мяча Изначальные местоположения должны быть случайны, с учётом диаметра мячей и размера окна Скорости тоже должны быть случайны, со значениями от -4 до 4 (не включая нуля)
  • 6. Анимация • Учёт силы притяжения: Интегрирование по Эйлеру: F = m· g Сила притяжения (g) a=g v(t+1) = v(t) + a e(t+1) = e(t) + v(t+1)
  • 7. Анимация // Изучаем эффект // Местоположение float px, py; // Скорость float vx, vy; // Диаметр мяча int diametre = 20; // Сила притяжения float gravity = 0.5; void setup() { size(600, 300); fill(255); noStroke(); // Изначальное притяжение мяча px = width/4; py = diametre/2; // Изначальная скорость vx = vy = 1.0; // Изначальный фон background(0); } void draw() { fill(0, 20); rect(0, 0, width, height); fill(255); // Обнаружение столкновений // и прыгание if (px + diametre/2 > width - 1) { vx *= -1; px = width - 1 - diametre/2; } if (px - diametre/2 < 0) { vx *= -1; px = diametre/2; } if (py + diametre/2 > height - 1) { vy *= -1; py = height - 1 - diametre/2; } if (py - diametre/2 < 0) { vy *= -1; py = diametre/2; } // Обновление местоположений vy += gravity; px += vx; py += vy; // Рисование ellipse(px, py, diametre, diametre); }
  • 9. Анимация • • Чтобы поведение было более реалистичным, нужно учитывать торможение, связанное с проходом мяча через жидкость (атмосферу) Этого эффекта можно достигнуть простым уменьшением скорости, как в этом примере: // Обновляем местоположение vy += gravity; vy *= 0.98; // Это - новое ! px += vx; py += vy;
  • 10. Анимация // Постоянно вращающийся эллипс float angle = 0.0; void setup() { size(400, 400); } // Внимание! // draw() сбрасывает матрицу // моделирования до единичной void draw() { fill(0, 20); noStroke(); rect(0, 0, width, height); noFill(); stroke(255); // Вращаем вокруг центра окна, // так что нужно // сделать там центр (0,0). // Мы должны учитывать // порядок операций // (снизу вверх) translate(width/2, height/2); rotate(angle+=0.1); translate(-width/2, -height/2); ellipse(width/2, height/2, 100, 300); }
  • 12. Анимация // Планетарная система в 2D // Солнце, 3 планеты и две луны float angPlanet1 = 0.0, angPlanet2 = PI/3.0, angPlanet3 = 2.0*PI/3.0, angMoon1 = 0.0, angMoon2 = PI; // Планета 2 popMatrix(); pushMatrix(); rotate(angPlanet2 += 0.05); translate(width/2/4*2, 0); fill(#0BA00A); ellipse(0, 0, 15, 15); void setup() { size(400, 400); stroke(255); frameRate(30); } // Луна 1 pushMatrix(); rotate(angMoon1 += 0.1); translate(width/2/4/3, 0); fill(#08E4FF); ellipse(0, 0, 6, 6); void draw() { background(0); // Луна 2 popMatrix(); rotate(angMoon2 += 0.05); translate(width/2/4/3*2, 0); fill(#118998); ellipse(0, 0, 6, 6); // // // // Будем рисовать всё из центра в (0,0) и вычислим их окончательное местоположение при помощи преобразований на плоскости // Солнце будет центром // нашей вселенной translate(width/2, height/2); // Солнце fill(#F1FA03); // Цвет задан как шестнадцатеричное //число при помощи «color selector» ellipse(0, 0, 20, 20); pushMatrix(); // Планета 1 rotate(angPlanet1 += 0.1); translate(width/2/4, 0); fill(#05FA03); ellipse(0, 0, 15, 15); // Планета 3 popMatrix(); rotate(angPlanet3 += 0.025); translate(width/2/4*3, 0); fill(#075806); ellipse(0, 0, 15, 15); }
  • 13. Практика 5-2 • Измените код планетарной системы так, чтобы рисовать орбиты планет и лун
  • 14. Практика 5-3 • Измените предыдущую программу так, чтобы солнце тоже вращалось по орбите: