數(shù)控原理VB圓弧接圓弧課程設(shè)計_第1頁
數(shù)控原理VB圓弧接圓弧課程設(shè)計_第2頁
數(shù)控原理VB圓弧接圓弧課程設(shè)計_第3頁
數(shù)控原理VB圓弧接圓弧課程設(shè)計_第4頁
數(shù)控原理VB圓弧接圓弧課程設(shè)計_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、四、調(diào)試分析1.縮短型2.伸長型3.插入型附錄:程序如下:Option ExplicitDim X0 As Single 圓弧三點坐標Dim Y0 As SingleDim X1 As SingleDim Y1 As SingleDim X2 As SingleDim Y2 As SingleDim I1 As Single 兩個圓心相對圓弧起點坐標Dim J1 As SingleDim I2 As SingleDim J2 As SingleDim R1 As Single 兩個圓弧半徑Dim R2 As SingleDim r As Single 刀具半徑Dim OX1 As Single

2、 兩圓心實際坐標Dim OY1 As SingleDim OX2 As SingleDim OY2 As SingleDim Xx1 As SingleDim Yy1 As SingleDim Start1 As Single 第一段圓弧起始弧度Dim End1 As Single 第一段圓弧結(jié)束弧度Dim Start2 As Single 第二段圓弧起始弧度Dim End2 As Single 第二段圓弧結(jié)束弧度Const Pi = 3.Private Sub Command1_Click()Picture1.Cls 清除picturebox控件中的內(nèi)容Picture1.DrawWidth

3、= 1X0 = Val(Split(Text1.Text, ,)(0) 將文本框中的文本從逗號分離并轉(zhuǎn)化成數(shù)值Y0 = Val(Split(Text1.Text, ,)(1)X1 = Val(Split(Text2.Text, ,)(0)Y1 = Val(Split(Text2.Text, ,)(1)X2 = Val(Split(Text3.Text, ,)(0)Y2 = Val(Split(Text3.Text, ,)(1)I1 = Val(Itext1.Text) 取圓心相對圓弧起點坐標J1 = Val(Jtext1.Text)I2 = Val(Itext2.Text)J2 = Val(J

4、text2.Text)R1 = Sqr(I1 * I1 + J1 * J1) 計算第一段圓弧半徑If Not Option1.Value Then R1 = -R1 通過確定順圓逆圓判斷半徑符號R2 = Sqr(I2 * I2 + J2 * J2) 計算第二段圓弧半徑If Not Option3.Value Then R2 = -R2 通過確定順圓逆圓判斷半徑符號r = Val(rText.Text) 取刀具半徑If Not Option5.Value Then r = -r 通過確定左刀補右刀補判斷刀具半徑符號=畫動態(tài)坐標系=Dim t1 As Single 取出X最大值Dim t2 As

5、Single 取出X最小值Dim t3 As Single 取出Y最大值Dim t4 As Single 取出Y最小值t1 = X0t2 = X0t3 = Y0t4 = Y0If t1 X1 Then t1 = X1 求坐標中最大值與最小值If t1 X1 Then t2 = X1If t2 X2 Then t2 = X2If t3 Y1 Then t3 = Y1If t3 Y1 Then t4 = Y1If t4 Y2 Then t4 = Y2If t1 t4 Then t2 = t4Dim m As SingleIf Abs(R1) Abs(R2) Then m = Abs(R2)Else

6、 m = Abs(R1)End Ift1 = t1 + Abs(r) + m 坐標軸對圓弧和刀補軌跡留有余量t2 = t2 - Abs(r) - mPicture1.Scale (t2, t1)-(t1, t2) 設(shè)定picturebox左上角右下角坐標值Picture1.Line (t2, 0)-(t1, 0), vbRed 畫X軸Picture1.Line (0, t2)-(0, t1), vbRed 畫Y軸Dim I As IntegerDim Ts1 As IntegerDim Ts2 As IntegerTs1 = Fix(t2)Ts2 = Fix(t1)For I = Ts1 To

7、 Ts2 Step 1 Picture1.Line (I, -0.2)-(I, 0.2), vbRed 畫X軸豎線 Picture1.CurrentY = -0.2 Picture1.Print I 打印刻度值 Picture1.Line (-0.2, I)-(0.2, I), vbRed 畫Y軸橫線 Picture1.CurrentX = -0.5 Picture1.Print I 打印刻度值Next IPicture1.CurrentX = Ts2 - 1Picture1.CurrentY = -1Picture1.Print X 標上XPicture1.CurrentX = -1Pict

8、ure1.CurrentY = Ts2 - 1Picture1.Print Y 標上YPicture1.Line (t1 - 0.3, -0.3)-(t1, 0), vbRed 畫箭頭Picture1.Line (t1 - 0.3, 0.3)-(t1, 0), vbRedPicture1.Line (-0.3, t1 - 0.3)-(0, t1), vbRedPicture1.Line (0.3, t1 - 0.3)-(0, t1), vbRed=End SubPrivate Sub Command2_Click()Picture1.DrawWidth = 2 線寬OX1 = I1 + X0

9、圓心實際坐標OY1 = J1 + Y0OX2 = I2 + X1OY2 = J2 + Y1Dim tt As SingleXx1 = -I1 圓弧起點相對圓心坐標Yy1 = -J1Start1 = hudu(Xx1, Yy1) 第一段圓弧起點對應(yīng)弧度Xx1 = X1 - OX1 圓弧終點相對圓心坐標Yy1 = Y1 - OY1End1 = hudu(Xx1, Yy1) 第一段圓弧終點對應(yīng)弧度If Option1.Value Then 畫圖時如果是順圓,起點與終點弧度調(diào)換 tt = Start1 Start1 = End1 End1 = ttEnd IfIf End1 Start1 Then 圓

10、弧經(jīng)過X軸正方向Picture1.Circle (OX1, OY1), Abs(R1), , Start1, 2 * Pi, 624 / 697Picture1.Circle (OX1, OY1), Abs(R1), , 0, End1, 624 / 697Else 圓弧不經(jīng)過X軸正方向Picture1.Circle (OX1, OY1), Abs(R1), , Start1, End1, 624 / 697End IfXx1 = -I2 圓弧起點相對圓心坐標Yy1 = -J2 圓弧終點相對圓心坐標Start2 = hudu(Xx1, Yy1) 第二段圓弧起點對應(yīng)弧度Xx1 = X2 - OX

11、2Yy1 = Y2 - OY2End2 = hudu(Xx1, Yy1) 第二段圓弧終點對應(yīng)弧度If Option3.Value Then 畫圖時如果是順圓,起點與終點弧度調(diào)換 tt = Start2 Start2 = End2 End2 = ttEnd IfIf End2 Start2 Then 圓弧經(jīng)過X軸正方向Picture1.Circle (OX2, OY2), Abs(R2), , Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2), , 0, End2, 624 / 697Else 圓弧不經(jīng)過X軸正方向Pictu

12、re1.Circle (OX2, OY2), Abs(R2), , Start2, End2, 624 / 697End IfPicture1.Circle (3, 4), 5End Sub=弧度計算函數(shù)=Function hudu(ByVal m As Single, ByVal n As Single) As SingleDim k As SingleIf m 0 Then 斜率存在時 k = n / m If m = 0 And n = 0 Then hudu = Atn(k) If m = 0 And n 0 Then hudu = Atn(k) + 2 * Pi If m = 0 T

13、hen hudu = Atn(k) + Pi If m 0 And n = 0 Then hudu = Pi / 2 Else hudu = Pi / 2 + Pi End IfEnd IfEnd Function=刀補運算=Private Sub Command3_Click()Picture1.DrawWidth = 1Dim X01 As Single 圓心相對圓弧交接點坐標Dim Y01 As SingleDim X02 As SingleDim Y02 As SingleDim Xl1 As Single 圓弧在交接點處的方向矢量Dim Yl1 As SingleDim Xl2 As

14、 SingleDim Yl2 As SingleX01 = X0 + I1 - X1Y01 = Y0 + J1 - Y1X02 = I2Y02 = J2Xl1 = -Y01 / R1Yl1 = X01 / R1Xl2 = -Y02 / R2Yl2 = X02 / R2Dim Cases As Single Dim Xs1 As Single 轉(zhuǎn)接點坐標 Dim Ys1 As Single Dim Xs2 As Single Dim Ys2 As Single Dim Xs3 As Single Dim Ys3 As Single Dim Xs4 As Single Dim Ys4 As Sin

15、gle Dim Xl As Single 書上公式中的變量 Dim Yl As Single Dim D1 As Single Dim D2 As Single Dim Fs As Single Dim k As Single 中間變量 Dim s As Single Dim Ss As Single Dim Mmx As Single Dim Mmy As Single Dim Mma As Single Dim Flag1 As Boolean Dim Flag2 As Boolean Dim tt As Single 中間變量Cases = Sgn(r) * (Yl2 * Xl1 - X

16、l2 * Yl1)If Cases 0 Then=縮短型= MATLAB中得到的兩圓交點公式 k = (R1 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 2 - OX1 2 - OY1 2 - OX2 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 2 + 4 * r 2 + 2 * OX2 * OX1) s = (-OY2 2 - OY1 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 2 + R2 2 - OX1 2 - OX2 2) Ss = -2 * OY2 * OY1 * OX

17、2 2 + OX2 2 * OY2 2 + OY1 * (-(OX1 - OX2) 2 * (-OY2 2 - OY1 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 2 + R2 2 - OX1 2 - OX2 2) * (R1 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 2 - OX1 2 - OY1 2 - OX2 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 2 + 4 * r 2 + 2 * OX2 * OX1) (1 / 2) + 2 * OY2 * OX1 2 * OY1

18、 + 2 * OX2 * OX1 * R2 2 - 2 * OX2 * OX1 * R1 2 - 2 * OX2 2 * R2 * r + 2 * R1 * r * OX2 2 - 2 * OX1 2 * R2 * r + 2 * OX1 2 * R1 * r - 4 * OX2 * OX1 * R1 * r + 4 * OX2 * OX1 * R2 * r + R1 2 * OX1 2 + R1 2 * OX2 2 - OX1 2 * OY1 2 - OX1 2 * R2 2 - OX1 2 * OY2 2 + OY1 2 * OX2 2 - R2 2 * OX2 2 - OX1 4 + O

19、X2 4 + 2 * OX2 * OX1 3 - 2 * OX2 3 * OX1 - OY2 * (-(OX1 - OX2) 2 * s * k) (1 / 2) Mmx = -1 / 2 * Ss / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 2 + OY1 2 + OX2 2 + OY2 2) / (OX1 - OX2) Mmy = -1 / 2 * (-R1 2 * OY2 - OY1 3 - OX1 2 * OY2 + 2 * OY2 * R2 * r + 2 * OX2 * OX1 * OY1 + 2 * OX2 * OX1 * OY2 - 2 *

20、OY2 * R1 * r - 2 * OY1 * R2 * r + 2 * OY1 * R1 * r + R1 2 * OY1 - OY1 * OX2 2 - OX1 2 * OY1 + OY1 2 * OY2 - OY1 * R2 2 - OY2 * OX2 2 + OY1 * OY2 2 + OY2 * R2 2 - OY2 3 - (-(OX1 - OX2) 2 * (-OY2 2 - OY1 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 2 + R2 2 - OX1 2 - OX2 2) * (R1 2 + 4 * R1 *

21、r + 2 * R1 * R2 - OY2 2 - OX1 2 - OY1 2 - OX2 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 2 + 4 * r 2 + 2 * OX2 * OX1) (1 / 2) / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 2 + OY1 2 + OX2 2 + OY2 2) Xx1 = Mmx - OX1 Yy1 = Mmy - OY1 Mma = hudu(Xx1, Yy1) If End1 Start1 Then 判斷該點是否滿足第一段圓弧 If Mma End1 Then Flag1 = Fa

22、lse Else Flag1 = True End If Else If Mma Start1 And Mma End1 Then Flag1 = True Else Flag1 = False End If End If Xx1 = Mmx - OX2 Yy1 = Mmy - OY2 Mma = hudu(Xx1, Yy1) If End2 Start2 Then 判斷該點是否滿足第二段圓弧 If Mma End2 Then Flag2 = False Else Flag2 = True End If Else If Mma Start2 And Mma End2 Then Flag2 =

23、True Else Flag2 = False End If End If If Flag1 And Flag2 Then 判斷得到的點是否滿足條件 Xs1 = Mmx Ys1 = Mmy End If k = R1 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 2 - OX1 2 - OY1 2 - OX2 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 2 + 4 * r 2 + 2 * OX2 * OX1 s = -(OX1 - OX2) 2 * (-OY2 2 - OY1 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1

24、 - 2 * R1 * R2 + R1 2 + R2 2 - OX1 2 - OX2 2) Ss = (-2 * OY2 * OY1 * OX2 2 + OX2 2 * OY2 2 - OY1 * (-(OX1 - OX2) 2 * (-OY2 2 - OY1 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 2 + R2 2 - OX1 2 - OX2 2) * (R1 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 2 - OX1 2 - OY1 2 - OX2 2 + 4 * R2 * r + 2 * OY1

25、* OY2 + R2 2 + 4 * r 2 + 2 * OX2 * OX1) (1 / 2) + 2 * OY2 * OX1 2 * OY1 + 2 * OX2 * OX1 * R2 2 - 2 * OX2 * OX1 * R1 2 - 2 * OX2 2 * R2 * r + 2 * R1 * r * OX2 2 - 2 * OX1 2 * R2 * r + 2 * OX1 2 * R1 * r - 4 * OX2 * OX1 * R1 * r + 4 * OX2 * OX1 * R2 * r + R1 2 * OX1 2 + R1 2 * OX2 2 - OX1 2 * OY1 2 -

26、OX1 2 * R2 2 - OX1 2 * OY2 2 + OY1 2 * OX2 2 - R2 2 * OX2 2 - OX1 4 + OX2 4 + 2 * OX2 * OX1 3 - 2 * OX2 3 * OX1 + OY2 * (s * k) (1 / 2) Mmx = -1 / 2 * Ss / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 2 + OY1 2 + OX2 2 + OY2 2) / (OX1 - OX2) Mmy = -1 / 2 * (-R1 2 * OY2 - OY1 3 - OX1 2 * OY2 + 2 * OY2 * R2

27、* r + 2 * OX2 * OX1 * OY1 + 2 * OX2 * OX1 * OY2 - 2 * OY2 * R1 * r - 2 * OY1 * R2 * r + 2 * OY1 * R1 * r + R1 2 * OY1 - OY1 * OX2 2 - OX1 2 * OY1 + OY1 2 * OY2 - OY1 * R2 2 - OY2 * OX2 2 + OY1 * OY2 2 + OY2 * R2 2 - OY2 3 + (-(OX1 - OX2) 2 * (-OY2 2 - OY1 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 *

28、 R2 + R1 2 + R2 2 - OX1 2 - OX2 2) * (R1 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 2 - OX1 2 - OY1 2 - OX2 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 2 + 4 * r 2 + 2 * OX2 * OX1) (1 / 2) / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 2 + OY1 2 + OX2 2 + OY2 2) Xx1 = Mmx - OX1 Yy1 = Mmy - OY1 Mma = hudu(Xx1, Yy1) If End1

29、 Start1 Then 判斷該點是否滿足第一段圓弧 If Mma End1 Then Flag1 = False Else Flag1 = True End If Else If Mma Start1 And Mma End1 Then Flag1 = True Else Flag1 = False End If End If Xx1 = Mmx - OX2 Yy1 = Mmy - OY2 Mma = hudu(Xx1, Yy1) If End2 Start2 Then 判斷該點是否滿足第二段圓弧 If Mma End2 Then Flag2 = False Else Flag2 = Tru

30、e End If Else If Mma Start2 And Mma End2 Then Flag2 = True Else Flag2 = False End If End If If Flag1 And Flag2 Then 判斷得到的點是否滿足條件 Xs1 = Mmx Ys1 = Mmy End If Picture1.DrawWidth = 3 線寬 Picture1.PSet (Xs1, Ys1) 畫點 Picture1.Print ( & Xs1 & , & Ys1 & ) 打印坐標 Picture1.DrawWidth = 1 線寬 -畫刀補軌跡- Xx1 = -I1 Yy1

31、= -J1 Start1 = hudu(Xx1, Yy1) Xx1 = Xs1 - OX1 Yy1 = Ys1 - OY1 End1 = hudu(Xx1, Yy1) If Option1.Value Then tt = Start1 Start1 = End1 End1 = tt End If If End1 Start1 Then 畫第一段圓弧 Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, 2 * Pi, 624 / 697 Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen

32、, 0, End1, 624 / 697 Else Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, End1, 624 / 697 End If Xx1 = Xs1 - X1 - I2 Yy1 = Ys1 - Y1 - J2 Start2 = hudu(Xx1, Yy1) Xx1 = X2 - OX2 Yy1 = Y2 - OY2 End2 = hudu(Xx1, Yy1) If Option3.Value Then tt = Start2 Start2 = End2 End2 = tt End If If End2 = 0

33、Then=伸長型= Xs1 = X1 - r * Yl1 Ys1 = Y1 + r * Xl1 Xs2 = X1 + (Xl2 - Xl1) * r / (Xl1 * Yl2 - Xl2 * Yl1) Ys2 = Y1 + (Yl2 - Yl1) * r / (Xl1 * Yl2 - Xl2 * Yl1) Xs3 = X1 - r * Yl2 Ys3 = Y1 + r * Xl2 If End1 Start1 Then 畫第一段圓弧 Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, 2 * Pi, 624 / 697 Pictu

34、re1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, 0, End1, 624 / 697 Else Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, End1, 624 / 697 End If If End2 Start2 Then 畫第二段圓弧 Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, 2 * Pi, 624 / 697 Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGree

35、n, 0, End2, 624 / 697 Else Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, End2, 624 / 697 End If Picture1.Line (Xs1, Ys1)-(Xs2, Ys2), vbGreen 畫兩段直線 Picture1.Line (Xs2, Ys2)-(Xs3, Ys3), vbGreen Picture1.DrawWidth = 3 線寬 Picture1.PSet (Xs1, Ys1) 畫點 Picture1.Print ( & Xs1 & , & Ys1 & ) 打印坐標值 Picture1.PSet (Xs2, Ys2) Picture1.Print ( & Xs2 & , & Ys2 & ) Picture1.PSet (Xs3, Ys3) Picture1.Print ( & Xs3 & , & Ys3 & ) Else=插入型= Xs1 = X1 - r * Yl1 Ys1 = Y1 + r * Xl1 Xs2 = Xs1 + Abs

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論