| Применение базовых алгоритмических структур в Processing
|
Проект в среде Processing располагается в функциях:
- setup () - выполняется один раз при запуске программы
и
- draw () - выполняется постоянно в цикле, до завершения работы программы.
В функции setup () происходят начальные настройки, а функцию draw () удобно использовать для обработки постоянного изменения значений переменных, в частности системных.
|
Применение базовых алгоритмических структур (циклов и выбора) для организации движения
Цикл – это такая команда (оператор) языка, что дает возможность объяснить компьютеру сколько раз надо выполнить некое действие или компанию действий.
for (init; test; update) {
statements
}
Выражение:
- init обычно объявляет новую переменную для использования в цикле for и присваивает ей значение. Как правило, используется переменная с именем i, но вы можете использовать любую другую;
- test оценивает значение переменной, это всегда выражение отношения, сравнивающее два значения оператором сравнения.;
update изменяет это значение.
|
Пример цикла for:
По-русски конструкция цикла звучит как:
- «Выполнять всё, что находится в фигурных скобках {...}, пока целочисленная переменная i меньше 2000, начальное значение которой 0, а приращение 1»
Сохраняя английский порядок, но русскими словами:
- «Для целочисленной переменной i, которой присвоено начальное значение 0 и до тех пор, пока её значение меньше 2000 – увеличивать её значение на 1 и выполнять все действия указанные в фигурных скобках {...}».
|
И всё это записывается просто как: for (int i = 0; i < 2000; i++) {...}, где:
- int тип переменной и сокращенная запись от integer (целое);
· i = 0 присвоить переменной i начальное значение 0;
· i < 2000 так цикл выполняется 2000 раз. Пока выглядит загадочно, потом разъяснится.
- i++ сокращение от i = i + 1, что значит к переменной i прибавить единицу и
результат сохранить в ней же.
|
Цикл while(){…}
|
|
Выбор:
|
Примеры:
1. if (z > 100) {z -= 0.5;} else if (z< 50) {z += 2;}
2. if( n>7) {stop();}
3. if ((x > width) || (x < 0)) { … }
4. if(keyPressed==true) если нажата либо-какая клавиша
{
saveFrame("images/urok_####.png");// выполнить запись кадра(фрейма) в папку images
}
5. if (frameCount < 60) /*программа работает в частотой 30 кадров в секунду и завершается после 60 кадров */
{
saveFrame("frames/SaveExample-####.tif");
}
|
|
|
Задание. Составить код проекта рисование семи эллипсов
Применение цикла for:
int n=0;
size(400, 500);
background(0);
noStroke();//фигуры не будут иметь внешней границы
for (int i = 0; i < 250; i= i+40){
n=n+1;
int r = 2 + round( random(40));
println("n= ", n," i= ", i, “ r= “,r);
ellipse(round(random(400)), round(random(500)), r, r);
}
|
Применение системных функций и структуры выбора:
int n=1;
void setup(){
size(400,500);
background(0);
noStroke();//фигуры не будут иметь внешней границы
}
void draw() {
int r = 2 +round(random(20,40));
println("n= ", n, " r= ",r);
ellipse(round(random(400)), round(random(500)), r, r);
n=n+1;
if( n>7) {stop();}
}
|
|
Пример. Движение мяча
//Переменные определяющие местоположение и скорость мяча.
int x = 100; int y = 100; int xz = 10; int yz = 4;
//Настройка окна и фона.
void setup() {
size(400,400);
background(255);
}
//Рисуем мяч.
void draw() {
background(255);
//Перемещаем мяч в соответствии с его скоростью.
x = x + xz; y = y + yz;
//Проверка границ. (Отбивание от стенок).
if ((x > width) || (x < 0)) // оператор логическое ИЛИ
{ xz = xz * -1; }
if ((y > height) || (y < 0))
{ yz = yz * -1; }
stroke(0);
fill(255,0,0);
// Отображаем мяч по месту нахождения (х, у).
ellipse(x,y,50,50);
}
|
|
| |