Заметки за 2024 год

Цветные звёзды

Это мой самый первый эффект, созданный еще в начале 90-х на клоне микрокомпьютера ZX-Spectrum под названием “Ленинград-1”. Программа была написана на языке Бэйсик.

Для запуска эмулятора нужен JavaScript.

Конечно, из-за ограничений системы и клэшинга атрибутов эффект выглядел не так впечатляюще, как хотелось бы, но на тот момент для меня это было настоящим достижением. Ниже текст программы на языке BASIC компьютера ZX-Spectrum:

1 BORDER 0
2 PAPER 0
3 CLS
10 RANDOMIZE
20 INK 1+INT (RND*7)
30 PLOT INT (RND*256), INT (RND*176)
40 GOTO 20

Мне кажется, описывать алгоритм излишне, но всё же попробую.

  • Команда BORDER 0 устанавливает цвет рамки экрана в чёрный.
  • Команда PAPER 0 задаёт цвет фона (бумаги) также чёрным.
  • Команда CLS очищает экран, заполняя его цветом, заданным в PAPER.
  • В строке 10 командой RANDOMIZE инициализируется генератор случайных чисел.

Далее начинается бесконечный цикл:

  • В строке 20 случайным образом выбирается цвет пера (INK) от 1 до 7.
  • В строке 30 на случайных координатах INT(RND*256) (по горизонтали) и INT(RND*176) (по вертикали) рисуется точка с помощью команды PLOT.
  • В строке 40 команда GOTO 20 заставляет программу вернуться к началу цикла, создавая бесконечный процесс случайной генерации точек на экране.

Эффект — экран заполняется точками разных цветов в случайных местах, создавая “шумовую” визуализацию.

Пример работы программы на ZX-Spectrum

Однако со временем можно заметить, что точки выстраиваются в линии. Это связано с особенностями генератора случайных чисел ZX Spectrum, который использует линейный конгруэнтный алгоритм. Такой подход, хотя и эффективен для своего времени, порой создаёт видимые закономерности, особенно если числа проецируются на экран через простые операции, такие как взятие остатка. Ограниченный диапазон чисел и повторяемость последовательности при одинаковом начальном значении также усиливают этот эффект.