Контур обводки кубической кривой Безье - PullRequest
14 голосов
/ 03 января 2009

Под штрихом кубической кривой Безье я имею в виду визуализацию кривой «А» с определенной шириной линии «w».

Как я могу получить другие кубические кривые Безье, которые описывают контур хода Безье 'A'?

Ответы [ 3 ]

17 голосов
/ 03 января 2009

Оооо. Вы хотите получить кривые смещения кривой Безье.

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

Хотя есть некоторые приближения. Лучший подход, который я когда-либо читал, - это статья Томаса Ф. Хейна ( Быстрое, точное сглаживание кубической траектории Безье и кривых смещения ).

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

Для лучшего понимания, возможно, вы захотите прочитать и другие его статьи, связанные с Безье.

4 голосов
/ 01 июня 2010

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

0 голосов
/ 20 августа 2017

Точно так же, как другие объяснили, очень сложно. Кривая смещения не является кубическим Безье и очень трудноразрешима. Тогда вогнутости, которые глубже смещения, вызывают проблемы пересечения.

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

Некоторый код здесь можно использовать в качестве эталонной реализации: https://github.com/memononen/nanosvg

...