При построении графиков по математическим формулам, особенно если они заданы в полярных координатах или в параметрической форме в окрестностях некоторых точек они могут существенно искажаться. Обычно это происходит вблизи точки O с координатами 0;0, потому что ошибка округления в районе этой точки имеет такой же порядок или даже выше, что и значения функции. Но есть и вторая причина этого — для некоторых функций 0 является пограничной точки, то есть с одной стороны нуля, как правило, с положительной функция определена, а с другой, как правило отрицательной — неопределенна. Примером такой функции является квадратный корень.
В некоторых случаях это преодолевается с помощью математических выкладок, чтобы на всем промежутке функция была определена. Хотя этот способ имеет ряд недостатков:
Не является универсальным
Не для всех функций дает желаемый результат
Бывает чрезвычайно сложно найти требуемые уравнения функции.
Но мы все‑таки рассмотрим этот теоретический способ на примере построения кривой Лемниската Бернулли, которая очень напоминает лежащую восьмерку или знак бесконечности.
Как известно, Лемниската Бернулли в полярных координатах имеет следующее уравнения:
Для построения программы была использована программа моей разработки, написанная на языке C# по технологии NET WPF, использующая две сторонних библиотеки mXparser и OxyPlot. На данный момент программа может строить графики явных функций и кривые, заданные параметрическими уравнениями.
Любое уравнение кривой в полярных координатах можно записать в декартовых в параметрической форме. Пусть функция задана в полярных координатах следующем уравнением:
где ρ — полярный радиус, а φ‑полярный угол
Тогда данное уравнение можно записать в декартовой системе координат можно записать в параметрической форме следующим образом:
Однако надо помнить компьютер строит любое изображение в декартовой системе координат. Даже если мы не переводим явно преобразование полярные координаты в декартовые, то внутри программы такое преобразование все равно происходит. И это может вызвать артефакты на графике.
Но прежде запишем для Лемнискаты Бернулли параметрические уравнения для декартовой системы координат:
Ниже приводится график, который построен по этим формулам по 100 точкам:

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

Можно и дальше увеличивать число точек, и наш график будет все ближе и ближе приближаться к истинной лемнискате Бернулли, но это увеличивает объемы требуемых расчетов для построения графиков и требуемую память для хранения массива точек в ОЗУ.
Но мы можем поступить хитрее и разработать принципиально другую математическую модель для данной кривой, которая будет лишена указанных недостатков. Но для этого нам придется сделать несколько математических выкладок.
Прежде, чем выполнить их запишем уравнение лемнискаты Бернулли в полярных координатах немного в другом виде:
И соответственно в декартовой системе координат оно запишется следующей системой параметрических уравнений:
или
Если сложить уравнения в последней системе, то получим:
или
Чтобы исключить из последнего выражения переменную φ, используем формулы перевода декартовых координат в полярные:
Подставив эти формулы в последнее уравнение лемнискаты Бернулли и сделав несложные арифметические преобразования получим уравнение данной кривой в декартовой системе координат:
Данное уравнение является неявным уравнением Лемнискаты Бернулли. Из него довольно сложно вывести зависимость одной декартовой координаты от другой. Чтобы это легче было сделать, сделаем следующую подстановку y=x·t
Данное уравнение легко решить относительно x:
И соответственно для у мы получим:
Последние два выражения определены, если t принадлежит отрезку [-1;1]
Они являются параметрическими уравнениями правой половины лемнискаты Бернулли. Чтобы построить левую половину достаточно x взять со знаком минус.
Данная математическая модель лучше исходной по следующим причинам:
Мы избавились от тригонометрических функций, которые являются основным источником ошибки округления.
Свели отрезок аргумента к отрезку [-1;1];
Данный график был построен по последней математической модели.

Данная кривая наиболее похожа на лемнискату Бернулли.

