尝试计算B样条时出现生涩的错误

时间:2018-12-15 19:10:24

标签: python math graphics geometry bspline

我正在尝试在python中实现B样条算法以进行研究,但是我做错了。

对于1级(2级)B样条曲线,我可以毫无问题地进行绘制,结果:

enter image description here

但是对于2度(3阶)B样条曲线,我会生成很多奇怪的抖动产物:

enter image description here

我试图在python中实现它的方法是:

def p_curve(knots, points, t):
    #Initialize
    assert(len(knots)==len(points))
    point_num = len(points)
    degree = 2
    if len(points) <= degree:
        return points[0]
    index = 0
    # Extend knot sequence
    k = knots.copy()
    for i in range (0, degree):
        k += [k[len(k)-1]]
        k = [k[0]] + k
    # Find containing interval
    while not(t>= k[index] and t < k[index+1]):
        index += 1
    if index >= len(points):
        index = -1

    old_list = []
    for i in range(0, degree + 1):
        old_list += [points[index-i]]

    for r in range(degree+1, 1, -1):
        i=index
        for s in range(0, degree):
            omega = (t - k[i]) / (k[i+degree] - k[i])
            old_list[s] = omega * old_list[s] + (1-omega)*old_list[s+1]

    return old_list[0]

尝试实现此伪代码: enter image description here

我试图查看问题是否出在结序列,点的顺序或类似的问题上,但是,我在结序列的开始和结束处附加了与度数相等的额外结,例如[度2的0,1,2]变为[0,0,0,1,2,2,2]。我还验证了分数的正确性。

但是,我找不到生涩的错误的根源。看来我计算的间隔索引错误。

0 个答案:

没有答案