怎样确定 Bezier 曲线的控制点.doc
3页1怎怎样样确定确定 Bezier 曲曲线线的控制点的控制点(一)(一)设在平面上已知有 个数据点 ,要求在相邻的每两1n),(iiiyxPni,,2, 1 ,0L个点 与 之间,用一条 3 次 Bezier 曲线连接iP1iP3 次 Bezier 由 4 个点确定: 是它的起点, 是它的终点,在起点和终点之间,iP1iP另外还有两个控制点,依次记为 和 现在的问题是:如何确定这两个控制点?iAiB(二)(二) 如果在各段 3 次 Bezier 曲线的接头处,只要求曲线函数式的一阶导数连续,也就是说, 只要求曲线的切线斜率连续,那么,控制点还是很容易确定的我们只要过每一个 点,分别作曲线的切线,然后把位于 前面的控制点 iPiP1iB和位于 后面的控制点 ,都取在过 点所作的切线上就可以了iPiAiP如果我们把过 点的切线方向,取为与线段 平行的方向,那么,控制点 iP11iiPP的坐标就可以表示为:iA(,) ;iA)(11iiixxax)(11iiiyyay控制点 的坐标就可以表示为:iB(,) iB)(21iiixxbx)(21iiiyyby其中,, 是两个可以任意给定的正数,比如说,我们可以取 ,这时,ab41 ba控制点的坐标可以用下列公式求出:(, ) ;iA411ii ixxx411ii iyyy(, ) 。
iB42 1ii ixxx 42 1ii iyyy 例例 设 ,,, 这 4 点的坐标为1iPiP1iP2iP,,,,)1 , 1(),(11iiyx)2,2(),(iiyx)1 ,3(),(11iiyx)2,4(),(22iiyx按照上面给出的公式,可以求得控制点 的坐标为iA2(, )(, ) ,411ii ixxx411ii iyyy41324112)2,5 . 2(控制点 的坐标为iB(, )(, ) 42 1ii ixxx 42 1ii iyyy 42434221)1 ,5 . 2(连接 与 的 3 次 Bezier 曲线的参数方程为iP1iP 323223323223232)1 (3)1 (6)1 (25 . 15 . 123)1 (5 . 7)1 (5 . 7)1 (2ttttttttytttttttttx这条 3 次 Bezier 曲线的图像为还必须指出,对这种曲线的最初一段和最后一段,不能用上述公式计算,因为公式中要用到 和 ,这两个点其实是不存在的。
这时可以有几种处理方法:),(11yx),(11nnyx((1))用 的值作为 的值,用 的值作为 的值),(00yx),(11yx),(nnyx),(11nnyx也就是说,在连接 与 的最初一段 Bezier 曲线中,控制点 的坐标为0P1P0A(, ) 0A401 0xxx401 0yyy在连接 与 的最后一段 Bezier 曲线中,控制点 的坐标为1nPnP1nB(, ) 1nB41nn nxxx41nn nyyy((2))用曲线开端处和结尾处的切线方向来确定曲线的最初一段和最后一段3设在曲线开端处,即在 点,给定参数函数的一阶导数值为 0P),(00yx 00 )()( ytyxtx,也就是说,给定曲线在开端处的切线斜率为 00 )()( xy txty 在曲线结尾处,即在 点,给定参数函数的一阶导数值为 nP),(nnyx nn ytyxtx )()(,也就是说,给定曲线在结尾处的切线斜率为 nn xy txty )()(这时,在连接 与 的最初一段 Bezier 曲线中,控制点 的坐标为0P1P0A(, ) 。
0A 2 02 00 04yxxx 2 02 00 04yxyy 在连接 与 的最后一段 Bezier 曲线中,控制点 的坐标为1nPnP1nB(, ) 1nB 224nnn nyxxx 224nnn nyxyy (三)(三) 如果在各段 3 次 Bezier 曲线的接头处,不仅要求一阶导数连续,还要求二阶导数连续, 也就是说,不仅要求曲线的切线斜率连续,还要求曲线的曲率连续,那么,控制点就很难 求了这时,不仅要求控制点 和 都取在通过 点所作的切线上,而且还需要满1iBiAiP足下列等式:, iiiiiiiiiiiiii BAPBAPBABAAPPB sinsin1111211,,2, 1niL满足上述要求的控制点的坐标,无法用数学表达式求出,而是需要你自己编写一个程 序,用逐步迭代的方法,通过反复迭代,最后达到迭代收敛,才能求出各段 Bezier 曲线的 控制点坐标的近似值,这就非常麻烦了。





