БлогNot. Почему графики рвутся на краях...

Почему графики рвутся на краях...

Мизантропия, простуда. :)

На самом деле, ни единого разрыва в том же овале Кассини нет, но поскольку формула определена с точностью до знака и под квадратным корнем могут оказаться отрицательные числа, то независимо от того, строим ли мы только "половинку" кривой, а вторую попиксельно "переворачиваем" (как в приложенном скрипте) или рисуем отдельно обе кривых, во многих случаях на стыках "половинок" будут разрывы, и не только в этой конкретной задаче и не только при "ручном" программировании, но и в готовых продуктах:

Овал Кассини в Mathcad Prime, верхняя кривая выделена
Овал Кассини в Mathcad Prime, верхняя кривая выделена

Разрывы на графике Mathcad неудивительны, ведь y1(-3,2,2)=y1(3,2,2)=0.592i, то есть, комплексное число с нулевой действительной частью. Но даже уточнив область определения функции и проверками условий избегая мнимостей, как сделано в приложенном скрипте, а также ставя в код разного рода костыли (что само по себе плохо), связанные с отдельным учётом разрывов (см. закомментированный блок "хвосты" в коде - он лишь создаст дополнительные дефекты отрисовки), мы редко можем избежать проблем при некоторых значениях параметров, особенно если таковых больше одного.

В общем случае не поможет, а скорее усугубит проблемы и уменьшение шага - сколько не мельчи, а в "физическом" шаге меньше пикселя особого смысла нету.

Иногда может помочь математический анализ функции, но в общем случае мы всё равно упрёмся в неизбежные дефекты дискретизации непрерывного по своей природе отображения.

Максимум, что нам светит - симметрия, но не непрерывность.

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

 Открыть скрипт Cassini в текущем окне/вкладке, исходник виден из исходника страницы (4 Кб)

Скрипт "Кассини" из сети - реализация другая, а проблемы те же
Скрипт "Кассини" из сети - реализация другая, а проблемы те же

P.S. Зато поиздевавшись над параметризацией уравнения, можно получать стильные "восьмёрки", это и будем считать итогом заметки. :(

"Восьмёрка" из параметризованного овала Кассини
"Восьмёрка" из параметризованного овала Кассини

 Документ .mcdx Mathcad Prime 7 и выше с этим расчётом (13 Кб)

16.09.2023, 16:34 [231 просмотр]


теги: графика javascript числа ошибка математика mathcad

К этой статье пока нет комментариев, Ваш будет первым