MATLAB绘制圆变形动态图
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/18 15:12:56
MATLAB绘制圆变形动态图
function h=circle(r,x0,y0,C,Nb)
% CIRCLE adds circles to the current plot
% %
% r 圆之半径,可为列矩阵,代表可同时绘制许多同心或同性质的圆.
%
% -x0,y0 圆心之座标,可为矩阵,代表可同时绘制许多不同圆心位置之圆.
%
% -C 圆之颜色,不说明时,由指令依序指定,亦可作向量指定.
%
% -Nb 绘圆时所用之点数,可用向量,若不指定,则以300点为预设值.
%
% Check the number of input arguments
switch nargin
case 0
r=[];x0=[];y0=[];C=[];Nb=[];
case 1
x0=[];y0=[];C=[];Nb=[];
case 2
y0=zeros(1,length(x0));C=[];Nb=[];
case 3
C=[];Nb=[];
case 4
Nb=[];
end
if length(x0)~=length(y0),
if length(y0)==1,
y0=ones(1,length(x0))*y0;
elseif length(x0)==1,
x0=ones(1,length(y0))*x0;
else
error('The lengths of x0 and y0 must be identical');
end;
end;
% set up the default values
if isempty(r),r=1;end;
if isempty(x0),x0=0;end;
if isempty(y0),y0=0;end;
if isempty(Nb),Nb=300;end;
if isempty(C),C=get(gca,'colororder');end;
if isstr(C),C=C(:);end;
% work on the variable sizes
x0=x0(:);
y0=y0(:);
r=r(:);
Nb=Nb(:);
% how many rings are plottet
if length(r)~=length(x0)
maxk=length(r)*length(x0);
else
maxk=length(r);
end;
route=0;
if length(x0)==1,route=1; end
if length(r)==1,route=2; end
if length(x0)==length(r),route=3; end
% drawing loop
for k=1:maxk
switch route
case 1
xpos=x0;
ypos=y0;
rad=r(k);
case 2
xpos=x0(k);
ypos=y0(k);
rad=r;
case 3
xpos=x0(k);
ypos=y0(k);
rad=r(k);
otherwise
rad=r(fix((k-1)/size(x0,1))+1);
xpos=x0(rem(k-1,size(x0,1))+1);
ypos=y0(rem(k-1,size(y0,1))+1);
end; % for switch
theta=linspace(0,2*pi,Nb(rem(k-1,size(Nb,1))+1,:)+1);
h(k)=line(rad*cos(theta)+xpos,rad*sin(theta)+ypos);
set(h(k),'color',C(rem(k-1,size(C,1))+1,:));
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
前面是是圆的函数
下面的主函数(把它放在运行窗口或者另外建一个文件也行)
r=[1 2 3 4 4 5 6]; %设置半径
x0=1; %坐标X
y0=1; %坐标Y
for i=1:length(r)
hold on
circle(r(i),x0,y0);%后面的颜色可以不设置
pause(1) %设置时间,例子是1s.
end
hold off
% CIRCLE adds circles to the current plot
% %
% r 圆之半径,可为列矩阵,代表可同时绘制许多同心或同性质的圆.
%
% -x0,y0 圆心之座标,可为矩阵,代表可同时绘制许多不同圆心位置之圆.
%
% -C 圆之颜色,不说明时,由指令依序指定,亦可作向量指定.
%
% -Nb 绘圆时所用之点数,可用向量,若不指定,则以300点为预设值.
%
% Check the number of input arguments
switch nargin
case 0
r=[];x0=[];y0=[];C=[];Nb=[];
case 1
x0=[];y0=[];C=[];Nb=[];
case 2
y0=zeros(1,length(x0));C=[];Nb=[];
case 3
C=[];Nb=[];
case 4
Nb=[];
end
if length(x0)~=length(y0),
if length(y0)==1,
y0=ones(1,length(x0))*y0;
elseif length(x0)==1,
x0=ones(1,length(y0))*x0;
else
error('The lengths of x0 and y0 must be identical');
end;
end;
% set up the default values
if isempty(r),r=1;end;
if isempty(x0),x0=0;end;
if isempty(y0),y0=0;end;
if isempty(Nb),Nb=300;end;
if isempty(C),C=get(gca,'colororder');end;
if isstr(C),C=C(:);end;
% work on the variable sizes
x0=x0(:);
y0=y0(:);
r=r(:);
Nb=Nb(:);
% how many rings are plottet
if length(r)~=length(x0)
maxk=length(r)*length(x0);
else
maxk=length(r);
end;
route=0;
if length(x0)==1,route=1; end
if length(r)==1,route=2; end
if length(x0)==length(r),route=3; end
% drawing loop
for k=1:maxk
switch route
case 1
xpos=x0;
ypos=y0;
rad=r(k);
case 2
xpos=x0(k);
ypos=y0(k);
rad=r;
case 3
xpos=x0(k);
ypos=y0(k);
rad=r(k);
otherwise
rad=r(fix((k-1)/size(x0,1))+1);
xpos=x0(rem(k-1,size(x0,1))+1);
ypos=y0(rem(k-1,size(y0,1))+1);
end; % for switch
theta=linspace(0,2*pi,Nb(rem(k-1,size(Nb,1))+1,:)+1);
h(k)=line(rad*cos(theta)+xpos,rad*sin(theta)+ypos);
set(h(k),'color',C(rem(k-1,size(C,1))+1,:));
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
前面是是圆的函数
下面的主函数(把它放在运行窗口或者另外建一个文件也行)
r=[1 2 3 4 4 5 6]; %设置半径
x0=1; %坐标X
y0=1; %坐标Y
for i=1:length(r)
hold on
circle(r(i),x0,y0);%后面的颜色可以不设置
pause(1) %设置时间,例子是1s.
end
hold off