Processing имеет ряд специальных переменных, хранящих информацию о программе в процессе ее работы. Например, ширина и высота окна сохраняются в переменных под названием width и height. Значения переменной устанавливаются в функции size(). Они могут быть использованы для изображения объектов относительно размера текщего окна, даже если параметры функции size() изменяются.
В этом примере мы изменим параметры функции size():
size(480, 120);
smooth();
line(0, 0, width, height); // Линия от (0,0) до (480,120)
line(width, 0, 0, height); // Линия от (480,0) до (0,120)
ellipse(width/2, height/2, 60, 60);
Существуют другие специальные переменные, отслеживающие состояние мыши, клавиатуры и т.д.
Считается, что математика и программирование это, по сути, одно и то же. Знание математики может быть полезным для написания некоторых видов
программ, однако для реализации основных операций вам потребуется не больше, чем знание простой арифметики.
size(480, 120);
int x = 25;
int h = 20;
int y = 25;
rect(x, y, 300, h); // Верхний
x = x + 100;
rect(x, y + h, 300, h); // Средний
x = x - 250;
rect(x, y + h*2, 300, h); // Нижний
Символы +, - и * в коде называются операторами. Если вы записываете их между двумя значениями, то вы получаете выражение. Запись 5 + 9 или 1024
-512 является выражением. Ниже приведены операторы для простых арифметических операций: Processing имеет набор правил, определяющих приоритет операторов, то есть какие операторы будут выполняться первыми, какие - вторыми, третьими, и так далее. Эти правила определяют порядок выполнения арифметических операций. Знание этих правил позволит вам понять, как работает, к примеру, эта строка кода:
int x = 4 + 4 * 5; // Присвоение переменной x значения 24
+ Сложение
- Вычитание
* Умножение
/ Деление
= Присвоение
Выражение 4 * 5 вычисляется первым, поскольку умножение имеет высший приоритет. Затем, прибавление к произведению 4 дает 24. Наконец, поскольку оператор присвоения (знак равенства) имеет низший приоритет, число 24 присваивается переменной x. Более наглядная запись содержит скобки, но имеет тот же результат:
int x = 4 + (4 * 5); // Присвоение значения 24 переменной x
Если вы хотите, чтобы сумма вычислялась первой, добавьте скобки. Так как выражение, заключенное в скобки имеет более высокий приоритет, чем умножение, порядок вычисления изменится, и это повлияет на результат: int x = (4 + 4) * 5; // Присвоение значения 40 переменной x
На уроках математики часто используют мнемоническое правило: PEMDAS, что расшифровывается как Parentheses (скобки), Exponents (возведение в степень), Multiplication (умножение), Division (деление), Addition (сложение),Subtraction(вычитание), где скобки имеют наивысший приоритет, а вычитание - низший.
Некоторые арифметические операции настолько часто используются в программировании, что были придуманы способы быстрой записи этих операций; иногда бывает удобно нажимать на несколько клавиш меньше. Например, вы можете складывать или вычитать из переменной с помощью всего одного оператора:
x += 10; // Выражение эквивалентно x = x + 10
y -= 15; // Выражение эквивалентно y = y - 15
Также часто возникает необходимость прибавлять или вычитать 1 из переменной, поэтому существуют операторы для быстрого выполнения этих действий. Это операторы ++ и -- :
x++; // Выражение эквивалентно x = x + 1
y--; // Выражение эквивалентно y = y - 1
Для поиска других подобных операторов обратитесь к Google или Яндекс.
Из-за использования переменных эта программа может показаться вам более сложной, чем рисование робота на предыдущем занятии, но теперь у вас появилась возможность с легкостью модифицировать код, поскольку переменные, изменяющие тот или иной параметр робота, располагаются в одном месте. Например, мы можем регулировать длину шеи робота с помощью переменной bodyHeight.
Несколько переменных в начале кода регулируют различные параметры робота, которые мы хотели бы изменить: местоположение, длину туловища, длину шеи. На рисунке изображены несколько вариантов робота, ниже перечислены соответствующие значения переменных:
y = 390
bodyHeight = 180
neckHeight = 40
y = 460
bodyHeight = 260
neckHeight = 95
y = 310
bodyHeight = 80
neckHeight = 10
y = 420
bodyHeight = 110
neckHeight = 140
При замене чисел на переменные подумайте, какие параметры вы хотели бы изменять и делайте изменения постепенно.
int x = 60; // x-координата
int y = 420; // y-координата
int bodyHeight = 110; // Длина туловища
int neckHeight = 140; // Длина шеи
int radius = 45; // Радиус головы
int ny = y - bodyHeight - neckHeight - radius; // Шея Y
size(170, 480);
smooth();
strokeWeight(2);
background(204);
ellipseMode(RADIUS);
// Шея
stroke(102);
line(x+2, y-bodyHeight, x+2, ny); line(x+12,
y-bodyHeight, x+12, ny); line(x+22, ybodyHeight, x+22, ny);
// Антенны
line(x+12, ny, x-18, ny-43);
line(x+12, ny, x+42, ny-99);
line(x+12, ny, x+78, ny+15);
// Туловище
noStroke();
fill(102);
ellipse(x, y-33, 33, 33);
fill(0);
rect(x-45, y-bodyHeight, 90, bodyHeight-33);
fill(102);
rect(x-45, y-bodyHeight+17, 90, 6);
// Голова
fill(0);
ellipse(x+12, ny, radius, radius);
fill(255);
ellipse(x+24, ny-6, 14, 14);
fill(0);
ellipse(x+24, ny-6, 3, 3);
fill(153);
ellipse(x, ny-8, 5, 5);
ellipse(x+30, ny-26, 4, 4);
ellipse(x+41, ny+6, 3, 3);