周素静,杨 慧,廖淑华,郭文秀
(郑州铁路职业技术学院,河南 郑州 451460)
曲线的构造和表示是计算机辅助设计中的基本问题,在产品的外形设计中具有非常重要的应用。Bezier曲线是计算机绘图中最常用的一种曲线,是图形造型运用得最多的基本线条之一。
设P0、P1、…、Pn是Bezier曲线的控制点,则其参数方程为
其中
该参数方程所确定的曲线称为n次Bezier曲线。Bezier曲线的起点和终点同控制多边形的起点和终点重合,即Bk,n(0)=P0,Bk,n(n)=Pn。
根据Bezier曲线的定义和性质建立Bezier曲线的参数方程是科学研究和计算机辅助设计中常遇到的问题。图1中给出了一条Bezier曲线的图形,建立数学模型研究以下问题:
(1)自动检测并确定该Bezier曲线上点的实际坐标。
(2)求该Bezier曲线的参数方程。
图1 Bezier曲线
设x、y分别表示平面上点的实际坐标,x’、y’表示平面上点的像素坐标;P0(x0,y0)、P1(x1,y1)、…、Pn(xn,yn)表示Bezier曲线的n个控制点;Q1(x(t1),y(t1))、Q2(x(t2),y(t2))、…、Qn(x(tn),y(tn))表示Bezier曲线上的点。
2.1.1 图1中点的像素坐标与实际坐标之间的转换公式
根据题意,我们需要从图1中Bezier曲线上取点的
实际坐标,而利用Matlab中函数ginput取出的是点的像素坐标,这就要找到平面内点的像素坐标与实际坐标的换算关系。
首先,在图1中取水平线上两点,实际坐标为A(0,-15)和B(10,-15),在y轴取两点,实际坐标为O(0,0)和C(0,10)。然后,利用imread函数将图1读入Matlab中,再利用ginput函数取出四个点的像素坐标,分别为A(134,464),B(213,464),O(134,345),C(134,265)。令
则a,b为像素坐标转化为实际坐标的比例系数。
坐标原点的像素坐标为O(134,345),设原图中曲线上任一点D的像素坐标为(x’,y’),实际坐标为(x,y),则有它们之间的换算公式为
(1)
2.1.2 从图1中取点并求它们的实际坐标
利用ginput函数编程取出图1中Bezier曲线上20个点的像素坐标,根据平面内点像素坐标与实际坐标之间的换算公式(1)可得所取曲线上20个点的实际坐标,如表1所示。
表1 Bezier曲线上20个点的实际坐标
序号11121314151617181920x55.3260.2565.5770.2574.8180.3883.1686.9688.2390.38y16.3816.0015.0013.5011.758.757.135.004.133.13
根据Bezier曲线的定义和性质,控制点的个数决定Bezier曲线的次数,控制点的位置决定Bezier曲线的形状。从图1可以看出,图中的Bezier曲线可能是由三个控制点生成的(如图2所示)。
图2 由三个控制点生成的Bezier曲线
设三个控制点的坐标为P0(x0,y0)、P1(x1,y1)和P2(x2,y2),Q(x,y)为Bezier曲线上任意点。
当Bezier曲线是由三个控制点P0、P1和P2生成时,其参数方程为
B(t)=(1-t)2P0+2t(1-t)P1+t2P2,
即
(2)
其中t∈[0,1]为参数。
要求Bezier曲线的参数方程就要根据问题(1)中取出的曲线上点的实际坐标进行数据拟合,拟合出P0、P1和P2点的坐标,从而求出Bezier曲线的参数方程。
设Q1(x(t1),y(t1))、Q2(x(t2),y(t2))、…、Qn(x(tn),y(tn))为Bezier曲线上的n个点,其中Q1=P0,Qn=P2。由于测量取点时的误差,对于曲线上的同一个点,使得横坐标和纵坐标
x(t)=(1-t)2x0+2t(1-t)x1+t2x2,
y(t)=(1-t)2y0+2t(1-t)y1+t2y2
成立的参数t可能不同。设使得第i个点的实际坐标满足参数方程的参数分别为t1(i)和t2(i)(i=1,2,…,n),即
为了通过这n个点拟合出Bezier曲线的参数方程,我们只需使这n个点对应的参数t1(i)和t2(i)的平方和最小即可。根据Bezier曲线的定义和性质,可以得到:以控制点坐标x0、y0、x1、y1、x2、y2和参数t1(i)、t2(i)为优化变量,以t1(i)和t2(i)的平方和最小为目标函数的最优化模型为
s.t.
其中x(t1(i))、y(t2(i))(i=1,2,…,n)为曲线上所取n个点的坐标(如表1所示),是已知数据。
将表1中点的坐标代入模型,并利用Lingo编程求解最优化模型,可得三个控制点的坐标如下表2所示。
表2 Bezier曲线的控制点坐标
由表2可知,图1中的Bezier曲线可以认为由三个控制点为P0(10,3)、P1(90.253 2,29.794 6)、P1(90.379 7,3)所生成的。将三个控制点的坐标代入式(2),可得Bezier曲线的参数方程为
Q(t)=(1-t)2P0+2t(1-t)P1+t2P2,
即
建立模型求解问题过程中,给出了用Matlab中的ginput函数获取曲线上点的像素坐标并转化为实际坐标的方法,这一方法对于图形分析有重要意义。
以参数误差平方和最小作为目标函数建立最优化模型,解决了参数方程下曲线方程的拟合问题,求出的曲线与原曲线拟合度较好。该模型可以应用于其他曲线图像的分析,给出的最优化模型求解是参数方程下曲线拟合的一种有益的探索。
[1]姜启源.数学模型,3版[M].北京:高等教育出版社,1999.
[2]韩中庚.数学建模方法及其应用,2版[M].北京:高等教育出版社,2009.
[3]周天祥,杨勋年,汪国昭.快速绘制Bzier曲线[J].计算机辅助设计与图形学学报,2002,14(6):501-504.