贝塞尔曲线python的递归函数

问题描述 投票:0回答:2

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

这是我所做的算法:

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) ]

我如何知道我的功能是否正确?

python recursion bezier
2个回答
4
投票

看起来正确;您可以在某些点集上尝试,看看行为是否符合您的预期(即,对于沿 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])

0
投票

由于各种原因而遭遇失败。

© www.soinside.com 2019 - 2024. All rights reserved.