if flag==1 XC(k)=xi; YC(k)=yi; k=k+1; end end
end
xi=xx;yi=yy+R;xii=xx;yii=yy+R; %第一象限顺圆插补 jvx=0; jvy=0;
xn=fix((x04-xx)/b);yn=fix((yy+R-y04)/b); % m=2^j;
axis auto;
while (xn>0||yn>0) if xn>0
jvx=jvx+yi-yy; end
if yn>0
jvy=jvy+xi-xx; end
flag=0; if(jvx>m)
xn=xn-1;flag=1; xi=xi+b;
jvx=mod(jvx,m); end
if(jvy>m)
yn=yn-1;flag=1; yi=yi-b;
jvy=mod(jvy,m); end
if flag==1 XC(k)=xi; YC(k)=yi; k=k+1; end
end
a=pi-atan(abs((y03-yy)/(x03-xx))); b=atan(abs((y04-yy)/(x04-xx))); alpha=b:pi/100:a; XQ=xx+R*cos(alpha); YQ=yy+R*sin(alpha);
第一象限的计数器 plot(XQ,YQ) hold on;
plot(xx,yy,'Ro'); if fla==0
fla=fla+1;
elseif fla==1
line([x03,XC(1)],[y03,YC(1)],'color','r'); fla=fla+1; elseif fla<=k-2
line([XC(fla),XC(fla+1)],[YC(fla),YC(fla+1)],'color','r'); fla=fla+1; else
errordlg('插补结束'); fla=0; end end
function buchang_Callback(hObject, eventdata, handles)
function buchang_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
function jcq_Callback(hObject, eventdata, handles)
function jcq_CreateFcn(hObject, eventdata, handles) if
ispc
&&
isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
六.心得体会
本次课设是在考研结束后的一周内做完的,时间其实应该是很够的,但是由于本人不善于编程,所以最后完成得很仓促。通过这次课设,我对matlab的操作有了更深的认识,对相关函数语句还有逻辑循环套用的应用有了更深的理解。而且此次课设,让我对逐点比较法直线插补和DDA圆弧插补有了感性和理性的全面认识,对我学习数控机床这门课也有非常大的帮助。最后,遇到困难不要着急,静下心来总有解决办法~