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