Doeasy & Perebor
Привет, знаешь, я тут подумал, как простые алгоритмы могут создавать удивительно красивые узоры – как будто из нескольких строк кода получается абстрактное искусство. Хочешь пошарим вместе и посмотрим, что у нас получится?
Звучит как нечто интересное и расслабленное. Давай позволим нескольким прогонам создать что-то для нас. Что тебе ближе: глитч-сетки, шум или, может, яркий всплеск цвета? Просто набросай идею, и посмотрим, что из этого выйдет.
Слушай, забей на это: for (int i=0; i<width; i++) for (int j=0; j<height; j++) cout << (rand()%2? '#': ' ');
Отличная маленькая пиксельная заготовка! Как будто случайный лоскутный ковер из чёрных и белых точек. Если хочешь добавить динамики, попробуй изменить символ на ‘*’ или ‘.’, или подкрути rand() % 3 для третьего оттенка. Можно ещё добавить неспешный внешний цикл, который будет сдвигать узор каждый кадр – получится живая, "дышащая" графика. Или поиграй с синусоидой, чтобы по-разному раскрашивать ряды. Не зацикливайся, экспериментируй и дай узору развиваться самому.
Конечно, вот небольшая модификация, чтобы узор ожил:
for (int t=0; t<100; ++t) {
for (int i=0; i<height; ++i) {
for (int j=0; j<width; ++j) {
int val = (rand() % 3) + (int)(5*sin(i/10.0 + t/5.0));
if (val % 3 == 0) cout << '*';
else if (val % 3 == 1) cout << '.';
else cout << ' ';
}
cout << '\n';
}
usleep(20000);
system("clear");
}
Просто замени `rand() % 3` этим выражением, и увидишь, как ряды будут пульсировать.
Просто небольшая подстройка, чтобы сетка ожила, почувствуй ритм синусоиды и немного случайности в каждом кадре.
```
for (int t=0; t<100; ++t) {
for (int i=0; i<height; ++i) {
for (int j=0; j<width; ++j) {
int val = (rand() % 3) + (int)(5*sin(i/10.0 + t/5.0));
if (val % 3 == 0) cout << '*';
else if (val % 3 == 1) cout << '.';
else cout << ' ';
}
cout << '\n';
}
usleep(20000);
system("clear");
}
```
Замени случайную часть на детерминированный паттерн, чтобы ты мог четко видеть ритм:
```
for (int t=0; t<200; ++t) {
for (int i=0; i<height; ++i) {
for (int j=0; j<width; ++j) {
int val = (int)(5*sin(i/10.0 + t/5.0)) + (j%3);
if (val % 3 == 0) cout << '*';
else if (val % 3 == 1) cout << '.';
else cout << ' ';
}
cout << '\n';
}
usleep(20000);
system("clear");
}
```
Смена ритма получилась отличная – теперь каждая линия как маленькая песня из синусов и четкий трехдольный ритм. Наблюдать за этим пульсом как-то ближе к картине, чем к программе, да? Просто чуть-чуть подкрути 5 или делитель на t, и откроется совсем новая тема. Поиграй, дай волнам подсказать движения кисти.
Ну, теперь это как картина с метрономом. Попробуй увеличить 5 до 10 – будет более чёткий ритм, или раздели t на 10 – получится более плавное замедление. Каждая мелочь меняет всё. Продолжай экспериментировать и дай синусоиде вести за собой.
Ну вот, чувствуешь ритм синусоиды – смотри, как полотно меняется. Попробуй большую амплитуду, или волну другую – косинус, даже пилу, если хочешь более отрывистый эффект. Не напрягайся, дай узору дышать, и посмотри, какие новые оттенки выплывут. Удачи в творчестве!