逐点比较法直线插补MATLAB(四个象限分开)

现在还是只能分开运行,还在研究怎么合在一起

第一象限

Xs = input('请输入起点横坐标XIn X0= ');
Ys = input('请输入起点纵坐标YIn Y0= ');
Xe = input('请输入终点横坐标XIn Xe= ');
Ye = input('请输入终点纵坐标YIn Ye= ');
h= input('输入步长\nh= ');
x=[Xs,Xe];
y=[Ys,Ye];
clc;
hold off;
plot(x,y);
hold on;    
Xlength=Xe-Xs;                
Ylength=Ye-Ys;                    
NXY= (abs(Xlength)+abs(Ylength))/h;
Fm=0;
X(1)=Xs;
Y(1)=Ys;
xlabel('X');
ylabel('Y');
title(['逐点比较法第一象限直线插补']);
if((Xe-Xs)>0&(Ye-Ys)>0) XOY=1; 
end
for(i=1:NXY)            
   switch XOY        
   case 1
       if(Fm>=0)
          X(i+1)=X(i)+h;       
          Y(i+1)=Y(i);   
          Fm=Fm-Ylength; 
       else
          X(i+1)=X(i);          
          Y(i+1)=Y(i)+h; 
          Fm=Fm+Xlength;   
       end
       text((X(i)+X(i+1))/2,(Y(i)+Y(i+1))/2,[num2str(i)]);   
       temp_x=[X(i),X(i+1)];
       temp_y=[Y(i),Y(i+1)];
       plot(temp_x,temp_y,'r-');
   hold on;
   pause(0.5);           
   end
end  
   hold off;

 结果:

第二象限

Xs = input('请输入起点横坐标XIn X0= ');
Ys = input('请输入起点纵坐标YIn Y0= ');
Xe = input('请输入终点横坐标XIn Xe= ');
Ye = input('请输入终点纵坐标YIn Ye= ');
h= input('输入步长\nh= ');
x=[Xs,Xe];
y=[Ys,Ye];
clc;
hold off;

plot(x,y);
%axis([0,20,0,20])
hold on;      %在原图上继续画图

Xlength=Xs-Xe;                       %X轴  起点到终点长度
Ylength=Ye-Ys;                       %Y轴   起点到终点长度
NXY= (abs(Xlength)+abs(Ylength))/h; %进给总步数(abs函数取绝对值)
Fm=0;
X(1)=Xs;
Y(1)=Ys;
xlabel('X');
ylabel('Y');

if((Xe-Xs)<0&(Ye-Ys)>0) XOY=2;   %判断第一象限并赋值
end
title(['逐点比较法第二象限直线插补']);
for(i=1:NXY)              %步数小于总步数
   switch XOY                  %分支语句
   case 2
       if(Fm<=0)
          X(i+1)=X(i)-h;          
          Y(i+1)=Y(i);       %变化后Y坐标
          Fm=Fm+Ylength;   %新偏差计算
       else
          X(i+1)=X(i);          
          Y(i+1)=Y(i)+h;       %变化后Y坐标
          Fm=Fm-Xlength;   %新偏差计算
       end
       text((X(i)+X(i+1))/2,(Y(i)+Y(i+1))/2,[num2str(i)]);   
       temp_x=[X(i+1),X(i)];
       temp_y=[Y(i),Y(i+1)];
       plot(temp_x,temp_y,'r-');%由此点和前一点坐标组成的2个向量画线
   hold on;
   pause(0.5);            %延时程序形参为每走一步所用时间  end
   end
end  
%plot(X,Y,'r-');%由此点和前一点坐标组成的2个向量画线
   hold off;

  结果:

第三象限

Xs = input('请输入起点横坐标XIn X0= ');
Ys = input('请输入起点纵坐标YIn Y0= ');
Xe = input('请输入终点横坐标XIn Xe= ');
Ye = input('请输入终点纵坐标YIn Ye= ');
h= input('输入步长\nh= ');x=[Xs,Xe];
y=[Ys,Ye];
clc;
hold off;
plot(x,y);
hold on;    
Xlength=Xe-Xs;                
Ylength=Ye-Ys;                    
NXY= (abs(Xlength)+abs(Ylength))/h;
Fm=0;
X(1)=Xs;
Y(1)=Ys;
xlabel('X');
ylabel('Y');
title(['逐点比较法第三象限直线插补']);
if((Xe-Xs)<0&(Ye-Ys)<0) XOY=3; 
end
for(i=1:NXY)            
   switch XOY        
   case 3
       if(Fm<=0)
          X(i+1)=X(i)-h;       
          Y(i+1)=Y(i);   
          Fm=Fm-Ylength; 
       else
          X(i+1)=X(i);          
          Y(i+1)=Y(i)-h; 
          Fm=Fm+Xlength;   
       end
       text((X(i)+X(i+1))/2,(Y(i)+Y(i+1))/2,[num2str(i)]);   
       temp_x=[X(i),X(i+1)];
       temp_y=[Y(i),Y(i+1)];
       plot(temp_x,temp_y,'r-');
   hold on;
   pause(0.5);           
   end
end  
   hold off;

结果: 

第四象限 

Xs0 = input('请输入起点横坐标XIn X0= ');
Ys0 = input('请输入起点纵坐标YIn Y0= ');
Xe0 = input('请输入终点横坐标XIn Xe= ');
Ye0 = input('请输入终点纵坐标YIn Ye= ');
h= input('输入步长\nh= ');
x=[Xs,Xe];
y=[Ys,Ye];
clc;
hold off;
plot(x,y);
hold on;    
Xlength=Xe-Xs;                
Ylength=Ye-Ys;                    
NXY= (abs(Xlength)+abs(Ylength))/h;
Fm=0;
X(1)=Xs;
Y(1)=Ys;
xlabel('X');
ylabel('Y');
title(['逐点比较法第四象限直线插补']);
if((Xe-Xs)>0&(Ye-Ys)<0) XOY=4; 
end
for(i=1:NXY)            
   switch XOY        
   case 4
       if(Fm<=0)
          X(i+1)=X(i)+h;       
          Y(i+1)=Y(i);   
          Fm=Fm-Ylength; 
       else
          X(i+1)=X(i);          
          Y(i+1)=Y(i)-h; 
          Fm=Fm-Xlength;   
       end
       text((X(i)+X(i+1))/2,(Y(i)+Y(i+1))/2,[num2str(i)]);   
       temp_x=[X(i),X(i+1)];
       temp_y=[Y(i),Y(i+1)];
       plot(temp_x,temp_y,'r-');
   hold on;
   pause(0.5);           
   end
end  
   hold off;    

结果:

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖釉-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值