Разработка клеточного автомата. Часть 2
Базовые принципы модели
Прежде чем говорить об улучшениях, напомню ключевые особенности симуляции:
- Бесшовный бесконечный мир — если бот выходит за границы области, он появляется с противоположной стороны.
- Боты как невидимые "кисти" — мы видим не самих ботов, а следы их активности (феромоны), которые они оставляют при движении. Представьте, что они рисуют узоры, но сами остаются прозрачными.
- Сенсоры — у каждого бота есть "органы чувств", которые сканируют концентрацию феромонов вокруг. На основе этих данных бот меня направление движения.
Улучшение №1: Индивидуальные сенсоры
Проблема: Изначально все сенсоры бота находились на одинаковом расстоянии от него. Это ограничивало разнообразие паттернов — узоры получались однородными по масштабу.
Решение: Я сделал расстояние до каждого сенсора уникальным. Например, один сенсор "видит" феромоны вблизи, другой — на средней дистанции, третий — вдали.
- Появились многослойные паттерны — мелкие завитки сочетаются с крупными волнами.
- Симуляция стала напоминать взаимодействие разных масштабов в природе (например, турбулентность).
Вот скриншоты после первого улучшения.
Я думаю, что смотреть скриншоты не очень интересно. А видео на YouTube могут посмотреть не все. Но я думаю, вы уже посмотрели видео, которое я выкладывал ранее в телеграмм.
Улучшение №2: Цветовая визуализация
Проблема: В чёрно-белом режиме высокие концентрации феромонов сливались, делая узоры менее читаемыми.
Решение: Я добавил псевдоцветовую схему по аналогии с тепловизором:
Примечание: Это не изменение самой симуляции — только способ отображения данных.
Улучшение №3: Переход в 3D
Идея: Добавить третье измерение, чтобы боты могли двигаться в пространстве, а не только по плоскости.
- Ориентация в пространстве
- В 2D достаточно угла поворота (0–360°).
- В 3D пришлось использовать кватернионы — математический аппарат для описания вращений без искажений.
- Для любознательных: Кватернионы — это числа вида a + bi + cj + dk, где i, j, k — мнимые единицы. Они сложнее углов Эйлера, но эффективнее для расчётов.
- Производительность
- Неожиданный эффект: Боты стали группироваться в плоскостях XZ, игнорируя другие оси. Возможно, это связано с ошибкой в расчёте кватернионов.
И даже сейчас спустя 2 года я не до конца уверен в том правильно ли я решил первую проблему. Кватернионы страшная вещь.
А вот собственно и причина по которой я сомневаюсь в решении первой проблемы.
По неизвестной причине боты разделяются на слои, и почему-то только вдоль оси XZ. Я полагаю, что такой эффект можно было бы увидеть и по другим осям, но этого не происходит. Причины данного явления мне пока не удалось выяснить.
Ответы на вопросы
@egoravgul: А если я тебе заплачу, этот вопрос получит титул?
Ответ: Ты не заплатил.
@luborax: уже можно задавать вопрос? или через 48 часов? и по какому времени через 48 часов? с того момента как я прочитал? короче как понять?
Ответ: Увы уже нельзя.
Я: Зачем ты этим занимаешься?
Ответ: Отличный вопрос! Мне нравится когда код создаёт искусство которое можно созерцать.
Я: Для кого ты это пишешь?
Ответ: Я осознаю, что написанное может быть трудным для восприятия и не вызывать интереса. Однако для меня это способ самоанализа. Рассказывая вам о том, как это работает, я также делаю некоторые выводы для себя. Поэтому, можно сказать, что я пишу это в основном для себя.
Гений абсурда 🏆
Это, безусловно Я!
Сам придумал вопросы и сам на них ответил. Конечно, это немного грустно, но зато я получил награду, хотя и сам себе её присудил.