Как найти вектор узла, если контрольные точки известны для кривой NURBS?
У меня есть набор контрольных точек
pts = [[849, 1181],
[916, 1257],
[993, 1305],
[1082,1270],
[1137,1181],
[1118,1055],
[993,1034],
[873,1061],
[849, 1181]]
У меня есть логика для генерации вектора открытого узла:
/*
Subroutine to generate a B-spline open knot vector with multiplicity
equal to the order at the ends.
c = order of the basis function
n = the number of defining polygon vertices
nplus2 = index of x() for the first occurence of the maximum knot vector value
nplusc = maximum value of the knot vector -- $n + c$
x() = array containing the knot vector
*/
knot(n,c,x)
int n,c;
int x[];
{
int nplusc,nplus2,i;
nplusc = n + c;
nplus2 = n + 2;
x[1] = 0;
for (i = 2; i <= nplusc; i++){
if ( (i > c) && (i < nplus2) )
x[i] = x[i-1] + 1;
else
x[i] = x[i-1];
}
}
И еще один для генерации периодического вектора узла:
/* Subroutine to generate a B-spline uniform (periodic) knot vector.
c = order of the basis function
n = the number of defining polygon vertices
nplus2 = index of x() for the first occurence of the maximum knot vector value
nplusc = maximum value of the knot vector -- $n + c$
x[] = array containing the knot vector
*/
#include <stdio.h>
knotu(n,c,x)
int n,c;
int x[];
{
int nplusc,nplus2,i;
nplusc = n + c;
nplus2 = n + 2;
x[1] = 0;
for (i = 2; i <= nplusc; i++){
x[i] = i-1;
}
}
Однако мне нужно сгенерировать неоднородный вектор узла в диапазоне [0,1]
Вышеуказанные алгоритмы приводят к однородным векторам узлов.
Просьба предложить, если есть какой-либо способ сделать это. Было бы предпочтительнее, если код на Python
1 ответ
Вектор узла (равномерный или нет) является частью определения кривой NURBS. Таким образом, вы можете определить свой собственный неоднородный вектор узла, если вектор узла следует основным правилам:
1) количество значений узлов = количество контрольных точек + порядок
2) Все значения узлов должны быть неубывающими. А именно, k[i] <= k[i+1].
Для вашего примера с 9 контрольными точками у вас может быть неоднородный вектор узла, такой как [0, 0, 0, 0, a, b, c, d, e, 1, 1, 1, 1], где 0.0