【问题标题】:How to find knot vector if control points are known for a NURBS curve?如果 NURBS 曲线的控制点已知,如何找到节点向量?
【发布时间】:2018-03-14 01:12:30
【问题描述】:

我有一组控制点

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中会更好

【问题讨论】:

    标签: python curve-fitting bspline nurbs basis


    【解决方案1】:

    结向量(均匀与否)是 NURBS 曲线定义的一部分。因此,只要节点向量遵循基本规则,您实际上可以定义自己的非均匀节点向量:

    1) # 节点值 = # 控制点 + 顺序

    2) 所有节点值必须是非递减的。即,k[i]

    对于具有 9 个控制点的示例,您可以使用非均匀节点向量,例如 [0, 0, 0, 0, a, b, c, d, e, 1, 1, 1, 1],其中 0.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多