Алгоритм сглаживания шероховатого многоугольника с помощью Безье с помощью C

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

0

Решение

Я не понимаю ваше приложение, но я отвечу на вопрос о том, как сопоставить две кривые Безье:
Если у вас есть две кривые Безье с контрольными точками (A1, A2, .., AN-1, AN) и (B1, B2, .., BN-1, BN) и вы хотите сопоставить конец A с началом B, сначала вы должны убедиться, что AN = B1 (например, установив оба параметра в (AN + B1) / 2).

Чтобы сделать его тангенциально непрерывным, AN-1, (AN / B1), B2 должны находиться на прямой.
Направление линии можно найти путем усреднения направлений последнего сегмента A и первого сегмента B: d = ((AN — AN-1) + (B2 — AN)) / 2.

В 2D:
Переставьте AN-1 и B2, найдя пересечение линии (AN, d) с линиями (AN-2, AN-1) и (B2, B3) соответственно.
Для 3D вам может потребоваться пересечь линию с плоскостью, которая построена из (B2, B3) и третьей точки, найденной путем вычисления перекрестного произведения (B2-B3) и d.

0

Другие решения

Других решений пока нет …