数控原理VB圆弧接圆弧课程设计Word文档格式.docx
《数控原理VB圆弧接圆弧课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《数控原理VB圆弧接圆弧课程设计Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
![数控原理VB圆弧接圆弧课程设计Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/27/fe5c532c-064e-49cb-9208-1da1dfccd1a8/fe5c532c-064e-49cb-9208-1da1dfccd1a81.gif)
DimYy1AsSingle
DimStart1AsSingle'
第一段圆弧起始弧度
DimEnd1AsSingle'
第一段圆弧结束弧度
DimStart2AsSingle'
第二段圆弧起始弧度
DimEnd2AsSingle'
第二段圆弧结束弧度
ConstPi=3.1415926
PrivateSubCommand1_Click()
Picture1.Cls'
清除picturebox控件中的内容
Picture1.DrawWidth=1
X0=Val(Split(Text1.Text,"
"
)(0))'
将文本框中的文本从逗号分离并转化成数值
Y0=Val(Split(Text1.Text,"
)
(1))
X1=Val(Split(Text2.Text,"
)(0))
Y1=Val(Split(Text2.Text,"
X2=Val(Split(Text3.Text,"
Y2=Val(Split(Text3.Text,"
I1=Val(Itext1.Text)'
取圆心相对圆弧起点坐标
J1=Val(Jtext1.Text)
I2=Val(Itext2.Text)
J2=Val(Jtext2.Text)
R1=Sqr(I1*I1+J1*J1)'
计算第一段圆弧半径
IfNotOption1.ValueThenR1=-R1'
通过确定顺圆逆圆判断半径符号
R2=Sqr(I2*I2+J2*J2)'
计算第二段圆弧半径
IfNotOption3.ValueThenR2=-R2'
r=Val(rText.Text)'
取刀具半径
IfNotOption5.ValueThenr=-r'
通过确定左刀补右刀补判断刀具半径符号
'
=======================画动态坐标系======================
Dimt1AsSingle'
取出X最大值
Dimt2AsSingle'
取出X最小值
Dimt3AsSingle'
取出Y最大值
Dimt4AsSingle'
取出Y最小值
t1=X0
t2=X0
t3=Y0
t4=Y0
Ift1<
X1Thent1=X1'
求坐标中最大值与最小值
X2Thent1=X2
Ift2>
X1Thent2=X1
X2Thent2=X2
Ift3<
Y1Thent3=Y1
Y2Thent3=Y2
Ift4>
Y1Thent4=Y1
Y2Thent4=Y2
t3Thent1=t3
t4Thent2=t4
DimmAsSingle
IfAbs(R1)<
Abs(R2)Then
m=Abs(R2)
Else
m=Abs(R1)
EndIf
t1=t1+Abs(r)+m'
坐标轴对圆弧和刀补轨迹留有余量
t2=t2-Abs(r)-m
Picture1.Scale(t2,t1)-(t1,t2)'
设定picturebox左上角右下角坐标值
Picture1.Line(t2,0)-(t1,0),vbRed'
画X轴
Picture1.Line(0,t2)-(0,t1),vbRed'
画Y轴
DimIAsInteger
DimTs1AsInteger
DimTs2AsInteger
Ts1=Fix(t2)
Ts2=Fix(t1)
ForI=Ts1ToTs2Step1
Picture1.Line(I,-0.2)-(I,0.2),vbRed'
画X轴竖线
Picture1.CurrentY=-0.2
Picture1.PrintI'
打印刻度值
Picture1.Line(-0.2,I)-(0.2,I),vbRed'
画Y轴横线
Picture1.CurrentX=-0.5
NextI
Picture1.CurrentX=Ts2-1
Picture1.CurrentY=-1
Picture1.Print"
X"
'
标上X
Picture1.CurrentX=-1
Picture1.CurrentY=Ts2-1
Y"
标上Y
Picture1.Line(t1-0.3,-0.3)-(t1,0),vbRed'
画箭头
Picture1.Line(t1-0.3,0.3)-(t1,0),vbRed
Picture1.Line(-0.3,t1-0.3)-(0,t1),vbRed
Picture1.Line(0.3,t1-0.3)-(0,t1),vbRed
================================================
EndSub
PrivateSubCommand2_Click()
Picture1.DrawWidth=2'
线宽
OX1=I1+X0'
圆心实际坐标
OY1=J1+Y0
OX2=I2+X1
OY2=J2+Y1
DimttAsSingle
Xx1=-I1'
圆弧起点相对圆心坐标
Yy1=-J1
Start1=hudu(Xx1,Yy1)'
第一段圆弧起点对应弧度
Xx1=X1-OX1'
圆弧终点相对圆心坐标
Yy1=Y1-OY1
End1=hudu(Xx1,Yy1)'
第一段圆弧终点对应弧度
IfOption1.ValueThen'
画图时如果是顺圆,起点与终点弧度调换
tt=Start1
Start1=End1
End1=tt
IfEnd1<
Start1Then'
圆弧经过X轴正方向
Picture1.Circle(OX1,OY1),Abs(R1),,Start1,2*Pi,624/697
Picture1.Circle(OX1,OY1),Abs(R1),,0,End1,624/697
Else'
圆弧不经过X轴正方向
Picture1.Circle(OX1,OY1),Abs(R1),,Start1,End1,624/697
Xx1=-I2'
Yy1=-J2'
Start2=hudu(Xx1,Yy1)'
第二段圆弧起点对应弧度
Xx1=X2-OX2
Yy1=Y2-OY2
End2=hudu(Xx1,Yy1)'
第二段圆弧终点对应弧度
IfOption3.ValueThen'
tt=Start2
Start2=End2
End2=tt
IfEnd2<
Start2Then'
Picture1.Circle(OX2,OY2),Abs(R2),,Start2,2*Pi,624/697
Picture1.Circle(OX2,OY2),Abs(R2),,0,End2,624/697
Picture1.Circle(OX2,OY2),Abs(R2),,Start2,End2,624/697
Picture1.Circle(3,4),5
=======================弧度计算函数=====================
Functionhudu(ByValmAsSingle,ByValnAsSingle)AsSingle
DimkAsSingle
Ifm<
>
0Then'
斜率存在时
k=n/m
Ifm>
=0Andn>
=0Thenhudu=Atn(k)
=0Andn<
0Thenhudu=Atn(k)+2*Pi
Ifm<
0Andn>
=0Thenhudu=Atn(k)+Pi
0Andn<
0Thenhudu=Atn(k)+Pi
斜率不存在时
Ifn>
=0Then
hudu=Pi/2
Else
hudu=Pi/2+Pi
EndIf
EndFunction
=============刀补运算=======================
PrivateSubCommand3_Click()
DimX01AsSingle'
圆心相对圆弧交接点坐标
DimY01AsSingle
DimX02AsSingle
DimY02AsSingle
DimXl1AsSingle'
圆弧在交接点处的方向矢量
DimYl1AsSingle
DimXl2AsSingle
DimYl2AsSingle
X01=X0+I1-X1
Y01=Y0+J1-Y1
X02=I2
Y02=J2
Xl1=-Y01/R1
Yl1=X01/R1
Xl2=-Y02/R2
Yl2=X02/R2
DimCasesAsSingle
DimXs1AsSingle'
转接点坐标
DimYs1AsSingle
DimXs2AsSingle
DimYs2AsSingle
DimXs3AsSingle
DimYs3AsSingle
DimXs4AsSingle
DimYs4AsSingle
DimXlAsSingle'
书上公式中的变量
DimYlAsSingle
DimD1AsSingle
DimD2AsSingle
DimFsAsSingle
DimkAsSingle'
中间变量
DimsAsSingle
DimSsAsSingle
DimMmxAsSingle
DimMmyAsSingle
DimMmaAsSingle
DimFlag1AsBoolean
DimFlag2AsBoolean
DimttAsSingle'
Cases=Sgn(r)*(Yl2*Xl1-Xl2*Yl1)
IfCases>
0Then
======================================缩短型======================================
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*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*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-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*(-(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*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*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)
IfEnd1<
判断该点是否满足第一段圆弧
IfMma<
Start1AndMma>
End1Then
Flag1=False
Flag1=True
IfMma>
Start1AndMma<
Xx1=Mmx-OX2
Yy1=Mmy-OY2
IfEnd2<
判断该点是否满足第二段圆弧
Start2AndMma>
End2Then
Flag2=False
Flag2=True
Start2AndMma<
IfFlag1AndFlag2Then'
判断得到的点是否满足条件
Xs1=Mmx
Ys1=Mmy
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-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*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-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))
Mmy=-1/2*(-R1^2*OY2-OY1^3-OX1^2*OY2+2*OY2*R2*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*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)