Таким образом, я предполагаю, что конечные точки фиксированы, а затем у вас есть несколько (x, y) точек выборки, которые вы хотите поместить в кубический Безье.
Количество выборок, которые у вас есть, определит, какой подход принять. Давайте посмотрим через несколько случаев:
2 очка
2 точек выборки простейший случай. Это дает вам всего 4 балла, если вы считаете конечные точки. Это число CV в кубическом Безье. Чтобы решить эту проблему, вам нужно значение параметра (t) для обеих точек выборки. Тогда у вас есть система из двух уравнений и 2 точек, которые вам нужно решить, где уравнение является параметрическим уравнением кривой Безье по выбранным значениям t.
Значения t могут быть любыми, как вам нравится, но вы получите лучшие результаты, используя либо 1/3, либо 2/3, или глядя на относительные расстояния или относительные расстояния вдоль базовой линии, в зависимости от ваших данных.
1 точка
Это похоже на 2 очка, за исключением того, что у вас недостаточно информации, чтобы однозначно определить все степени свободы. Я бы предположил, что он должен соответствовать квадратичному Безье, а затем повысить степень. Я написал подробный пример квадратичного монтажа в this question.
Более 2 балла
В этом случае, существует не единственное решение. Я использовал аппроксимацию наименьших квадратов с хорошими результатами. Шаги:
- Пика т значения для каждого образца
- Построить систему уравнений в виде матрицы
- По желанию добавить обтекатель или некоторые другие функции сглаживания
- Решить матрицу с методом наименьших квадратов решателя
Существует хорошее описание этих шагов в этом free cagd textbook, глава 11. это говорит о установке би-сплайнов, а кубический Безье является разновидностью би-сплайн (узел вектор 0,0,0, 1,1,1 и имеет 4 балла).
Спасибо за быстрый ответ. Я думал, что алгебра, вероятно, потребуется, но это может стать немного непристойным, если кривая может иметь тысячи очков. Я попытаюсь разбить большие кривые на более мелкие кривые и применить двухточечный метод. В случае, если это не сработает, я дам более двух пунктов попробовать попытку! – Everlag
Если точность кривой не имеет особого значения, вы можете попробовать просто выбрать две точки и сделать метод с двумя точками .. :) – tfinniga
Я стремлюсь к приличному отдыху ребер, изолированных с оператором sobel, поэтому точность была бы очень гораздо предпочтительнее. – Everlag