nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

Снежинка

Один из новогодних символов - это снежинка, удивительное творение природы. Можно понять причудливую форму деревьев, в конце концов, они живые, они растут, ветвление - вполне логичный для этого процесс. Но снежинка - это просто кристаллик льда, почему он должен иметь столь сложную форму, но в то же время не просто хаотичное нагромождение?

Вот нашел простую модель, которая позволяет увидеть процесс образования снежинок и понять его на интуитивном уровне. И конечно, написал программку, которая эту модель реализует)

all
Может, получится смоделировать и более похоже, я не успевал и взял в некоторой мере "первые попавшиеся" коэффициенты.
У нас в школе N363 был такой интересный урок - синергетика, где нам рассказывали (без особой конкретики, правда) про странные аттракторы, эффект бабочки, фракталы и бифуркации, о том, как даже самые простые нелинейные системы склонны к очень сложному поведению и явлениям самоорганизации. Уже рекуррентное соотношение X[n+1]=k*X[n]*(1-X[n]) ведет себя весьма причудливым образом.

Оказывается, вовсе не обязательно за сложным поведением или сложной формой искать какие-то столь же сложные соотношения. Образование снежинок - процесс длительный и до сих пор слабо изученный. Зачастую снежинка летает по многу раз вверх и вниз, минуя области различной температуры и влажности и потихоньку вырастая. Но это не значит, что для объяснения формы снежинок мы должны рассмотреть этот процесс во всей полноте!

На самом деле, очень многое в понимании может дать простейшая клеточная модель, описанная здесь. Я не удержался и решил ее быстренько реализовать) Некоторые картинки того, что получается, приведены наверху. Сейчас коротко расскажу своими словами, как это работает.

Действие происходит на двухмерной гексагональной решетке, каждой ячейке приписывается одно число, которое можно, довольно условно, интерпретировать как содержание воды в этой ячейке. Если ее от 0 до 1, то самопроизвольной конденсации еще не происходит, а если больше - то все содержимое считается льдом.

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

То есть, на каждом шаге рассматривается две "фракции воды" - твердая и жидкая/газообразная. Содержание второй в ячейках с "льдом" и ближайших к ним, считается нулевым, поэтому они начинают вытягивать влагу из окружающих ячеек и кристаллизоваться. Для твердой фракции производится еще одно действие - к каждому числу прибавляется коэффициент "гамма". Он, тоже весьма условно, показывает приход влаги "сбоку", с торцов. В какой-то мере он соотносится с толщиной снежинки. 

Коэффициент "бета" просто указывает граничные условия для модели, т.е. содержание воды в самом начале и на границе области.

Ну и наконец, в самом начале моделирования в центральную ячейку поля помещается значение 1, т.е единичный кристаллик льда - он и служит центром кристаллизации, вокруг которого вырастает снежинка. Можно видеть, как разветвленные отростки "съедают" почти всю поступающую снаружи влагу, в результате чего в центр она так и не попадает, и пустоты не заполняются льдом, отчего и получается такая интересная форма. 

Подробности (с картинками) смотрите в статье (http://www.patarnott.com/pdf/SnowCrystalGrowth.pdf), там же другие примеры что может получиться.

Надо еще упомянуть, что два параметра можно менять по ходу работы, отчего можно получить еще больше вариаций. Но самое главное как раз в том, что параметра всего 2, каждый от 0 до 1, и в результате их варьирования получается множество разных форм. большинство из которых можно найти и в реальных снежинках!

Программку с исходниками можно скачать отсюда, она совсем простая, на Delphi, можно поразвлекаться)



С наступающим всех! Сегодня уеду в Сергиев Посад праздновать и кататься на лыжах - погода, похоже, располагает.
Tags: красивые решения, математика, моделирование, программки, статьи
Subscribe

Recent Posts from This Journal

  • Быстрее, меньше, точнее!

    Начинаем тестировать новую процедуру арктангенса. Сначала на симуляции. Получаем дамп памяти: Переписываем числа в таблицу: Первая половина…

  • atan1 "на четырёх умножениях" на ассемблере

    Немножко подправил таблицу результатов для первого алгоритма. В этот раз вместо "правильных углов" 0°, 12°, 24° и т.д (те, которые я ХОТЕЛ взять для…

  • Тестируем atan1 на QuatCore

    Пора уже перебираться на "железо" потихоньку. Решил начать с самого первого алгоритма, поскольку он уже был написан на ассемблере. В программу внёс…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 4 comments