r=125;%动平台铰链所在圆半径
zb=-27;%动平台上铰链高度
rou=355;%杆长
u=sqrt(355^2-284^2)*cos(pi/180*[60,180,300]);%圆心位置x
v=sqrt(355^2-284^2)*sin(pi/180*[60,180,300]);%圆心位置y
zamax=350;%滑块运动最大长度
zamin=150;%滑块运动最小长度
zmin=461;%工作空间最小高度
zmax=661;%工作空间最大高度
wmax=zamax-zb;%圆心位置最大高度
wmin=zamin-zb;%圆心位置最小高度
jd=1e-9;%设置判断重合的精度
ratio=5;%离散圆弧的点数
%分情况处理
%情况一———————————————————————————————————————————————————————————————————————
ARCset_local=[];%初始化弧表
s_local=0;%初始化弧表数量
point_turn=532;%转变点
for z=point_turn:zmax
CIRset=[];%初始化圆集合
cirsets;%生成圆表,得到同一z坐标下的圆表CIRset
ARCset=[];%初始化弧集合
arcsets;%生成交集边界弧,得到同一z坐标下的弧表ARCset
%将同一z坐标下交集边界弧集ARCset放入总弧表ARCset_local中
if(~isempty(ARCset))
s_ztemp=size(ARCset,2);
ARCset_local(:,s_local+1:s_local+s_ztemp)=[ARCset;z*ones(1,s_ztemp)];
s_local=s_local+s_ztemp;
end
%同一z坐标下交集边界弧集ARCset被放入总弧表ARCset_local中,弧表数量记录增加
end
clear s_ztemp CIRset ARCset z Rmax Rmin;
%绘制可达工作空间边界
PTset=[];%初始化点集
for i=1:s_local
t_temp=linspace(ARCset_local(4,i),ARCset_local(5,i),ratio);
r_temp=ARCset_local(3,i);
x_temp=ARCset_local(1,i)+r_temp*cos(t_temp);
y_temp=ARCset_local(2,i)+r_temp*sin(t_temp);
PTset(:,ratio*(i-1)+1:ratio*i)=[x_temp;y_temp;ARCset_local(6,i)*ones(1,ratio)];
end
clear t_temp r_temp x_temp y_temp s_local i;
plot3(PTset(1,:),PTset(2,:),PTset(3,:));grid on;axis equal; %(1,:) 第一行所有数
%绘制完成
%{
%修改版本
a=[max(PTset(1,:)),min(PTset(1,:)),max(PTset(2,:)),min(PTset(2,:))];
[x,y]=meshgrid(linspace(a(1),a(2),200),linspace(a(3),a(4),200));
z=griddata(PTset(1,:),PTset(2,:),PTset(3,:),x,y);
mesh(x,y,z);axis equal;
clear PTset ARCset_local a x y z;
%修改版本绘制完成
%}
%情况一———————————————————————————————————————————————————————————————————————
hold on;
%分情况处理
%情况二———————————————————————————————————————————————————————————————————————
ARCset_local=[];%初始化弧表
s_local=0;%初始化弧表数量
point_turn=532;%转变点
for z=zmin:point_turn
CIRset=[];%初始化圆集合
cirsets;%生成圆表,得到同一z坐标下的圆表CIRset
ARCset=[];%初始化弧集合
arcsets;%生成交集边界弧,得到同一z坐标下的弧表ARCset
%将同一z坐标下交集边界弧集ARCset放入总弧表ARCset_local中
if(~isempty(ARCset))
s_ztemp=size(ARCset,2);
ARCset_local(:,s_local+1:s_local+s_ztemp)=[ARCset;z*ones(1,s_ztemp)];
s_local=s_local+s_ztemp;
end
%同一z坐标下交集边界弧集ARCset被放入总弧表ARCset_local中,弧表数量记录增加
end
clear r zb rou u v zamax zamin zmin zmax wmax wmin s_ztemp CIRset ARCset z Rmax Rmin;
%绘制可达工作空间边界
PTset=[];%初始化点集
for i=1:s_local
t_temp=linspace(ARCset_local(4,i),ARCset_local(5,i),ratio);
r_temp=ARCset_local(3,i);
x_temp=ARCset_local(1,i)+r_temp*cos(t_temp);
y_temp=ARCset_local(2,i)+r_temp*sin(t_temp);
PTset(:,ratio*(i-1)+1:ratio*i)=[x_temp;y_temp;ARCset_local(6,i)*ones(1,ratio)];
end
clear t_temp r_temp x_temp y_temp s_local i;
plot3(PTset(1,:),PTset(2,:),PTset(3,:));grid on;axis equal;
%绘制完成
%{
%修改版本
a=[max(PTset(1,:)),min(PTset(1,:)),max(PTset(2,:)),min(PTset(2,:))];
[x,y]=meshgrid(linspace(a(1),a(2),200),linspace(a(3),a(4),200));
z=griddata(PTset(1,:),PTset(2,:),PTset(3,:),x,y);
mesh(x,y,z);axis equal;
clear PTset ARCset_local a x y z;
%修改版本绘制完成
%}
%情况二———————————————————————————————————————————————————————————————————————
hold off;