目录

实验目的

实验环境

实验内容

实验总结


实验目的

设计函数实现绘制 Bézier 曲线的功能,在这基础上实现对 Bézier 曲线的反走样。

实验环境

C++、cmake、OpenCV

实验内容

本次实验相对以前的实验瞬间简单了许多,针对bezier函数,可以模仿本身有的naive_bezier函数实现微小递增操作,而其中的绘制部分则要改为调用recursive_bezier。针对recursive_bezier函数,需要深刻理解De Casteljau 算法,根据pdf中的说明也可得出这是一个递归的过程,本质上是每次都从杨辉三角的一层越到上一层,并用相同的计算方式得出新的控制点,直到求出最后一个点(也就是最终要着色的点)后返回,然后在bezier函数中对该点着色即可。

而针对提高项,则不能再这么轻易地进行着色。计算着色点位置的逻辑没变所以不需要改变recursive_bezier函数,只需要改变bezier函数,使得计算出来的着色点和周围的点都进行着色即可。为了平滑效果起见我将着色点和包围着它的总共9个点都进行了着色,并根据recursive_bezier计算出来的真正的着色点位置与这9个点的距离,利用1.0f-(d/max_dist)来当系数(其中max_dist为1.5,因为9个点的最长半径就是这个),乘上255来当他们的颜色,最终判断当前颜色是否比之前颜色更大,如果更大则更新否则不更新,以此来实现反走样。根据最终效果来看反走样很成功。

但是一开始因为不太理解这个反走样应该怎么整饶了很多弯,还好经过思考和同学指点发现了问题并纠正了回来。

实验总结

利用这次实验,我学习了贝塞尔曲线的函数实现方法,能够利用代码实现还原贝塞尔曲线的计算公式,并且基于此再次巩固了反走样的方法等,总体收货颇丰,在坎坷中前进。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐