航行日志

AGG手册最后关于适应性细分法描画贝塞尔曲线的感触

看到第八节,是关于Bezier Curves的讨论,翻看其代码, files agg_curves.h, agg_curves.cpp

中间有不少演进的过程,从文章看,作者原来使用的是土办法。不过效果还是不错的。

后面还写道:

在 comp.graphics.algorithms 新闻组,我因为对与著的丌熟悉而受到了相当严历的批评。完整的
讨论在这里可以找到,你也可以使用“Adaptive Subdivision of Bezier Curves McSeem”在
http://groups.google.com 里迚行搜索。 在网上可以很容易地找到一篇叨“Adaptive forward
differencing for rendering curves and surfaces”的文章。里面介绍的方法很好,不过仍然不能解决平滑 stroke 中遇到的所有问题。

特地回去回顾了下计算机图形学关于贝塞尔曲线的特性描述

Bezier曲线的性质

1\. 端点
根据Bezier曲线的公式,可以得到Bezier曲线总是通过起始点和终止点。
2\. 一阶导数
Bezier曲线在起点处的切线位于前两个控制点的连线上,而终点处的切线位于最后两个控制点的连线上,即曲线起点和终点处的切线方向与起始折线段和终止折线段的切线方向一致。
3\. 二阶导数
Bezier曲线在起始点和终止点处的二阶导数分别取决于最开始和最后的三个控制点。可以证明,Bezier曲线在起始点和终止点处的r阶导数由起始点或终止点和它们的r个邻近的控制多边形顶点来决定。事实上,正是由该性质以及Bezier曲线的端点性质出发推导出了Bezier基函数。
4\. 对称性
Bezier曲线具有对称性,即保持控制多边形的顶点位置不变,仅仅把它们的顺序颠倒一下,将下标为k的控制点Pk改为下标为n-k的控制点Pn-k时,曲线保持不变,只是走向相反而已。
5\. 凸包性
Bezier曲线各点均落在控制多边形各顶点构成的凸包之中,这里的凸包指的是包含所有顶点的最小凸多边形。Bezier曲线的凸包性保证了曲线随控制点平稳前进而不会振荡。
6\. 几何不变性
Bezier曲线的形状仅与控制多边形各顶点的相对位置有关,而与坐标系的选择无关,即具有几何不变性。
7\. 变差减少性
Bezier曲线的变差减少性是指如果控制多边形是一个平面图形,则该平面内的任意直线与该Bezier曲线的交点个数不多于该直线与控制多边形的交点个数;如果控制多边形不是平面图形,则任意平面与Bezier曲线的交点个数不会超过它与控制多边形的交点个数。变差减少性反映了Bezier曲线比控制多边形波动得少,即比控制多边形更加光滑。</pre>

大学计算机图形学免修了,现在想想是亏了。