clear
all; hold off;
h(1)=1;n(1)=1;
a(1,1,1)=0;
m=6; % 层数
kc=2; %分叉数
for k=2:m;h(k)=h(k-1)/(2*kc-1);n(k)=n(k-1)*kc;end;
% right end point a
for k=2:m; for i=1:n(k-1);for
j1=1:kc;j=kc-j1;a(k,kc*i-j,1)=a(k-1,i,1)+2*(j1-1)*h(k);end;end;end;
%k=2
% Basic figure
z=[0.5 1
0.5 0
0 0
1 0]; plot(z(:,1),z(:,2));
axis([-0.2 1.1 -m
1.1]);
% top point
j=0;
for k=1:m;for
i=1:n(k);j=j+1;px(j,1)=a(k,i,1)+h(k)/2;px(j,2)=2-k;px(j,3)=h(k);end;end;
%k=1
nj=j;
for j=2:nj; q(:,1)=z(:,1)*px(j,3);q(:,2)=z(:,2);%伸缩变换
wx=px(j,1)-q(1,1);wy=px(j,2)-q(1,2);
vx=q(:,1)+wx;vy=q(:,2)+wy;%坐标平移
hold on; plot(vx,vy);
end;%j=2
若要调节康托图的维数,只需将代码中的分叉数修改一下。而更改康托图的层数,只需修改相应的数据。
二维的:
clear all; hold off;
h(1)=1;n(1)=1; a(1,1)=0;
m=3; % 层数
kc=2; %分叉数
for k=2:m;h(k)=h(k-1)/(2*kc-1);n(k)=n(k-1)*kc;end;
% right end point a
for k=2:m; for i=1:n(k-1);for
j1=1:kc;j=kc-j1;a(k,kc*i-j)=a(k-1,i)+2*(j1-1)*h(k);end;end;end;
%k=2
% Basica Figure
z=[0 0
0 1
1 1
1 0
0 0
];
plot(z(:,1),z(:,2));axis([-0.1 1.1 -0.1 1.1]);
for k=2:m;
for i=1:n(k);for j=1:n(k);q=z*h(k);%伸缩变换
wx=a(k,i)-q(1,1);wy=a(k,j)-q(1,2);
vx=q(:,1)+wx;vy=q(:,2)+wy;%坐标平移
hold on; plot(vx,vy);
end;end; %i=,j=
end; %k=
1284

被折叠的 条评论
为什么被折叠?



