怎样确定Bezier曲线的控制点

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

怎样确定 Bezier 曲线的控制点

(一)

设在平面上已知有 1+n 个数据点 ),(i i i y x P ,n i ,,2,1,0 =。要求在相邻的每两个点 i P 与 1+i P 之间,用一条3次Bezier 曲线连接。

3次Bezier 由4个点确定:i P 是它的起点,1+i P 是它的终点,在起点和终点之间,另外还有两个控制点,依次记为 i A 和 i B 。现在的问题是:如何确定这两个控制点?

(二)

如果在各段3次Bezier 曲线的接头处,只要求曲线函数式的一阶导数连续,也就是说,只要求曲线的切线斜率连续,那么,控制点还是很容易确定的。

我们只要过每一个 i P 点,分别作曲线的切线,然后把位于 i P 前面的控制点 1-i B 和位于i P 后面的控制点 i A ,都取在过 i P 点所作的切线上就可以了。

如果我们把过 i P 点的切线方向,取为与线段 11+-i i P P 平行的方向,那么,控制点 i A 的坐标就可以表示为:

i A ()(11-+-+i i i x x a x ,)(11-+-+i i i y y a y ) ;

控制点 i B 的坐标就可以表示为:

i B ()(21i i i x x b x --++,)(21i i i y y b y --++) 。

其中,a ,b 是两个可以任意给定的正数,比如说,我们可以取 4

1==b a ,这时,控制点的坐标可以用下列公式求出: i A (411-+-+i i i x x x ,4

11-+-+i i i y y y ) ; i B (421i i i x x x --

++,421i i i y y y --++ ) 。 例 设 1-i P ,i P ,1+i P ,2+i P 这4点的坐标为

)1,1(),(11=--i i y x ,)2,2(),(=i i y x ,)1,3(),(11=++i i y x ,)2,4(),(22=++i i y x , 按照上面给出的公式,可以求得控制点 i A 的坐标为 (411-+-+

i i i x x x ,411-+-+i i i y y y )=(4132-+,4112-+ ))2,5.2(= ,

控制点 i B 的坐标为 (421i i i x x x --++,4

21i i i y y y --++ )=(4243--,4221-- ))1,5.2(= 。 连接 i P 与 1+i P 的3次Bezier 曲线的参数方程为

⎨⎧+-=+-+-+-=+-+=+-+-+-=3232233

23223232)1(3)1(6)1(25.15.123)1(5.7)1(5.7)1(2t t t t t t t t y t t t t t t t t t x 。 这条3次Bezier 曲线的图像为

还必须指出,对这种曲线的最初一段和最后一段,不能用上述公式计算,因为公式中要用到 ),(11--y x 和 ),(11++n n y x ,这两个点其实是不存在的。这时可以有几种处理方法:

(1)用 ),(00y x 的值作为 ),(11--y x 的值,用 ),(n n y x 的值作为 ),(11++n n y x 的值。 也就是说,在连接 0P 与 1P 的最初一段Bezier 曲线中,控制点 0A 的坐标为

0A (4

010x x x -+,4010y y y -+ ) 。 在连接 1-n P 与 n P 的最后一段Bezier 曲线中,控制点 1-n B 的坐标为

1-n B (41---n n n x x x ,4

1---n n n y y y ) 。 (2)用曲线开端处和结尾处的切线方向来确定曲线的最初一段和最后一段。

设在曲线开端处,即在 0P ),(00y x 点,给定参数函数的一阶导数值为 ⎩

⎨⎧'=''='00)()(y t y x t x ,也就是说,给定曲线在开端处的切线斜率为 0

0)()(x y t x t y ''='' 。

在曲线结尾处,即在 n P ),(n n y x 点,给定参数函数的一阶导数值为 ⎩⎨⎧'=''='n n y t y x t x )()( ,也就是说,给定曲线在结尾处的切线斜率为 n

n x y t x t y ''='')()( 。 这时,在连接 0P 与 1P 的最初一段Bezier 曲线中,控制点 0A 的坐标为

0A (20200

04y x x x '+''+,2020004y x y y '+''+ ) 。

在连接 1-n P 与 n P 的最后一段Bezier 曲线中,控制点 1-n B 的坐标为

1-n B (224n n n n y x x x '+''-,224n n n n y x y y '+''+ ) 。

(三)

如果在各段3次Bezier 曲线的接头处,不仅要求一阶导数连续,还要求二阶导数连续,也就是说,不仅要求曲线的切线斜率连续,还要求曲线的曲率连续,那么,控制点就很难求了。

这时,不仅要求控制点 1-i B 和 i A 都取在通过 i P 点所作的切线上,而且还需要满足下列等式:

i i i i i i i i i i i i i i B A P B A P B A B A A P P B ∠⨯∠⨯=⎪⎪⎭⎫ ⎝⎛-----sin sin 11112

1 ,1,,2,1-=n i 。 满足上述要求的控制点的坐标,无法用数学表达式求出,而是需要你自己编写一个程序,用逐步迭代的方法,通过反复迭代,最后达到迭代收敛,才能求出各段Bezier 曲线的控制点坐标的近似值,这就非常麻烦了。

相关文档
最新文档