Понимание алгоритма глобальной аппроксимации кривой - PullRequest
0 голосов
/ 25 октября 2019

Описание проблемы

Я пытаюсь понять и реализовать глобальную аппроксимацию кривой, как предлагается здесь:

https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/INT-APP/CURVE-APP-global.html

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

https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-curve-coef.html

У меня проблемы с наведением головы на некоторые детали.

  1. Сначала возникли проблемыс переменной номенклатурой. В частности, меня смущает тот факт, что в качестве параметра функции ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D), а также вход и ![u_0 - u_k](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bfoo%7D). В настоящее время я предполагаю, что сначала я решаю, сколько векторов узлов я хочу найти для моего приближения. Допустим, я хочу 10. Итак, мои параметры:

enter image description here

Я предполагаю, что это входной параметр ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D) в алгоритме расчета коэффициента?

Причина, по которой это ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D) сбило меня с толку, заключается в следующем предложении:

Пусть u находится в пределах узла enter image description here

Если входной параметр ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D) был одним из элементов вектора узла ![u_0 - u_k](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bfoo%7D), то былнет необходимости в интервале. Поэтому я предполагаю, что ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D) на самом деле является одним из этих элементов (enter image description here?), Определенных ранее:

enter image description here

Это предположение верно?

Самый важный вопрос. Я пытаюсь заставить свой N работать с первой из двух ссылок, , то есть , реализацией Global Curve Approximation . Когда я смотрю на размеры матрицы (где упоминаются размеры P, Q, N), кажется, что N должен иметь n строк и h-1 столбцов. Это означает, что N имеет строки, равные количеству точек данных, и столбцы, равные степени кривой минус один. Однако, когда я смотрю на детали реализации N во второй ссылке, строка N инициализируется элементами n . Я имею в виду следующее:

Инициализировать N [0..n] в 0;// инициализация

Но мне также нужно рассчитать N для всех параметров ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D), которые соответствуют моим параметрам enter image description here, которые в свою очередь соответствуютточки данных. Таким образом, полученная матрица имеет размерность ( n x n ). Это не соответствует ранее упомянутому ( n x ( h - 1 ) ).

Чтобы пойти дальше, в ссылке, описывающей алгоритм аппроксимации, N используется для вычисления Q. Однако непосредственно после этого меня просят вычислить N, которое, якобы, у меня уже было, как еще я бы рассчитал Q? Это даже тот же N? Нужно ли мне вычислять новый N для желаемого количества контрольных точек?

Заключение

Если у кого-нибудь есть полезная информация по этому вопросу - пожалуйста, поделитесь. Я стремлюсь реализовать это, используя C ++ с Eigen для его полезности по для решения M * P = Q и матричных вычислений. В настоящее время я в растерянности, хотя. Все кажется более или менее ясным, за исключением N и особенно его размеров и того, нужно ли его вычислять несколько раз или нет.

Дополнительные носители

calculation of N


Calculate approximating curve

На последнем изображении предполагается, что "[...] использовалось ранее при вычислении Q"

1 Ответ

1 голос
/ 26 октября 2019

Во 2-й ссылке рассказывается, как вычислить базисную функцию кривой B-сплайна для параметра u, где кривая B-сплайна определяется его степенью, вектором узла [u0, ... um] и контрольными точками. Итак, для вашего первого вопроса, если вы хотите иметь 10 узлов в вашем векторе узлов, то типичный вектор узлов будет выглядеть так:

[0, 0, 0, 0, 0.3, 0.7, 1, 1, 1, 1]

Это будет кривая B-сплайна степени 3 с 6 контрольными точками.

Для вашего второго вопроса входной параметр u обычно не является одним из узлов [u0, u1, ... um]. Входной параметр u - это просто параметр, по которому мы хотели бы оценить кривую B-сплайна. Значение u на самом деле изменяется от 0 до 1 (при условии, что диапазоны вектора узлов также составляют от 0 до 1).

Для ваших 3-х вопросов N (в первой ссылке) представляет собой матрицу, где каждый элемент этой матрицы представляет собой Ni, p (tj). Итак, в основном массив N [], вычисленный по 2-й ссылке, на самом деле является вектором строки матрицы N в первой ссылке.

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

...