Bezier曲线python的递归函数

时间:2013-12-02 18:11:28

标签: python recursion bezier

我被要求设计一个名为Bezier的递归函数,其中参数是给定的点列表,以及必须评估的点t。它返回由点列表的控制点定义的贝塞尔曲线中的点。

这是我所做的算法:

def Bezier(point_list, t):
    if len(point_list)==1:
        return point_list[0]
    else:
        P1=Bezier(point_list[0:-1],t)
        P2=Bezier(point_list[1:],t)
        P=(1-t)*P1 + t*P2
        return P

这是给出的分数列表:

point_list=[ (0,0), (10,-1), (13,5), (-7,8), (2,2) ]

我怎么知道我的功能是否正确?

1 个答案:

答案 0 :(得分:2)

看起来不错;您可以在某些点上尝试它,看看行为是否符合您的预期(即对于沿x = 0,y = 0或x = y的控制点,所有结果点应该沿着同一条线放置)。

你也可以利用镜像;即对于所有t,Bezier([a, b, c], t) == Bezier([c, b, a], 1.-t)。如果您的结果没有显示此行为,那么您的功能可能不正确。

如果我尝试运行代码,我会得到一个TypeError,试图将一个元组乘以一个浮点数;您可能需要扩展该代码,即

def Bezier(point_list, t):
    if len(point_list)==1:
        return point_list[0]
    else:
        P1=Bezier(point_list[0:-1], t)
        P2=Bezier(point_list[1:], t)
        nt = 1. - t
        return (nt * P1[0] + t * P2[0], nt * P1[1] + t * P2[1])