Pull to refresh

Comments 12

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

В таком случае зайду с козырей и порекомендую кусочно-линейные как ещё более простые.

Кусочно-линейные не обладают свойством гладкости.

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

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

Ну, вообще-то, когда речь о кривой, гладкость - свойство по умолчанию.

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

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

при большом количестве точек хватит прямых линий

Вот и пошёл разговор о других условиях, которых не было в исходной задаче.

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

Но здесь же очевидно, что речь идёт о небольшом числе точек.

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

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

Конечно, можно и кривые больших степеней для этого использовать, но зачем?

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

Пример

Просто о ней мало кто знает, даже википедия.

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

Это ограничение из-за численной неустойчивости и резко возрастающих пульсациях при увеличении порядка. Барицентрическая интерполяция решает обе этих проблемы. Для эксперимента я брал 10000 точек, т.е. полином 10000-й степени, и всё норм считалось в самых обычных double-ах.

Да нет, это зависит от того, для чего мы делаем. Кривые Безье могут быть "из коробки", а свой полином - самому реализовывать придётся.

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

Тут дело не только в простоте

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

Sign up to leave a comment.

Articles