数据采集法逆圆插补

数据采集逆圆插补

从(8,0)点开始逆圆弧插补整圆
matlab程序:

posx=-8:0.1:8;
posy=sqrt(64-posx.^2);
plot(posx,posy,'r');
hold on;
posy=-1*sqrt(64-posx.^2);
plot(posx,posy,'r');
hold on;
dl=0.1;
x0=8.0;
y0=0.0;
x;
y;
dy0=dl;
while(1)	%第一象限
dx=dl*(y0+dy0/2)/8;
x=x0-dx;
y=sqrt(abs(64-x*x));
dy=y-y0;
dy0=dy;
plot([x0 x],[y0 y],'*');
pause(0.001);
 hold on;  
 if(x<0)
     break;
 end
 y0=y;
 x0=x;
 dy0=dy;
end
dy0=dl;
while(1)	%第二象限
dx=dl*(y0-dy0/2)/8;
x=x0-dx;
y=1*sqrt(abs(64-x*x));
dy=y0-y;
dy0=dy;
plot([x0 x],[y0 y],'*');
pause(0.001);
 hold on;  
 if(abs(x)>8)
     break;
 end
 y0=y;
 x0=x;
 dy0=dy;
end
dy0=dl;
while(1)	%第三象限
dx=dl*abs(y0-dy0/2)/8;
x=x0+dx;
y=-1*sqrt(abs(64-x*x));
dy=y0-y;
dy0=dy;
plot([x0 x],[y0 y],'*');
pause(0.001);
 hold on;  
 if(x>0)
     break;
 end
 y0=y;
 x0=x;
 dy0=dy;
end

dy0=dl;
while(1)	%第四象限
dx=dl*abs(y0-dy0/2)/8;
x=x0+dx;
y=-1*sqrt(abs(64-x*x));
dy=y-y0;
dy0=dy;
plot([x0 x],[y0 y],'*');
pause(0.001);
 hold on;  
 if(abs(x)>8)
     break;
 end
 y0=y;
 x0=x;
 dy0=dy;
end

% 定义起点坐标、终点坐标和心坐标 x1 = 0; % 起点的x坐标 y1 = 0; % 起点的y坐标 x2 = 10; % 终点的x坐标 y2 = 10; % 终点的y坐标 xc = 5; % 心的x坐标 yc = 5; % 心的y坐标 % 计算弧的半径和角度 r = sqrt((x1-xc)^2+(y1-yc)^2); % 弧的半径 theta1 = atan2(y1-yc,x1-xc); % 起点相对于心的角度 theta2 = atan2(y2-yc,x2-xc); % 终点相对于心的角度 dtheta = theta2 - theta1; % 弧的角度差 if dtheta < 0 % 如果角度差为负,说明是时针方向 dtheta = dtheta + 2*pi; % 将角度差转换为正值 end % 定义步长和时间间隔 h = 0.1; % 步长,即每次移动的弧长 dt = 0.01; % 时间间隔,即每次移动后的停顿时间 % 初始化点的坐标和角度 x = x1; % 当前点的x坐标 y = y1; % 当前点的y坐标 theta = theta1; % 当前点相对于心的角度 % 绘制弧的起点和终点 plot(x1,y1,'ro'); % 用红色点表示起点 hold on; % 保持图形 plot(x2,y2,'go'); % 用绿色点表示终点 axis equal; % 设置坐标轴的比例相等 grid on; % 打开网格线 % 循环,直到达到终点或超过终点 while theta < theta2 % 计算下一个点的坐标和角度 theta = theta + h/r; % 角度增加一个步长 x = xc + r*cos(theta); % x坐标按余弦函数变化 y = yc + r*sin(theta); % y坐标按正弦函数变化 % 绘制当前点 plot(x,y,'b.'); % 用蓝色小点表示点 drawnow; % 刷新图形 pause(dt); % 停顿一段时间 end % 绘制弧的终点 plot(x2,y2,'go'); % 用绿色点表示终点 hold off;
04-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值