中的算法不能用于起終點連線與X軸平行的圓弧,因其公式中出現(xiàn)分母為(y2-y1)的情況;文獻(xiàn)<2>明確給出了兩組圓心坐標(biāo),但筆者認(rèn)為,其取舍較為復(fù)雜。因為在R相同的情況下,順逆圓將影響圓心坐標(biāo)的確定;如果R和圓的順逆均不變,起點和終點的坐標(biāo)同樣影響圓心的坐標(biāo)。因此,該算法需要分別根據(jù)G02、G03、+R、-R以及由起點指向終點的矢量與坐標(biāo)軸的夾角來進行取舍。
為此,本文提出了矢量算法,利用矢量的方向性,快速簡便地求解圓心坐標(biāo)。
1R編程的矢量算法如所示,已知圓的半徑R,起點A(x1,y1)和終點B(x2,y2)。從中可以看出,滿足此條件的圓心有兩個O1(X1,Y1)和O2(X2,Y2)。連接AB和O1O2,其交點坐標(biāo)為M(xm,ym),則有:xm=x1+x2(1)ym=y1+y2|MO1|=|MO2|=R2-(x2-x1)2+(y2-y1)24(2)起點A到B的矢量可以示為:LAB=(x2-x1)i+(y2-y1)j(3)影響圓弧圓心坐標(biāo)的因素其方向矢量為lAB=x2-x1(x2-x1)2+(y2-y1)2i+y2-y1(x2-x1)2+(y2-y1)2j=lxi+lyj(4)MO1和MO2的矢量可以分別示為:LMO1=(X1-xm)i+(Y1-ym)j(5)LMO2=(X2-xm)i+(Y2-ym)j(6)圓心坐標(biāo)的確定與圓弧的順逆(G02、G03)、長短(優(yōu)劣)以及起終點的位置關(guān)系如所示。
圓心坐標(biāo)的取舍圓弧的順逆圓弧的優(yōu)劣起終點位置圓心位置LAB與LMO1或LMO2的關(guān)系G02劣弧(a)或(e)O2或O1LAB順時針旋轉(zhuǎn)90到LMO2或LMO1G02優(yōu)?。╞)或(f)O1或O2LAB逆時針旋轉(zhuǎn)90到LMO1或LMO2G03劣弧(c)或(g)O1或O2LAB逆時針旋轉(zhuǎn)90到LMO1或LMO2G03優(yōu)?。╠)或(h)O2或O1LAB順時針旋轉(zhuǎn)90到LMO2或LMO1從可以看出:起終點相同的G02的劣弧和G03的優(yōu)弧為同一圓心,此時LAB順時針旋轉(zhuǎn)90到其圓心所在的矢量方向;G02的優(yōu)弧和G03的劣弧為同一圓心,此時LAB逆時針旋轉(zhuǎn)90到其圓心所在的矢量方向,而與起終點的位置無關(guān)。
因此,R編程格式圓心的求解可以歸結(jié)為求解G02的劣弧和G02的優(yōu)弧的圓心問題。
如果弧AB是G02的劣?。ǎ╝)),其圓心為O2,此時,LAB順時針旋轉(zhuǎn)到LMO2,因有LABLMO2=0,所以矢量MO2的方向矢量為:lMO2=lyi+(-lx)j圓心O2的坐標(biāo)就可以計算出來:X2=xm+|MO2|lyY2=ym+|MO2|(-lx)(7)如果弧AB是G02的優(yōu)?。ǎ╞)),其圓心為O1,此時,LAB逆時針旋轉(zhuǎn)到LMO1,所以矢量MO1的方向矢量為:lMO1=(-ly)i+lxj(8)圓心O1的坐標(biāo):X1=xm+|MO1|(-ly)Y1=ym+|MO1|lx(9)以上分析的是中(a)(d)的情況,對于(e)(h)的情況,只需將相應(yīng)的圓心坐標(biāo)的下標(biāo)稍作修改。圓弧插補是平面曲線插補,對于笛卡爾坐標(biāo)系的YOZ和XOZ平面,只要作相應(yīng)的坐標(biāo)變換就可以了。
結(jié)論(1)將影響圓心位置的諸因素歸結(jié)為兩種情況,簡化了計算和編程,程序由原來的60行減為21行;(2)利用矢量法給出確定的圓心坐標(biāo),計算的同時對圓心位置進行取舍,減少了計算量;(3)計算中減少了誤差的累積和傳播,提高了計算精度;(4)在本文公式中,分母出現(xiàn)的是(x2-x1)2+(y2-y1)2,故可以用于起終點連線與X軸或Y軸呈任意角度的圓弧,彌補了文獻(xiàn)<1>中的不足。