Как нарисовать звезду (и не только) в полярных координатах

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

    Формула для равностороннего многоугольника в полярных координатах выглядит очень просто

    $\rho = \frac{\cos \left(\frac{2 \sin ^{-1}(k)+\pi m}{2 n}\right)}{\cos \left(\frac{2 \sin ^{-1}(k \cos (n \phi ))+\pi m}{2 n}\right)}$


    и имеет следующие параметры:

    $\phi$ — угол;
    $n$ — количество выпуклых вершин;
    $m$ — определяет, через какое количество вершин стороны будут лежать на одной прямой. Для него допустимы и отрицательные значения — от знака будет зависеть, в какую сторону будет выгибаться звезда;
    $k$ — жёсткость — при $k=0$ мы получим окружность вне зависимости от прочих параметров, при $ k=1$ — многоугольник с прямыми линиями, при промежуточных значениях от $0$ до $1$ — промежуточные фигуры между окружностью и многоугольником.

    С этой формулой можно нарисовать звезду двумя путями:

    1) $n=5, m=3$


    2) $n=5/4,m=0$. В этом случае требуется сделать два оборота вместо одного:


    Параметр $m$ влияет на многоугольник следующим образом (здесь он изменяется от -1 до 5):


    Параметр $k$ в анимации:


    Комплексная форма и модификации


    Можно переписать исходную формулу в комплексном виде, и, несмотря на наличие в ней мнимых единиц, значение радиуса по-прежнему будет оставаться действительным:

    $\small\rho = \frac{4^{1/n} \left(\sqrt{1-k^2}+i k\right)^{-1/n} \left(1+\left(\sqrt{1-k^2}+i k\right)^{2/n} e^{\frac{i \pi m}{n}}\right) \left(\sqrt{1-k^2 \cos ^2(n \phi )}+i k \cos (n \phi )\right)^{1/n}}{4^{1/n}+e^{\frac{i \pi m}{n}} \left(2 \sqrt{1-k^2 \cos ^2(n \phi )}+2 i k \cos (n \phi )\right)^{2/n}}$


    На первый взгляд это может показаться бессмысленным, поскольку формула стала чуть более громоздкой — но не стоит спешить с выводами. Во-первых, в ней отсутствует арксинус, что полностью меняет математический смысл формулы и позволяет по-другому посмотреть на построение звёздчатого многоугольника. Во-вторых, из неё также можно получить компактные формулы для частных случаев, например $\frac{i^t \left(i^{n t}\right)^{1/n}}{1+\left(i^{n t}\right)^{2/n}}$. В-третьих (и самое интересное), её можно творчески модифицировать и получать другие, неожиданные формы. Для того, чтобы появление возможной мнимой компоненты в радиусе не вызывало неоднозначности при вычислении, можно её сразу привести к декартовым координатам умножением на $e^{i \phi }$. Вот примеры некоторых модификаций:

    $\frac{(-1)^{2/3} e^{i \phi } \left(i \cos (3 \phi )+\sqrt{\sin ^2(3 \phi )}\right)^{1/3}} {(-1)^{2/3}+2^{2/3} \left(i \cos (3 \phi )+\sqrt{\sin ^2(3 \phi )}\right)^{2/3}}$



    $\frac{e^{i \phi } \sqrt{i \cos (2 \phi )+\sqrt{\sin ^2(2 \phi )}}}{e^{i/2}+\sqrt{2} \left(i \cos (2 \phi )+\sqrt{\sin ^2(2 \phi )}\right)^{3/2}}$



    $\frac{e^{\frac{1}{4} i (4 \phi +\pi )}}{2 \sqrt{(-1)^{1/4} \cos (2 \phi )+\sqrt{\sin ^2(2 \phi )}}-1-i}$


    Как вы наверняка заметили, вращение вектора перестало быть равномерным — и именно из-за появления мнимой составляющей в радиусе.

    Квадрокруги и прочее


    У нашей формулы есть замечательный частный случай — квадрат, формулу для которого можно выписать как

    $\rho = \frac{2}{\sqrt{2+\sqrt{2+2 \cos (4 \phi )}}}$


    или

    $\rho = \sqrt{\frac{2}{1+\sqrt{1-\sin ^2(2 \phi )}}}$


    (выбирайте, какая больше нравится).

    В чуть более развёрнутом случае можно определить промежуточные фигуры между кругом и квадратом через точку $(k,k)$ на плоскости

    $\rho = \sqrt{\frac{2}{1+\sqrt{1-\frac{\left(2 k^2-1\right) \sin ^2(2 \phi )}{k^4}}}}$



    Можно также добавить вариативности этим фигурам с сохранением условия прохождения их через точку $(k,k)$ — модулируя непосредственно сам параметр $k$ в зависимости от угла таким образом, чтобы при прохождении через диагонали его множитель был равен единице. Например, подставив вместо $k$ функцию $\frac{k}{1-z \cos ^2(2 \phi )}$, мы получим дополнительный параметр $z$, которым можно регулировать дополнительные изгибы. В частности, для $z=1/4$ получится следующее:



    В ещё более развёрнутом случае можно определить не просто квадрат — а прямоугольник, и по прежнему в полярных координатах:

    $\rho = \sqrt{\frac{4 a^2 b^2}{\left(\left(b^2-a^2\right) \cos (2 \phi )+a^2+b^2\right) \left(\sqrt{1-\frac{4 a^2 b^2 k \sin ^2(2 \phi )}{\left(\left(b^2-a^2\right) \cos (2 \phi )+a^2+b^2\right)^2}}+1\right)}}$


    И даже посчитать его площадь (через эллиптические интегралы):

    $S=4 a b\frac{(k-1) K(k)+E(k)}{k}$

    Примечание
    Для крайних значений $k$ ($0$ и $1$) эта функция имеет особые точки, которые можно посчитать через предел и они ожидаемо будут равны $\pi a b$ и $4 a b$.

    Это позволит делать профили с переходом из окружности в прямоугольник с контролируемой площадью сечения. Здесь площадь константна:


    А здесь площадь расширяется по экспоненциальному закону:


    Переход к декартовым координатам


    Любую формулу в полярных координатах можно выразить через уравнение в декартовых координатах, причём как минимум двумя способами — в зависимости от чего будет изменяться вид градиента на границе фигуры. Для этого достаточно посчитать угол через арктангенс от координат и привести формулу к константе через радиус-вектор вычитанием

    $0=\sqrt{x^2+y^2}-\frac{\cos \left(\frac{2 \sin ^{-1}(k)+\pi m}{2 n}\right)}{\cos \left(\frac{2 \sin ^{-1}\left(k \cos \left(n \tan ^{-1}(x,y)\right)\right)+\pi m}{2 n}\right)}$


    или делением

    $1=\frac{\sqrt{x^2+y^2} \cos \left(\frac{2 \sin ^{-1}\left(k \cos \left(n \tan ^{-1}(x,y)\right)\right)+\pi m}{2 n}\right)}{\cos \left(\frac{2 \sin ^{-1}(k)+\pi m}{2 n}\right)}$


    Второй вариант предпочтительнее, поскольку даёт прямые градиенты вдоль сторон многоугольника.

    Примечание
    Здесь также нужно помнить, что в точке (0,0) возникает неопределенность из-за деления на ноль — которая, впрочем, легко разрешается через предел (который будет равным $-\cos \left(\frac{2 \sin ^{-1}(k)+\pi m}{2 n}\right) \sec \left(\frac{2 \sin ^{-1}\left(k \cos \left(\frac{\pi n}{2}\right)\right)+\pi m}{2 n}\right)$ в первом случае и нулю во втором).

    Выражение $\cos \left(n \tan ^{-1}(x,y)\right)$ также можно упростить до $\frac{(x+i y)^n+(x-i y)^n}{2 \left(x^2+y^2\right)^{n/2}}$, коэффициенты числителя которого при разложении образуют знакочередующий вариант последовательности A034839.

    Значение формулы из правой части уравнения (во 2-м случае) будет меняться от $0$ до $1$ если точка $(x,y)$ попадает внутрь фигуры, и от $1$ до бесконечности — если нет. Выбирая различные функции для преобразования её в яркость, можно получать различные варианты растеризации. Для экспоненты ($e^{-x-1}$ для первого и $e^{-x}$ для второго варианта) получим
    или, если с насыщением

    Можно использовать классический фильтр нижних частот $\frac{1}{1+x^p}$, в котором $p$ — порядок фильтра, определяющий степень затухания.

    Для первого варианта:

    И для второго:

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

    Помимо растеризации как таковой, можно задавать и деформации — например, сжать шахматную доску в круг:


    Или даже натянуть её на сферу:
    Формула

    $x=\frac{u}{\sqrt{\frac{2}{1+ \left| \frac{u^2-v^2}{u^2+v^2} \right|}}}$


    $y=\frac{v}{\sqrt{1+\frac{2}{\left| \frac{u^2-v^2}{u^2+v^2}\right| }}}$


    $z=\sqrt{1-\frac{1}{2} u^2 \left(1+\left| \frac{u^2-v^2}{u^2+v^2}\right|\right)-\frac{1}{2} v^2 \left(1+\left| \frac{u^2-v^2}{u^2+v^2}\right|\right)}$



    Appendix: как была получена формула


    Классический стиль повествования в математических текстах состоит из чередования лемм/теорем и их доказательств — как если бы доказуемые утверждения появлялись у авторов в голове откровением свыше. И хотя в этом и бывает доля истины, чаще появлению формул предшествует некоторая исследовательская работа, описание которой может дать большее понимание их смысла, чем формальное доказательство; а верность утверждений, в свою очередь, можно проследить через верность шагов, к ним приведших.

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

    1) начинаем с самого простого случая — задаче начертить прямую в полярных координатах. Для этого нужно решить уравнение $r \cos (\phi )=1$, решение которого очевидно $r\to \sec (\phi )$.


    2) далее аргумент секанса нужно «зациклить», чтобы обеспечить изломы в прямой. Именно на этом этапе другие решения используют «грязный хак» в виде остатка от деления. Здесь же используется последовательное взятие прямой и обратной функции синуса — $\sin ^{-1}(\sin (\phi ))$


    Такой подход позволяет производить стандартные математические операции над получившейся формулой,
    например
    можно её продифференцировать и получить функцию для прямоугольной волны:

    $\frac{\partial \sin ^{-1}(\sin (\phi ))}{\partial \phi }=\frac{\cos (\phi )}{\sqrt{1-\sin ^2(\phi )}}$




    Благодаря этой же записи можно упростить функцию квадрата в полярных координатах до более эстетического вида, используя представление тригонометрический функций в комплексном виде. В Wolfram Mathematica это можно сделать с помощью функций TrigToExp и ExpToTrig:

    Код
    Sec[1/2 ArcSin[k Sin[2 \[Phi]]]]^2//TrigToExp//ExpToTrig//Sqrt[#]&//FullSimplify

    $\frac{2}{\sqrt{2+2 \sqrt{1-k^2 \sin ^2(2 \phi )}}}$


    Благодаря этой же записи можно получить гладкие промежуточные фигуры между кругом и квадратом с помощью дополнительного множителя $k$, благодаря которому аргумент арксинуса не дотягивает до единицы — $\sin ^{-1}(k \sin (\phi ))$:


    А для того, чтобы функция пересекала заданную точку, нужно просто составить уравнение и пересчитать $k$:

    $\sqrt{\frac{2}{1+\sqrt{1-k' \sin ^2( \frac{\pi}{2} )}}}=k$


    Код
    Solve[(Sqrt[2/(1+Sqrt[1-k Sin[2 \[Phi]]^2])] /. \[Phi]->Pi/4)==x, k] /. x->k

    $k'\to \frac{4 \left(k^2-1\right)}{k^4}$



    3) параметры $n$ и $m$ были просто добавлены творческим способом и их влияние исследовалось экспериментально, по факту.

    4) Прямоугольник легко получить перейдя к параметрическому виду и «растягиванием» осей

    $x=a \cos (t) \sqrt{\frac{2}{1+\sqrt{1-\sin ^2(2 t)}}}$


    $y=b \sin (t) \sqrt{\frac{2}{1+\sqrt{1-\sin ^2(2 t)}}}$


    Но после этого $t$ уже не будет значить угол, теперь $t$ — это просто параметр, который описывает вектор через его проекции на координатные оси. Чтобы перейти обратно к полярным координатам нужно найти длину вектора (через корень суммы квадратов), угол (через арктангенс отношения), выразить этот угол через $\phi$ и подставить получившееся выражение вместо $t$.

    Код
    With[{r = Sqrt[2/(1 + Sqrt[
    1 - Sin[2 t]^2])]}, {Sqrt[(a r Cos[t])^2 + (b r Sin[t])^2],
    ArcTan[(b r Sin[t])/(a r Cos[t])]}] // Simplify

    $\left\{\sqrt{2} \sqrt{\frac{a^2 \cos ^2(t)+b^2 \sin ^2(t)}{\sqrt{\cos ^2(2 t)}+1}},\tan ^{-1}\left(\frac{b \tan (t)}{a}\right)\right\}$



    Solve[ArcTan[(b Tan[t])/a]==\[Phi], t]

    $t\to \tan ^{-1}\left(\frac{a \tan (\phi )}{b}\right)$



    Sqrt[2] Sqrt[(a^2 Cos[t]^2 + b^2 Sin[t]^2)/(1 + Sqrt[Cos[2 t]^2])]
    /. t -> ArcTan[(a Tan[\[Phi]])/b] // Simplify



    $\sqrt{2} \sqrt{\frac{a^2 b^2 \sec ^2(\phi )}{\left(a^2 \tan ^2(\phi )+b^2\right) \left(\sqrt{\cos ^2\left(2 \tan ^{-1}\left(\frac{a \tan (\phi )}{b}\right)\right)}+1\right)}}$


    Упростить такую формулу уже посложнее, и для этого потребуется несколько этапов:

    1. перейти к декартовым координатам заменой $\phi \to \tan ^{-1}(x,y)$;
    2. перейти к экспоненциальному виду;
    3. упростить;
    4. сделать обратную замену $x\to \cos (\phi )$ и $y\to \sin (\phi )$;
    5. опять перейти к экспоненциальному виду;
    6. упростить.

    В результате получим такую формулу:

    Код
    Sqrt[2] Sqrt[(a^2 b^2 Sec[\[Phi]]^2) /
    ((1 + Sqrt[Cos[2 ArcTan[(a Tan[\[Phi]])/b]]^2])
    (b^2 + a^2 Tan[\[Phi]]^2))] /. \[Phi] -> ArcTan[x, y]
    // TrigToExp // Simplify
    // # /. {x -> Cos[\[Phi]], y -> Sin[\[Phi]]} &
    // TrigToExp // Simplify // FullSimplify

    $2 \sqrt{\frac{a^2 b^2}{\left(\left(b^2-a^2\right) \cos (2 \phi )+a^2+b^2\right) \left(1+\sqrt{\frac{\left(\left(a^2+b^2\right) \cos (2 \phi )-a^2+b^2\right)^2}{\left(\left(b^2-a^2\right) \cos (2 \phi )+a^2+b^2\right)^2}}\right)}}$





    Заключение


    Как видите, даже в такой простой и банальной вещи как многоугольник, можно найти и придумать что-то новое. И на этом история не заканчивается — осталась неизвестной формула площади для общего случая, осталась неизвестной формула для произвольного, а не только правильного многоугольника, остались без рассмотрения разложения в степенные и тригонометрические ряды. Также, вероятно, подобного рода формула существует и для 3-мерного случая.

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

    P.S. скачать оригинальный документ для Mathematica можно здесь.

    Средняя зарплата в IT

    111 111 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 6 720 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 31

      +4
      Какая-то красота есть не только в анимации, но и в самых формулах. Я, правда, довольно далек от математики, но стало интересно — а какой программой (математическим пакетом) создаются все эти визуализации?
        +2
        Здесь всё сделано в Wolfram Mathematica, чуть позже выложу исходник. Но есть куча и других инструментов, и даже в пиксельных шейдерах народ умудряется графики рисовать.
        +2
        Увлекательно. Видно, что изучение этой темы вам доставляет большое удовольствие. Продолжайте в том же духе.
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            Спасибо, очень полезная статья! Недавно сам ковырял построения в полярных координатах эмпирическим путём — через преобразование изображения в графическом редакторе и подбор аппроксимирующей функции в декартовых координатах.
              0
              Спасибо. Интересный пост.
                0

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


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


                Хорошо бы конечно еще поворачивать в пространстве прямоугольник или окружность?

                  0
                  Можно нормализовать и по периметру, только мне не удалось найти для него аналитическое решение. А численно — легко:


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

                  Ну и поворачивать в пространстве конечно же тоже можно по-всякому, только сначала нужно с траекторией определиться.
                    0

                    Если нормализовать периметр, заготовка будет прямоугольником.
                    Если в САПР задать переход поверхности с многоугольника на окружность, причем периметр окружности и многоугольника равны, то развертка получается нормальная, без разрывов.


                    В скрученном квадрате развертку невозможно получить.


                    Про соединение кривых в пространстве.


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


                    Если получить промежуточные сечения, это может облегчить проектирование и не сильно напрягать САПР.
                    Есть две замкнутые кривые в пространстве, получили промежуточные сечения для переходной поверхности и эту поверхность всегда можно учесть при взаимодействии в сборке.
                    От САПР требуется только задать исходные замкнутые кривые и нарисовать готовое.


                    Могут сказать что это "Красная кнопка". Просто это решенная задача, а не ждать пока в "Розовом меню" появится нужная команда.

                  +10

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

                    0
                    Слушайте математики, вот у меня есть дурацкая задачка, решение которой в простом и доступном виде не существует, — надеюсь все знают что такое термоусадка? Так вот она поставляется в сплющенном виде, — не трубочкой а плоской полосой. Так вот, — правда что зная ширину такой вот сплющенной трубочки, невозможно установить радиус или диаметр окружности, которая выйдет, если ее расплющить? :)
                      +4
                      Мне почему-то кажется, что ширина «сплющенной» трубочки в идеальном случае будет равняться половине длины получившейся окружности.
                        0

                        Это вопрос не по математике, а по сопромату — насколько возможно сплющить эту самую трубочку с сохранением прочности. В идеальном случае — как уже отметил комментатор выше, длина окружности будет с одной стороны 2piR, с другой 2*h, т.е. R = h/pi. Но реальный случай будет далёк от идеального, банально в силу того, что трубка со стенками правдоподобной толщины при деформировании до плоской фигуры претерпевала бы деформации, намного превосходящие предел текучести материала (а возможно, и предел прочности).

                          +1
                          На самом деле это еще вопрос, получают ли плоскую термоусадку изначально круглой.
                            0
                            Должна быть круглая, экструзия самый удобный способ производства, но перевозить воздух в пустой круглой термоусадке невыгодно, поэтому почти наверняка её сразу после эструзии ещё тёплую плющат. Некоторые производители продают круглую, толстая наверно всегда круглая.
                            Ещё она пластичная и при нагреве усаживается в два раза.
                              0
                              Возможно, я заблуждаюсь, но кмк, термоусадку сначала делают той формы и размера, в которые она должна усаживаться, а потом растягивают. То есть, при нагреве она не усаживается, а возвращает форму.

                              Эффект можно наблюдать на многих материалах типа ПВХ изоляции проводов и тд. В некоторой степени проявляется на полиэтиленовых трубах для теплого пола — если труба растянута на холодную, можно вернуть ее к исходному, опустив в кипяток. Большинство массово доступных термоусадок это как раз ПВХ.
                                +1
                                Похоже, Вы правы, растягивают, причём до смешного просто и технологично — раздуванием.
                                А вот сама технология производства материала удивила и не сказать чтобы приятно — материал трубки либо подвергают воздействию гамма-лучей (чаще), либо травят несмешными кислотами (дороже и вреднее), в результате молекулы материала сшиваются и приобретают пластичность.
                                  0
                                  до смешного просто и технологично — раздуванием.
                                  Звучит оно просто, но на выходе мы часто имеем шланг в десятки и сотни метров, так что я не могу похвастяться, что до конца понимаю технологию.

                                  Но исходный пойнт в том, что размеры и форма термоусадки в магазине не связаны с таковыми у изначально изготовленной трубки примерно никак. Точнее, не обязаны быть связаны.
                                    +1
                                    А знаете как формируют радиатор для кондиционера? Который медная трубка с нанизанными тонкими алюминиевыми рёбрами?
                                    В медную трубку под давлением в 50 атмосфер загоняют стальной шарик подходящего диаметра. Трубка может быть довольно длинной, по мере прохода шарика укорачивается, обжимая алюминий. Гениально!
                                      0
                                      Странно, что он не рвется при том, что рассчитан на рабочее давление атмосфер в 8, вроде.
                                        0
                                        Ну трубки потом режут, паяют. Медь ведь пластична, в отличие от швов.
                                  +2

                                  Обычные бутылки для воды тоже усаживаются. Их наверно как раз раздувают при производстве.

                                    +4
                                    Да. А до этого они выглядят так
                                    image
                            0
                            Для практических результатов достаточно формулы d=w*2/Pi. На самом деле надо бы вычесть толщину стенки (ширину ленты измеряем-то мы снаружи, а вставляем кабель внутрь), но надо еще прибавить к ширине ленты из-за того, что идеально её сжать не получается. Эти две ошибки друг друга компенсируют. Причем чем толще стенка, тем сложнее её сжать до плоского состояния. Вот сейчас прям заморочился и на пяти термоусадках посчитал по этой формуле и подобрал подходящий диаметр калибра. Ошибка на термоусадках с тонкой стенкой получилась в пределах 0,1мм. Для толстостенной трубки эта формула завышает диаметр до 0,5мм (причем только на малых диаметрах). Измерялось на термоусадках от 2х до 12мм.
                            0
                            Спасибо. С Вашего позволения, буду с удовольствием в преобразовании Хафа.
                              0

                              Красиво. А как будет выглядеть натянутая сова?

                                0

                                У кого получилось пятиконечную звезду одним циркулем нарисовать?

                                  +2
                                  Ха, пятиконечную! Правильный семнадцатиугольник не хотите ли? ЕМНИП была статья на Хабре, не нахожу что-то. Автор построения — Йоханнесс Эрхингер — завещал на своей могиле начертать. Подрядчик сэкономил и начертал шестнадцатиконечную. Если не видно разницы — зачем больше корячиться?

                                  построение Эрхингера
                                0
                                спасибо за красивые картинки

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое