Простой алгоритм для искривления линии

Я ищу простой алгоритм для искривления линий (так же, как инструмент свободной формы фейерверков).
В моей программе на C ++ линия — это набор упорядоченных точек, каждая точка имеет форму (x, y).
Предположим, у меня есть прямая линия из 5 (просто для простоты) упорядоченных точек (линия не обязательно параллельна какой-либо оси). Я зажимаю третью точку и перетаскиваю ее вверх. Я ожидаю получить новую, похожую на Гауссу, изогнутую линию. На самом деле не имеет значения, как я реализую «Точки» и «Линии», но имейте в виду, что я должен добавить больше точек к новой ожидаемой линии, чтобы она была изогнутой, уточненной и плавной (а не с разрывами линий).
Я думал об использовании гауссовской функции, но мне нужна способность перемещать изогнутую часть (см. Рисунок ниже).

Заранее спасибо!

На фиг.1-3 описан процесс

1

Решение

Тебе необходимо B-сплайн или кривая Безье, чтобы приблизиться к вашей форме.

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

Безье

В зависимости от вашей операционной системы и среды разработки, возможно, уже имеется несколько инструментов или API.

4

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

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