| Учимся программировать вместе с Processing
Вложенные циклы
Если вложить один цикл for в другой, количество повторений перемножается.
Для начала рассмотрим небольшой пример, а затем реализуем его по частям в примере 1
Пример 1.
size(480, 120);
background(0);
smooth();
noStroke();
for (int y = 0; y <= height; y += 40) { //добавить комментарий
println(“ y= “,y);
for (int x = 0; x <= width; x += 40) {//добавить комментарий
println(“ x= “,x);
fill(255, 140);
ellipse(x, y, 40, 40); //добавить комментарий
}
}
|
 |


|
Пример 2: Ряды и колонки
В этом примере циклы for расположены рядом, а не вложены один в другой.
Результат выполнения программы показывает, что один цикл for рисует колонку из 4 кругов, другой ряд из 13 кругов
size(480, 120); // height=120, width=480
background(0);
smooth();
noStroke();
for (int y = 0; y < height+45; y += 40) {
fill(255, 140);
ellipse(0, y, 40, 40);
println(“ y= “,y,” height +45= “,height +45);
}
for (int x = 0; x < width+45; x += 40) {
println(“ x= “,x,” width+45= “,width+45 );
fill(255, 140);
ellipse(x, 0, 40, 40);
}
|
 |

|
 |
Пример 3. Коррекция кода примера 2.
Если вложить один цикл for в другой, как в примере 1,тогда:
и
Задание 1. Найти ошибку в коде проекта
size(480, 120); // height=120, width=480
background(0);
smooth();
noStroke();
for (int y = 0; y < height+45; y += 40) {
fill(255,140);
ellipse(0, y, 40, 40);
println(" y= ",y);
for (int x = 0; x < width+45; x += 40){
fill(255,140);
ellipse(x, 0, 40, 40);
println(" x= ",x);
}
}
|

|

Требуется: 
Имеем: 
|
Пример 4 является хорошим шаблоном для создания рисунков с повторяющимися элементами. В следующих примерах мы покажем, как их можно модифицировать, но это будет всего лишь небольшая часть из того, что вы можете делать с циклом for.
Пример 5. Точки и линии
Код в примере рисует линию от каждой точки до центра экрана.
size(480, 120);
background(0);
smooth();
fill(255);
stroke(102);
for (int y = 20; y <= height-20; y += 20) // height-20 = 100
{
for (int x = 20; x <= width-20; x += 10) // width-20 = 460
{
println(" y= ", y, " x= ",x);
ellipse(x, y, 4, 4);
line(x, y, 240, 60); // Рисуем линии к центру экрана
}
}
|
for (int y = 20; y <= height-20; y += 20) // height-20 = 100
{
for (int x = 20; x <= width-20; x += 40) // width-20 = 460
{
println(" y= ", y, " x= ",x);
ellipse(x, y, 4, 4);
line(x, y, 240, 60); // Рисуем линии к центру экрана
}
}
|

Задание 2. Найти изменение в коде проекта, которые позволили получить следующий результат:


|
Варианты выполнения примера.
Сокирко Виталий. 2019год
void setup()
{
size(480, 120);
frameRate(5);
}
void draw()
{
background(0,0,(random(255)));
smooth();
fill(255);
stroke(102);
for (int y = 20; y <= height-20; y += 20) // height-20 = 100
{
for (int x = 20; x <= width-20; x += 10) // width-20 = 460
{
stroke(random(228),random(228),random(228));
println(" y= ", y, " x= ",x);
ellipse(x, y, 4, 4);
line(x, y, 240, 60); // Рисуем линии к центру экрана
}
}
}
|
 |
Зайченко Юля 2019 год
void setup()
{
background(random(25));
size(480, 120);
frameRate(10);
smooth();
fill(255);
stroke(102);
}
void draw()
{
background(random(5,255));
fill(random(25),random(25),random(25));
for (int y = 20; y <= height-20; y += 20) // height-20 = 100
{
for (int x = 20; x <= width-20; x += 50) // width-20 = 460
{
stroke(random(255),random(255), random(255));
println(" y= ", y, " x= ",x);
ellipse(x, y, 8, 8);
line(x, y, 240, 60); // Рисуем линии к центру экрана
}
}
}
|
 |
Пример 5. Точки и полутона
В примере 5 с каждой строкой происходит уменьшение размеров эллипсов и сдвиг их вправо с помощью сложения y- координаты и x-координаты.
int z;
size(480, 120);
background(0);
smooth();
for (int y = 32; y <= 120; y += 8) {
z= 16 - round(y/10);
//println(" y = ", y, " z = ",z);
for (int x = 12; x <= 480; x += 15) {
ellipse(x + y, y, z, z);
//println( " x = ",x);
//ellipse(x + y, y, 16 – y/10, 16 – y/10);
}
}
|
int z;
size(480, 120);
background(0);
smooth();
for ( int y = 32; y <= 120; y += 16) {
z= 16 - round(y/10);
println(" y = ", y, " z = ",z);
for (int x = 12; x <= 480; x += 30) {
ellipse(x + y, y, z, z);
println( " x = ",x);
//ellipse(x + y, y, 16 – y%10, 16 – y%10);
}
}
|
| |