April 21, 2025

Разработка клеточного автомата. Часть 2

Базовые принципы модели

Прежде чем говорить об улучшениях, напомню ключевые особенности симуляции:

  1. Бесшовный бесконечный мир — если бот выходит за границы области, он появляется с противоположной стороны.
  2. Боты как невидимые "кисти" — мы видим не самих ботов, а следы их активности (феромоны), которые они оставляют при движении. Представьте, что они рисуют узоры, но сами остаются прозрачными.
  3. Сенсоры — у каждого бота есть "органы чувств", которые сканируют концентрацию феромонов вокруг. На основе этих данных бот меня направление движения.

Улучшение №1: Индивидуальные сенсоры

Проблема: Изначально все сенсоры бота находились на одинаковом расстоянии от него. Это ограничивало разнообразие паттернов — узоры получались однородными по масштабу.

Решение: Я сделал расстояние до каждого сенсора уникальным. Например, один сенсор "видит" феромоны вблизи, другой — на средней дистанции, третий — вдали.

Результат:

  • Появились многослойные паттерны — мелкие завитки сочетаются с крупными волнами.
  • Симуляция стала напоминать взаимодействие разных масштабов в природе (например, турбулентность).

Вот скриншоты после первого улучшения.

Я думаю, что смотреть скриншоты не очень интересно. А видео на YouTube могут посмотреть не все. Но я думаю, вы уже посмотрели видео, которое я выкладывал ранее в телеграмм.

Улучшение №2: Цветовая визуализация

Проблема: В чёрно-белом режиме высокие концентрации феромонов сливались, делая узоры менее читаемыми.

Решение: Я добавил псевдоцветовую схему по аналогии с тепловизором:

  • Синий — низкая концентрация,
  • Красный — высокая,
  • Жёлтый — экстремальные значения.

Плюсы:

  • Легко отслеживать "горячие точки" активности ботов.
Так выглядит картинка с тепловизора

Примечание: Это не изменение самой симуляции — только способ отображения данных.

Улучшение №3: Переход в 3D

Идея: Добавить третье измерение, чтобы боты могли двигаться в пространстве, а не только по плоскости.

Сложности:

  1. Ориентация в пространстве
    • В 2D достаточно угла поворота (0–360°).
    • В 3D пришлось использовать кватернионы — математический аппарат для описания вращений без искажений.
    • Для любознательных: Кватернионы — это числа вида a + bi + cj + dk, где i, j, k — мнимые единицы. Они сложнее углов Эйлера, но эффективнее для расчётов.
  2. Производительность
    • 2D-текстура 1920×1080 = ~2 млн пикселей.
    • 3D-текстура 512×512×512 = ~134 млн пикселей — в 65 раз больше!
    • Даже современные видеокарты с трудом обрабатывают такие объёмы в реальном времени.

Результаты:

  • Неожиданный эффект: Боты стали группироваться в плоскостях XZ, игнорируя другие оси. Возможно, это связано с ошибкой в расчёте кватернионов.

И даже сейчас спустя 2 года я не до конца уверен в том правильно ли я решил первую проблему. Кватернионы страшная вещь.

А вот собственно и причина по которой я сомневаюсь в решении первой проблемы.

По неизвестной причине боты разделяются на слои, и почему-то только вдоль оси XZ. Я полагаю, что такой эффект можно было бы увидеть и по другим осям, но этого не происходит. Причины данного явления мне пока не удалось выяснить.

Ответы на вопросы

@egoravgul: А если я тебе заплачу, этот вопрос получит титул?
Ответ: Ты не заплатил.

@luborax: уже можно задавать вопрос? или через 48 часов? и по какому времени через 48 часов? с того момента как я прочитал? короче как понять?
Ответ: Увы уже нельзя.

Я: Зачем ты этим занимаешься?
Ответ: Отличный вопрос! Мне нравится когда код создаёт искусство которое можно созерцать.

Я: Для кого ты это пишешь?
Ответ: Я осознаю, что написанное может быть трудным для восприятия и не вызывать интереса. Однако для меня это способ самоанализа. Рассказывая вам о том, как это работает, я также делаю некоторые выводы для себя. Поэтому, можно сказать, что я пишу это в основном для себя.

Гений абсурда 🏆

Это, безусловно Я!
Сам придумал вопросы и сам на них ответил. Конечно, это немного грустно, но зато я получил награду, хотя и сам себе её присудил.