在本次作业中,你需要实现 de Casteljau 算法来绘制由 4 个控制点表示的 Bézier 曲线 (当你正确实现该算法时,你可以支持绘制由更多点来控制的 Bézier 曲线)。
• bezier:该函数实现绘制 Bézier 曲线的功能。它使用一个控制点序列和一个 OpenCV::Mat 对象作为输入,没有返回值。它会使 t 在 0 到 1 的范围内进 行迭代,并在每次迭代中使 t 增加一个微小值。对于每个需要计算的 t,将 调用另一个函数 recursive_bezier,然后该函数将返回在 Bézier 曲线上 t 处的点。最后,将返回的点绘制在 OpenCV::Mat 对象上。
• recursive_bezier:该函数使用一个控制点序列和一个浮点数 t 作为输入, 实现 de Casteljau 算法来返回 Bézier 曲线上对应点的坐标。
在课上我们知道,对于一条 n 次的 Bézier曲线,我们可以连接相邻的控制点,在上面选取将线段分为 t:1-t 的点,连接这些点并重复此步骤,直到只有最后只剩下一个点,这个点就是时间参数为t时, Bézier 曲线上的点。

将上面三角形中第 i 列,第 j 行的点表示为Pij 。一开始时我们知道第0列的点,然后可以计算出第1列的点,以此类推计算出第 n 列的点。从递归的角度看,如果我们要获取第 n 列的点,就需要知道第 n-1列的点,由这个思路可以得到 Bézier 曲线的递推公式:

伪代码可以表示为:

将递推式表示出来后,很容易就可以实现de Casteljau 算法了。

真的很容易,一共只改了四行代码