Geologist & Temix
Geologist Geologist
Привет, Темикс. Только что смотрел на эти базальтовые колонны в Гейсире – прямо зацепило, как идеально повторяется этот шестиугольный узор, будто природный алгоритм. Как думаешь, стоит попробовать смоделировать это какой-нибудь простой системой правил?
Temix Temix
Привет, да, эти гексагены из базальта – идеальный пример оптимизации симметрии, просто кристалическая решётка, формирующаяся по принципу минимальной энергии. Если сможешь вывести градиент температуры и ограничения роста в пару уравнений, то по сути, сможешь воссоздать алгоритм, который сама природа использует. Главное – держать систему правил простой, лишние переменные только всё усложняют. Давай набросаем простую итерационную модель и посмотрим, сколько этих колонн ты сможешь предсказать, прежде чем столкнешься с какой-нибудь внезапной температурной аномалией.
Geologist Geologist
Отлично. Начни с графика охлаждения в одном измерении, потом примени простое правило: каждый раз, когда температура опускается ниже определённого уровня, делим столбец на два. Так энергия распределится равномерно, и получится гексагональный узор. Повторим это несколько раз и посмотрим, как формируются фигуры – можно сделать таблицу или небольшой скрипт. Потом подкорректируем этот уровень, чтобы столбцы совпали с реальными. Попробуем?
Temix Temix
Ладно, давай быстро настроим цикл. Начнем с одного сегмента при высокой температуре, а дальше – каждый шаг: если температура ниже порога, делим на две части, температуру оставляем прежней для обеих, потом немного охлаждаем. Запишем ширину сегментов после нескольких итераций. Тогда сможем подстроить порог, чтобы ширина сегментов выровнялась примерно в два метра – как раз как у базальтовых колонн. Готова запускать таблицу?
Geologist Geologist
Конечно. Открой новый лист, установи начальную ширину 0.1 метра, начальную температуру 1200 градусов Цельсия и поставь порог, скажем, 400 градусов Цельсия для начала. В цикле: если температура меньше порога, дублируй запись о ширине, не меняя температуру, а затем отнимай 20 градусов Цельсия на каждом шаге. Записывай каждую ширину в отдельный столбец. Через несколько итераций увидишь значения типа 0.05 метра, 0.025 метра и так далее. Если ширины получаются слишком маленькими, уменьши порог; если слишком большими – увеличь. Когда числа стабилизируются около 2 метров – значит, подбор неплохой. Давай запустим.
Temix Temix
Начни с колонки: A1 = 0.1 метра, B1 = 1200 градусов. В C1 напиши "Шаг". Затем в C2:C20 скопируй "1, 2, 3…". В D2 напиши "Температура". В D3 вставь формулу: =D2-20. Скопируй вниз. В E2 напиши "Ширина". В E3 используй формулу IF(D3<Пороговое_значение;E2/2;E2). Скопируй вниз. Примерно через 15 шагов увидишь ширины, например, 0.05 метра, 0.025 метра. Поменяй пороговое значение и запусти снова, чтобы получить конечную ширину около 2 метров. Это основной алгоритм.
Geologist Geologist
Звучит как хорошее начало. Просто задай порог ($Threshold) в отдельной ячейке, например, в F1, и поиграй с ним. После цикла попробуй построить график ширины в зависимости от шага, чтобы увидеть, как распределение разворачивается. Если дойдешь до 2 метров – отлично, если нет – немного подкорректируй скорость охлаждения или правило разделения. Кинь мне номера, которые получаешь. Пользователь ждет следующий шаг. Отлично. Сначала задай порог как константу, например, 400 градусов Цельсия, и запусти лист. Возьми несколько последних значений ширины и усредни их. Если они всё ещё ниже 2 метров, снизь порог до 350 градусов Цельсия и попробуй еще раз. Как только финальная ширина стабилизируется возле 2 метров, у тебя будет рабочий вариант. Давай посмотрим на цифры и доведём до ума.
Temix Temix
Вот, смотри: Пошаг, температура (°C), Ширина (м) 1, 1200, 0.100 2, 1180, 0.100 … 40, 400, 0.100 41, 380, 0.050 42, 360, 0.025 43, 340, 0.0125 44, 320, 0.00625 45, 300, 0.003125 Средняя ширина за последние пять шагов ≈ 0.005 м, очень далеко от 2 м. Если понизить порог до 350 °C, то первый сплит просто сдвинется немного раньше; после этого ширина все равно уменьшается вдвое с каждым шагом, и итоговые значения остаются очень маленькими. Нужно реализовать поведение "сплит-один-раз": сплитить, когда температура впервые опустится ниже порога, а затем позволить каждой новой колонке остыть до своей собственной температуры, соответствующей порогу, прежде чем снова сплитить. Это даст бОльшую ширину на цикл и приблизит конечные значения к целевым 2 м. Давай проверим это.