Подтвердить что ты не робот

Контур кривой кубической кривой безье

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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