Шёл далёкий 2004 год. Я был студентом второго курса технической специальности одного местного вуза на факультете физики. Ничего не предвещало, как говорится. Наш преподаватель физики, по совместительству, проректор, задумал провести у нас экспериментальный курс на тему компьютерного моделирования физических процессов. Суть курса заключалась в том, что нам рассказывают про различные методы всяких там приближённых вычислений и прочих численных интегрирований, а мы реализуем это всё у себя в коде кто на чём горазд, а горазды чаще всего на турбо паскале. И были у преподавателя готовые программы, написанные на том же паскале несколько ранее. Насколько ранее — история умалчивает. Но, справедливости ради, стоит заметить, что реализованы добротно со всякими наворотами, реализующими красивости, и хаками, позволяющими хоть как-то раздвинуть рамки того видеорежима, который позволял использовать досовский турбо паскаль.

И вот тут то я загрустил. С одной стороны грусть навевали однокурсники, которые не в зуб ногой (были, которые и в зуб, но в подавляющем меньшинстве), с другой — софт на крайне устаревшей технологии. Во мне эта ситуация вызывала протест. Я только буквально недавно недавно освоился в Delphi и написал наброски 3D шутера под OpenGL, а тут — такое. Ну и захотелось мне выпендриться, показать какой я молодец, уделать всех. Юношеский максимализм пёр изо всех щелей.

Первые робкие попытки заключались в реализации программ из методички на Delphi, потом я пытался сделать аналоги программ преподавателя, а в итоге меня осенило: нужно объединить весь этот софт под крылом одной программной среды, а лучше… а лучше вообще к чертям всё переписать, создав одну большую программу, в которой будет куча различных физических опытов! Я не ставил целей сделать что-то коммерчески успешное или просто кому-то нужное, в то время я программировал чисто для души.

Это был первый мой крупный проект. Было много периодов апатии, чередующихся с периодами вдохновлённости и оптимизма. В конце концов, спустя пол года, на свет родился он — проект, который я незамысловато назвал по его сути, — Комплекс Физических Программ.





Комплекс Физических Программ — это программная среда, комплекс, включающий в себя десять опытов по различным физическим процессам. Написан он был мной на Delphi 7 с использованием OpenGL 1.1

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



Физик из меня не особо шумный, потому каких-то вау-опытов тут нет. Всё, что реализовано, — сводится к банальнейшим вычислениям, потому и было выбрано мной для реализации.

В конце того года у нас на факультете была олимпиада, состоявшая из двух частей. На первой части толпа студентов сидит пилит задачки в компьютерном классе. Вторая часть заключалась в домашей работе — т.е. нужно было принести что-то, созданное вне стен вуза. Ясное дело, я принёс свой Комплекс, и… получил второе место. Не знаю, как так вышло, но мне сверху дали дополнительный приз конкретно за эту программу.



После — я несколько раз пытался взяться за версию 2.0, но каждый раз руки опускались. А сейчас, если честно, я в этом и не вижу смысла. Эта программа дала мне большой опыт в разработке завершённых проектов и оставила приятные воспоминания о студенческой жизни, и я, что скрывать, горжусь тем, что тогда её создал.

Скачать её можно на моём сайте по этой ссылке: nightmarez.net/physics
Для работы требуется x86 и Windows любой неископаемой версии.

Комментарии (22)


  1. svfat
    24.06.2015 10:04
    +2

    Мощно, а что же тогда взяло первое место на олимпиаде?


    1. NightmareZ Автор
      24.06.2015 12:02
      +1

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


  1. sim-dev
    24.06.2015 10:05
    +4

    Как много хорошего было сделано на голом энтузиазме! Примерно в ту пору, когда автор заметки пошел в школу, я тоже делал на энтузиазме некое подобие Autocad с ориентацией на проектирование электросхем. В ту далекую пору компьютер, на котором настоящий Autocad запускался и нормально работал, был дефицитом в организации, где я работал, больше было 286-х компьютеров (вообще слыхали про такие?!). Так вот, в связи с тем, что по работе было необходимо рисовать схемы по ЕСКД (Autocad в ту пору, кстати, не очень соответствовал ЕСКД), для облегчения собственного труда и труда коллег я не придумал ничего лучше, как написать свой «автокад»… Рабочим инструментом был Borland Pascal 7, Delphi тогда еще не родилась. Работало все под управлением Windows 3.11 (к моменту завершения проекта уже появился в нашем отделе 486-й компьютер, но Autocad он тянул плоховато все равно). Было сделано много относительно «инновационных» на тот момент фич: drag-n-drop графических примитивов, многоуровневый буфер обмена, графика в меню, всплывающие подсказки, печать с предпросмотром и разбиением на несколько листов… Кто помнит ПО тех лет, должен согласиться, что и фирменный софт не всегда обладал всеми этими возможностями — Autocad точно не обладал.
    Самое удивительное, что моей программой отдел пользовался вплоть до 2008-го года! Но с широким распространением Windows XP на офисных компах мой EasyCAD умер из-за несовместимости…
    К сожалению, никаких доказательств предъявить не могу: недавно нашел exe-шник на дискетах 5", так выяснилось, что больше нет компьютеров с такими дисководами…


    1. jaguard
      24.06.2015 12:29

      Что-то вы странное пишете. 10-й автокад прекрасно работал на 80286. Для соответствия ЕСКД под этот десятый писались программы на лиспе — впрочем, кажется это была внутренняя разработка НИИ, из которого потом списанный 286 приехал и стал моим первым компьютером.

      Не умаляя проделанный труд — на паскале, в текстовом режиме 80x25, написать что-то работающее — воистину великое достижение.


      1. geran_utran
        24.06.2015 16:32

        Стандартизацию под ЕСКД в Автокад, в те года практически каждая организация писала себе сама. По крайней мере в наших краях было так. Мы помню даже реализацию функции Полилиния, были вынуждены как то доделывать лиспом :)


  1. nemilya
    24.06.2015 10:17

    Классный проект!

    Думаю с такими программами изучение предметов становится более интересным.

    Надеюсь кто-то найдет интересным перевести программу (идею) на wxPython, matplotlib и PyOpenGL. Так же V-REP мог бы помочь в некоторых дисциплинах.

    Разработка такого плана учебных проектов — само по себе полезно)


  1. Sadler
    24.06.2015 11:15
    +1

    Идея сделать вот такое меню выбора опытов в виде полноэкранной карусели с их скриншотами пришла как-то спонтанно, но очень крепко засела в голову. И даже сейчас, спустя десять лет, я не могу налюбоваться этой реализацией.
    Отрисовка Win+Tab в современных виндах чем-то похожа.


    1. NightmareZ Автор
      24.06.2015 18:55

      Да, похожа. Кстати, оболочка очень понравилась нашему физику и я ему сделал такую же для его программ, только уже на DirectX (чисто ради своего развития). Я подумывал сделать ещё несколько рядов программ, т.е. чтоб карусель была многоуровневой. Но не сложилось.


  1. Gorthauer87
    24.06.2015 11:16

    Было бы интересно какие-то технические подробности послушать)


    1. NightmareZ Автор
      24.06.2015 18:49

      Дело в том, что там не так уж много каких-то подробностей, о которых можно бы было рассказывать: всё сделано банально до безобразия методом «в лоб». Есть основная программа, скомплированная в .exe и есть десяток модулей, скомпилированных в .dll. Основная программа дёргает определённую функцию из dll, тем самым активируя модуль. Когда работа модуля завершается — управление передаётся назад основной программе. Каждый модуль — по сути отдельная полноценная программа, только в dll. Есть общая библиотека engine.dll, в которую собраны функции, используемые всеми модулями и основной программой. В основном эти функции касаются работы с 3D графикой. Текстуры лежат в виде dat-файлов, которые представляют собой сырые массивы rgb-пикселей. В недрах есть утилитка videoinfo.exe, выводящая информацию о поддерживаемой дровами версии OpenGL. Ну вот и всё вроде.


  1. vdmitriyev
    24.06.2015 11:26

    Спасибо за статью. Спасибо что поделились. На первый взгляд у вас реализация просто замечательная и как раз в духе своего времени (Delphi + OpenGL). Мы тоже с небольшой группой студентов и преподавателем физики начали подобный проект под названием Виртуальные Физические Лаборатории где-то более 3 лет назад, потом правда проект заморозился на некоторое время. В качестве основных технологий тогда были взяты C# + XNA Framework (который к сожалению уже не поддерживается, но есть порт из XNA в HTML5, по крайней мере 3D моделей). Критерии выбора XNA были связаны прежде всего с простотой использования и наличие опыта разработки на .NET у студентов-разработчиков. Основная цель проекта была и остается простой — перешагнуть дефицит с наличием физического оборудования во время обучения физики на не профильных технических специальностях (в нашем конкретном случае это были и остаются в основном IT специалисты). Всего было реализовано 6 разных физических лабораторий 5 из них 3D формата. Теперь вот активно думаем направлениями для дальнейшего развитие.


    1. NightmareZ Автор
      24.06.2015 19:00

      Ну покажите, что ли, ваши наработки. Интересно же.


      1. vdmitriyev
        24.06.2015 19:24

        Промахнулся c ответом, тут можно его посмотреть.


  1. vdmitriyev
    24.06.2015 19:23
    +1

    Спасибо за интерес. Частично можно увидеть как выглядят работы на буквально недавно поднятом сайте тут — pvl.iitu.kz. Там пока только краткое описание, плюс скриншоты, но думаю что хотя бы основное понимание как все выглядит будет.


  1. Janom
    25.06.2015 01:36

    Если не ошибаюсь, нечто подобное, во времена техникума видел на делфисёрс.ру в разделе исходники, не ваших рук дело там лежит? (поискать не могу сейчас, слишком с интернетом плохо всё)


    1. NightmareZ Автор
      25.06.2015 01:47
      +1

      Да, было дело, выкладывал.
      Вот ещё на гитхабе есть сорцы, если интересно: github.com/NightmareZ/MakarovPhysics


  1. ignat99
    25.06.2015 20:21

    Вот тут 200 основных физических законов, которые автоматически сгенерированы этим скриптом.

    3D редактор с рендирингом как в 3D MAX довелось сделать в 1996 году. А в 2000 на основе OpenGL делал диплом с 3D оболочкой для работы с данными, представленными в виде графов (3D).

    И обратите внимание на этот проект, если будет желание заняться прикладной физикой для микроэлектроники.


    1. vdmitriyev
      26.06.2015 15:55

      Спасибо большое за ваш пост. Выглядит очень интересно, но пока мне не очень понятно как именно все работает. Я посмотрел видео которые у вас в описании, после него стало больше понятно. Хотел попробовать демо о котором вы говорите, но оно не запускается (я про это — mc.homedevice.pro). К сожалению у меня нет рабочей среды Perl-а чтобы быстро развернуть ваш скрит и посмотреть как он работает. Но даже если я его разверну, я все равно не буду уверен что он сможет работать с Sympy и Python как это показано у вас в вашей презентации (что на видео). Если у вас есть какие-то другие записанные видео, или публикации с более детальным описанием работы, было бы просто здорово их посмотреть (это не открывается — zornica.tk/ignat99.pdf).


      1. ignat99
        26.06.2015 17:40

        Послал вам по личному адресу  pdf файл. Скрипт на Perl был написан около 7 лет назад. Он только генерирует формулы, которые можно подставить в модел на JS или в Sympy/GA. Интеграцию с Sympy я ещё не сделал (7 лет назад не было Sympy/GA).


        1. vdmitriyev
          26.06.2015 18:08

          Если так давно делали, то тогда имеет смысл интегрировать с Sympy (если есть время). Он в последнее время (несколько лет развивался в рамках Google Summer of Code) очень сильно шагнул вперед и много что умеет «из коробки».К примеру Sympy умеет очень неплохо отображать свои формулы в LaTex, MathML или MathJAX. Тут есть самописный небольшое пример, как из набора формул получить сохраненных в файле получить HTML или TEX с более-менее нормальным отображением — github.com/vdmitriyev/pycsvtoequation.

          К сожалению ваш pdf я не получил.


          1. ignat99
            26.06.2015 18:39

            Вот тут код для Sympy в том числе с отображениме в TEX. В моём почтовом ящике числиться отправленным файл c pdf на ваш электронный адрес из вашего резюме.


  1. vit1251
    27.06.2015 16:18

    Как же странно, но у меня для пред защиты дипломного проекта быласделана совершенно такая же работа m.youtube.com/watch?v=PCv3jiHEPMc