周素靜,楊 慧,廖淑華,郭文秀
(鄭州鐵路職業(yè)技術(shù)學(xué)院,河南 鄭州 451460)
曲線的構(gòu)造和表示是計(jì)算機(jī)輔助設(shè)計(jì)中的基本問題,在產(chǎn)品的外形設(shè)計(jì)中具有非常重要的應(yīng)用。Bezier曲線是計(jì)算機(jī)繪圖中最常用的一種曲線,是圖形造型運(yùn)用得最多的基本線條之一。
設(shè)P0、P1、…、Pn是Bezier曲線的控制點(diǎn),則其參數(shù)方程為
其中
該參數(shù)方程所確定的曲線稱為n次Bezier曲線。Bezier曲線的起點(diǎn)和終點(diǎn)同控制多邊形的起點(diǎn)和終點(diǎn)重合,即Bk,n(0)=P0,Bk,n(n)=Pn。
根據(jù)Bezier曲線的定義和性質(zhì)建立Bezier曲線的參數(shù)方程是科學(xué)研究和計(jì)算機(jī)輔助設(shè)計(jì)中常遇到的問題。圖1中給出了一條Bezier曲線的圖形,建立數(shù)學(xué)模型研究以下問題:
(1)自動(dòng)檢測(cè)并確定該Bezier曲線上點(diǎn)的實(shí)際坐標(biāo)。
(2)求該Bezier曲線的參數(shù)方程。
圖1 Bezier曲線
設(shè)x、y分別表示平面上點(diǎn)的實(shí)際坐標(biāo),x’、y’表示平面上點(diǎn)的像素坐標(biāo);P0(x0,y0)、P1(x1,y1)、…、Pn(xn,yn)表示Bezier曲線的n個(gè)控制點(diǎn);Q1(x(t1),y(t1))、Q2(x(t2),y(t2))、…、Qn(x(tn),y(tn))表示Bezier曲線上的點(diǎn)。
2.1.1 圖1中點(diǎn)的像素坐標(biāo)與實(shí)際坐標(biāo)之間的轉(zhuǎn)換公式
根據(jù)題意,我們需要從圖1中Bezier曲線上取點(diǎn)的
實(shí)際坐標(biāo),而利用Matlab中函數(shù)ginput取出的是點(diǎn)的像素坐標(biāo),這就要找到平面內(nèi)點(diǎn)的像素坐標(biāo)與實(shí)際坐標(biāo)的換算關(guān)系。
首先,在圖1中取水平線上兩點(diǎn),實(shí)際坐標(biāo)為A(0,-15)和B(10,-15),在y軸取兩點(diǎn),實(shí)際坐標(biāo)為O(0,0)和C(0,10)。然后,利用imread函數(shù)將圖1讀入Matlab中,再利用ginput函數(shù)取出四個(gè)點(diǎn)的像素坐標(biāo),分別為A(134,464),B(213,464),O(134,345),C(134,265)。令
則a,b為像素坐標(biāo)轉(zhuǎn)化為實(shí)際坐標(biāo)的比例系數(shù)。
坐標(biāo)原點(diǎn)的像素坐標(biāo)為O(134,345),設(shè)原圖中曲線上任一點(diǎn)D的像素坐標(biāo)為(x’,y’),實(shí)際坐標(biāo)為(x,y),則有它們之間的換算公式為
(1)
2.1.2 從圖1中取點(diǎn)并求它們的實(shí)際坐標(biāo)
利用ginput函數(shù)編程取出圖1中Bezier曲線上20個(gè)點(diǎn)的像素坐標(biāo),根據(jù)平面內(nèi)點(diǎn)像素坐標(biāo)與實(shí)際坐標(biāo)之間的換算公式(1)可得所取曲線上20個(gè)點(diǎn)的實(shí)際坐標(biāo),如表1所示。
表1 Bezier曲線上20個(gè)點(diǎn)的實(shí)際坐標(biāo)
序號(hào)11121314151617181920x55.3260.2565.5770.2574.8180.3883.1686.9688.2390.38y16.3816.0015.0013.5011.758.757.135.004.133.13
根據(jù)Bezier曲線的定義和性質(zhì),控制點(diǎn)的個(gè)數(shù)決定Bezier曲線的次數(shù),控制點(diǎn)的位置決定Bezier曲線的形狀。從圖1可以看出,圖中的Bezier曲線可能是由三個(gè)控制點(diǎn)生成的(如圖2所示)。
圖2 由三個(gè)控制點(diǎn)生成的Bezier曲線
設(shè)三個(gè)控制點(diǎn)的坐標(biāo)為P0(x0,y0)、P1(x1,y1)和P2(x2,y2),Q(x,y)為Bezier曲線上任意點(diǎn)。
當(dāng)Bezier曲線是由三個(gè)控制點(diǎn)P0、P1和P2生成時(shí),其參數(shù)方程為
B(t)=(1-t)2P0+2t(1-t)P1+t2P2,
即
(2)
其中t∈[0,1]為參數(shù)。
要求Bezier曲線的參數(shù)方程就要根據(jù)問題(1)中取出的曲線上點(diǎn)的實(shí)際坐標(biāo)進(jìn)行數(shù)據(jù)擬合,擬合出P0、P1和P2點(diǎn)的坐標(biāo),從而求出Bezier曲線的參數(shù)方程。
設(shè)Q1(x(t1),y(t1))、Q2(x(t2),y(t2))、…、Qn(x(tn),y(tn))為Bezier曲線上的n個(gè)點(diǎn),其中Q1=P0,Qn=P2。由于測(cè)量取點(diǎn)時(shí)的誤差,對(duì)于曲線上的同一個(gè)點(diǎn),使得橫坐標(biāo)和縱坐標(biāo)
x(t)=(1-t)2x0+2t(1-t)x1+t2x2,
y(t)=(1-t)2y0+2t(1-t)y1+t2y2
成立的參數(shù)t可能不同。設(shè)使得第i個(gè)點(diǎn)的實(shí)際坐標(biāo)滿足參數(shù)方程的參數(shù)分別為t1(i)和t2(i)(i=1,2,…,n),即
為了通過這n個(gè)點(diǎn)擬合出Bezier曲線的參數(shù)方程,我們只需使這n個(gè)點(diǎn)對(duì)應(yīng)的參數(shù)t1(i)和t2(i)的平方和最小即可。根據(jù)Bezier曲線的定義和性質(zhì),可以得到:以控制點(diǎn)坐標(biāo)x0、y0、x1、y1、x2、y2和參數(shù)t1(i)、t2(i)為優(yōu)化變量,以t1(i)和t2(i)的平方和最小為目標(biāo)函數(shù)的最優(yōu)化模型為
s.t.
其中x(t1(i))、y(t2(i))(i=1,2,…,n)為曲線上所取n個(gè)點(diǎn)的坐標(biāo)(如表1所示),是已知數(shù)據(jù)。
將表1中點(diǎn)的坐標(biāo)代入模型,并利用Lingo編程求解最優(yōu)化模型,可得三個(gè)控制點(diǎn)的坐標(biāo)如下表2所示。
表2 Bezier曲線的控制點(diǎn)坐標(biāo)
由表2可知,圖1中的Bezier曲線可以認(rèn)為由三個(gè)控制點(diǎn)為P0(10,3)、P1(90.253 2,29.794 6)、P1(90.379 7,3)所生成的。將三個(gè)控制點(diǎn)的坐標(biāo)代入式(2),可得Bezier曲線的參數(shù)方程為
Q(t)=(1-t)2P0+2t(1-t)P1+t2P2,
即
建立模型求解問題過程中,給出了用Matlab中的ginput函數(shù)獲取曲線上點(diǎn)的像素坐標(biāo)并轉(zhuǎn)化為實(shí)際坐標(biāo)的方法,這一方法對(duì)于圖形分析有重要意義。
以參數(shù)誤差平方和最小作為目標(biāo)函數(shù)建立最優(yōu)化模型,解決了參數(shù)方程下曲線方程的擬合問題,求出的曲線與原曲線擬合度較好。該模型可以應(yīng)用于其他曲線圖像的分析,給出的最優(yōu)化模型求解是參數(shù)方程下曲線擬合的一種有益的探索。
[1]姜啟源.數(shù)學(xué)模型,3版[M].北京:高等教育出版社,1999.
[2]韓中庚.數(shù)學(xué)建模方法及其應(yīng)用,2版[M].北京:高等教育出版社,2009.
[3]周天祥,楊勛年,汪國昭.快速繪制Bzier曲線[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2002,14(6):501-504.