Комплекс Физических Программ
Это моя собственная разработка - Makarov Physics Suite, комплекс интерактивных программ и симуляций по физике, математическому моделированию и компьютерной графике.
Я занимаюсь этим проектом уже довольно давно. Сначала это были отдельные небольшие программы, которые я писал просто потому, что мне было интересно разобраться, как работает та или иная физическая модель. Постепенно их становилось всё больше, и в какой-то момент я решил объединить их в один большой комплекс.
Сейчас в нём уже несколько десятков разных симуляций. И, наверное, проще не рассказывать о них абстрактно, а просто показать несколько примеров.
Например, здесь можно посмотреть на визуализацию молекулярных структур. Такие модули для меня интересны не столько как «красивая картинка», сколько как возможность сделать объект наглядным и интерактивным — чтобы его можно было рассматривать, вращать и исследовать.
А это уже совсем другая задача — гравитационная симуляция большого количества объектов.
Здесь интересно то, что каждая частица взаимодействует с остальными, поэтому при прямом расчёте количество вычислений очень быстро становится огромным. Для подобных задач приходится использовать алгоритмические оптимизации, например Barnes–Hut, и думать уже не только о физике, но и о производительности.
Отдельное направление проекта — оптика.
Можно размещать источники света, линзы и другие объекты, менять их параметры и непосредственно наблюдать, как распространяются лучи.
Мне всегда нравилась идея виртуальной лаборатории, где вместо заранее записанной анимации пользователь сам собирает эксперимент.
Есть и более привычные физические эксперименты: электричество, электромагнетизм, цепи, катушки и другие системы.
Причём часть комплекса — это не просто визуализация. Например, электрические схемы можно собирать из компонентов, соединять их проводниками и запускать расчёт получившейся цепи.
По сути, программа одновременно является редактором схемы и симулятором.
Некоторые эксперименты выглядят уже значительно менее «учебно».
Я стараюсь делать визуализацию так, чтобы происходящее было не только математически интересно, но и просто приятно было наблюдать.
Есть различные волновые модели: распространение волн, интерференция и взаимодействие с объектами.
Такие вещи особенно хорошо показывают, зачем вообще нужна компьютерная симуляция. Формулу можно написать на бумаге, но когда видишь процесс в движении, интуитивно понимать его становится намного проще.
Одна из моих любимых тем — моделирование жидкостей.
Здесь используется SPH (Smoothed Particle Hydrodynamics): жидкость представляется большим количеством взаимодействующих частиц, а поверхность затем визуализируется уже как единый объём.
Уточка физически совершенно необязательна.
Но без уточки эксперимент был бы объективно хуже.
Есть и более абстрактные модели: поля, частицы, распределения, динамические системы и различные математические эксперименты.
Иногда результат получается настолько необычным, что программу можно просто запустить и некоторое время смотреть, что она делает.
И, конечно, есть обычная механика: твёрдые тела, столкновения, конструкции, гравитация и устойчивость систем.
Практически весь этот проект я делаю самостоятельно.
Основная часть написана на C#/.NET. Для графики использую в том числе OpenGL, для некоторых расчётов — GPU. В проекте есть как обычная растеризация, так и ray tracing/path tracing, разные численные методы и собственные реализации физических алгоритмов.
Но конечная цель для меня не в том, чтобы собрать коллекцию технических демонстраций.
Мне хочется сделать своего рода универсальную виртуальную лабораторию: открыл программу, выбрал интересующую область физики, собрал эксперимент, изменил параметры и сразу увидел результат.
Сейчас проект всё ещё активно развивается. Я постепенно переделываю старые модули, унифицирую интерфейс, оптимизирую расчёты и добавляю новые эксперименты.
Буду рад мнению людей, которым интересна физика, программирование, компьютерная графика или просто необычные симуляции.
Особенно интересно узнать: какой модуль из показанных вам кажется самым интересным и что ещё стоило бы добавить в такой комплекс?
Если будет интерес, в следующих постах могу отдельно разобрать некоторые симуляции подробнее — уже с рассказом о том, какая физика и какие алгоритмы там используются.