Привет, Хабр!

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

В чем их отличие от тех, которые я Вам представлю, они были написаны на Delphi. Конечно время идет и прогресс не стоит на месте, в том числе и мои навыки в новых инструментах разработки.

Теперь перейдем к сути статьи.

На википедии есть страница с их списком.

Насколько я знаю ими занимались различные известные и не очень математики. Часть из них я смог реализовать в программах на webgl. Это будет экспериментальная статья, так что прошу любить и жаловать. Рассмотрим 5 примеров алгебраических кривых разных порядков.

Гиперболическая спираль

Параметрическая запись:

x=a*cos(t)/t, y=a*sin(t)/t

https://codepen.io/Gremlin_Rage/pen/zYzOwoB

Чем то похоже на окружность, но с увеличением t, увеличивается радиус окружности.

Кардиоида

x=2a*cos(t)-a*cos(2t),y=2a*sin(t)-a*sin(2t)

https://codepen.io/Gremlin_Rage/pen/powzPez

Астроида

x=R*cos^3(t),y=R*sin^3(t)

https://codepen.io/Gremlin_Rage/pen/QWgLvvX

Лемниската Бернулли или бесконечность

x=c\sqrt{2}cos(t)/(1+sin^2(t)),y=c\sqrt{2}cos(t)sin(t)/(1+sin^2(t))

https://codepen.io/Gremlin_Rage/pen/abwoWLJ

Дельтоида

x=(b-a)cos(t)+a*cos((b-a)/a*t)y=(b-a)sin(t)-a*sin((b-a)/a*t)

https://codepen.io/Gremlin_Rage/pen/dyRbWmd

Дельтоида получилась не такая, как на вики, так что если есть вопросы по формуле, оставьте замечание в комментариях. На самом деле почти нечего сказать по данной теме, я лишь пытаюсь популяризовать сам предмет, не в частности этот.

Спасибо за понимание!

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


  1. belch84
    28.08.2021 21:23
    -1

    Подброшу и своих кривых немного

    Кривые в параметрическом представлении: трохоида, эпициклоида, астроида, конхоида Никомеда
    image


    1. Refridgerator
      28.08.2021 22:02

      А почему «своих»-то? Давно известные кривые. А нарисовать можно было и покрасивее — антиалиасинг же давно придумали.

      например, нарисовано ещё во времена DOS-а


      1. belch84
        28.08.2021 22:37

        Своих потому, что нарисованы они в моем собственном приложении. Покрасивее нарисовать можно, но я могу их нарисовать достаточно быстро, а также анимировать, нарисовать трехмерные кривые и расмотреть их с разных сторон, для этого приходится антиалиасингом пожертвовать (и жертвую я несколько меньше, чем автор). Еще могу нарисовать поверхности, и все это без программирования, только задавая формулы

        Поверхность Голдстайна-Прайса
        image
        Эта поверхность тоже не моя, я её только изображаю и анимирую


        1. Refridgerator
          28.08.2021 22:58

          Так миллион таких приложений)

          миллион первое

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


          1. belch84
            28.08.2021 23:08

            Моё приложение несколько отличается от миллиона остальных, поскольку оно умеет решать дифференциальные уравнения и анимировать изображения трехмерных фазовых траекторий (собственно, это его основная функция, кривые, поверхности и прочее — побочные)

            Четырехкрылый аттрактор
            image
            Не вполне понимаю, что вы мне хотите доказать — что мне не стоило писать своё приложение? Вы же можете просто не обращать на него никакого внимания.
            Записи в GIF у меня нет тоже, я пользуюсь Гифмэйкером


            1. Refridgerator
              28.08.2021 23:27

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

              дифференциальные уравнения, к слову, тоже не проблема

              И краевые условия считаются, и импульсную характеристику можно снять, чтобы её в спектр потом разложить.


              1. belch84
                28.08.2021 23:59

                Просто на хабре хочется видеть материал уровня чуть выше школьного (хотя бы).
                Это вы про мою скромную системку или про картинки автора?
                И краевые условия считаются

                Не вполне понял, вы имеете в виду, что пропагандируемое вами ПО умеет решать краевые задачи?
                This is just only my wave equation experiments, written with mix of c# and c++. This sample created for my friends to demonstrate that spherical acoustic is not better then classic box.
                Это из комментов к приведенному вами видео на Youtube. Если вы автор этого ПО, то мне кажется, диапазон его применения несколько узковат. Моё приложение может решать любые дифференциальные уравнения (обыкновенные, ну, не более чем 25 порядка, есть и другие ограничения), и представлять результаты решения в наглядном виде, включая всякие тонкости вроде точек сечений Пуанкаре и графиков зависимостей показателей Ляпунова от параметров для произвольной системы. Если вы полагаете, что ваше ПО проделает исследование диффуравнений лучше — я возражать не собираюсь, но у меня впечатление, что оно не очень универсально. Моё же приложение подойдет даже для использования школьником, интерересующимся тем, что такое динамические системы. И еще, его можно скачать и попробовать, ваше, надеюсь, тоже можно?


                1. Refridgerator
                  29.08.2021 00:31

                  Это вы про мою скромную системку или про картинки автора?
                  И про картинки, и про реализацию, и про содержание. Алгебраических кривых — миллиард, и я такие рисовал бейсиком ещё на спектруме. Для этого ума много не надо. Ум нужен чтобы понять, откуда они взялись и практически их применить.

                  Если вы автор этого ПО, то мне кажется, диапазон его применения несколько узковат
                  Конечно узковат, потому что решает одну конкретную задачу — но делает эту лучше, чем универсальные решатели. Какой вообще смысл решать уравнения без понимания их смысла? Здесь я сделал то, чего не нашёл в других реализациях, в частности, настраиваемый PML.

                  Если вы полагаете, что ваше ПО проделает исследование диффуравнений лучше — я возражать не собираюсь, но у меня впечатление, что оно не очень универсально.
                  Было бы очень очень интересно посмотреть на решение той же задачи в Вашем приложении.

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

                  А parametric surface creator скачать можно с неофициальных источников например здесь.


            1. APrioriAPosteriori
              19.09.2021 17:48

              Четырехкрылый?? Помнится в аспирантуре в годы труда в нейробиол. лабе (comp. neuroscience) и двухкрылый вызывал панику (еще надо было в домашке это 2Д чертить, учили бы нас вот такой визуализации!)

              Если есть гифки с визуальным оформлением чуток поинтересней (в плане цветовой гаммы), можно начинать аккаунт на giphy, собирать единомышленников, там встречаются!

              Конкретный вопрос от дилетанта:

              анимировать изображения трехмерных фазовых траекторий

              в смысле три фазы по траектории представлены в гифке направлением(ями) ротации по разным плоскостям(грубо говоря). Я прямо пригипнотизировалась на эти ротации, т.е. пытаюсь понять, как порядок направлений (и сами направления) ротации решаются при создании визуализации?


              1. belch84
                19.09.2021 18:36

                Фазовая траектория — это траектория, которая описывает изменение динамической системы в фазовом пространстве. Если динамическая система представляется в виде системы трех дифференциальных уравнений

                image,

                то её изменение с течением времени можно представлять как три разных графика x(t), y(t), z(t), а можно — как график одной трехмерной кривой, начинающейся в точке (x0,y0,z0). Система уравнений для четырехкрылого аттрактора взята из работы

                https://www.scielo.br/j/bjp/a/PZsxkWyBdyDpS3sHTQVwKZq/?lang=en&format=pdf

                Графики первых двух компонент системы четырехкрылого аттрактора
                image

                В этой книге описаны методы построения аттракторов с множеством «крыльев»
                http://www.ee.cityu.edu.hk/~gchen/pdf/LC-IJBC06-survey.pdf



  1. belch84
    29.08.2021 14:24

    Было бы очень очень интересно посмотреть на решение той же задачи в Вашем приложении.

    Это несложно, только спектр находится непосредственно, без импульсных характеристик

    Краевая задача для уравнения Матьё
    Показано решение задачи на собственные значения для уравнения Матьё с нулевыми краевыми условиями на интервалеimage. Видно, что, как и полагается для всякой задачи Штурма-Лиувилля, собственные значения при увеличении своего номера n ведут себя как n^2, а собственные функции имеют перемежающиеся нули (т.е. нули следующей по порядку собственной функции лежат между нулями предыдущей)
    image

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


    1. Refridgerator
      29.08.2021 17:57

      Я не увидел ничего общего между своим решением и Вашим — но конечно же только потому, что недостаточно хорошо разбираюсь в решении дифференциальных уравнений. У меня рассматривалось распространение волны внутри сферы, и задачей анимации было показать, что стоячие волны в ней тоже образуются, вопреки представлениям некоторых аудиофилов. Также рассматривалась интерференционная картина на отдельно взятых частотах,

      в частности






  1. belch84
    29.08.2021 18:08

    Я не увидел ничего общего между своим решением и Вашим — но конечно же только потому, что недостаточно хорошо разбираюсь в решении дифференциальных уравнений


    А что может быть общего, вы же не выписали, решением какого точно уравнения вы занимаетесь. Уравнение Матьё — вполне себе известное, мои решения можно перепроверить


    1. Refridgerator
      29.08.2021 18:15

      Ну Вы наверное должны понимать, что уравнение Матьё и ему подобные — это сильно упрощённые модели (как минимум потому что оно одномерное) для того, чтобы их можно было решить аналитически и были придуманы тогда, когда численные решения были просто невозможны, в отличие от сегодня.


  1. belch84
    29.08.2021 18:34

    Ну Вы наверное должны понимать, что уравнение Матьё и ему подобные — это сильно упрощённые модели (как минимум потому что оно одномерное) для того, чтобы их можно было решить аналитически и были придуманы тогда, когда численные решения были просто невозможны, в отличие от сегодня.

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


    1. Refridgerator
      29.08.2021 18:59

      Понимаю именно как «придумывают», потому что модель по определению является упрощением описываемого ею явления, и автор модели сам определяет, какие упрощения допустимы, а какие нет. В частности, мат. модель катапульты сильно зависит от того, учитывать ли сопротивление воздуха, ветер, неравномерность g, неравномерность поверхности земли и прочее, и в простейшем случае представляет даже не параболу, а дугу окружности. То же волновое уравнение более точно считается на гексагональной сетке — но там сложнее подавление волн на краях реализовывать, а в 3d так и тем более.