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