Кривые Безье всегда проходят через начальную и конечную контрольные точки.
Если степень кривой равна количеству точек выборки, то будет только одна кривая, которая пройдет через все ваши точки (в обычном случае, когда все точки разные и они не лежат на кривой Безье меньшей степени).
Если степень кривой меньше числа точек выборки, то, в общем случае, вы не сможете заставить кривую пройти через все точки (в обычном случае).
Если степень кривой выше, чем количество точек выборки, то, в общем случае, вы сможете нарисовать бесконечное количество кривых.
В вики-статье вы найдете ссылки только на контрольные точки, но тем не менее я считаю, что я правильно помню вышеупомянутые свойства и что они справедливы и для точек на кривых.
Я думаю, вам нужно переопределить свой вопрос и точно определить, какой тип кривых (и какой степени) вам нужен. Также, как указал Георг, вы можете искать пути - комбинацию кривых.
РЕДАКТИРОВАТЬ: сначала коррекция - кривая определяется с помощью степени плюс одно количество контрольных точек точек (для квадратичных требуется три). Контрольные точки — это не то же самое, что точки на кривой — и для трех точек на кривой и квадратичной кривой у вас может быть бесконечное количество решений (см. pdf" rel="nofollow noreferrer">это для квадратичной кривой и четырех точек)
Что касается решения (но все еще при условии, что вы смотрите на одну кривую):
Для уравнения одной квадратичной кривой у вас есть
B(t) = (1-t)^2*P0 + 2*(1-t)*t*P1 + t^2*P2
Заглавные буквы выше — это векторы, и P0 соответствует начальной контрольной точке (первой точке), P2 соответствует конечной контрольной точке (последней точке), поэтому вам все равно нужно найти P1. Переменная t является скалярной и принимает значения от 0 до 1.
При работе с 2D-кривыми приведенное выше векторное уравнение дает два скалярных уравнения для каждой точки кривой.
Все еще есть t как неизвестное, поэтому вы должны взять еще 2 точки (всего 4), которые дадут вам 4 неизвестных (t для первой точки, t для второй точки, x и y P1, средняя контрольная точка) и 4 уравнение для решения (по 2 из каждой точки выборки).
Решите это с помощью вашего любимого численного метода, и вы получите исходную кривую, на которой были взяты точки.
Если вы все еще думаете, что можете получить больше кривых и что вам придется что-то выбирать, то вы работаете не с кривыми Безье, а с сплайны Безье (в смысле соединения нескольких кривых). Применяется тот же принцип, и если вы найдете способ решения одной кривой из приведенных выше уравнений (и если у вас достаточно точек), вы можете разделить задачу на n-сегменты реальных кривых Безье и решить каждый, как описано выше.
Если окажется, что у вас недостаточно баллов, посмотрите ссылку на статью. еще раз - вы, вероятно, ищете самую гладкую кривую, и в статье есть несколько предложений о том, как ее получить, поскольку поиск точного решения (самая короткая кривая / самая гладкая кривая) кажется довольно сложным.
person
Unreason
schedule
14.06.2010