matlab分形作图(一)

您所在的位置:网站首页 分形维数图像分割怎么做出来的 matlab分形作图(一)

matlab分形作图(一)

2024-04-21 18:28| 来源: 网络整理| 查看: 265

〇雪花图形的复数三点同时作图法

cc;

new=[0,1,1/2+1i*sqrt(3)/2,0];

subplot(2,3,1);%第一个图是三角形,顶点new

plot(new)

axis equal

for k=1:5;

old=new;

n=length(old)-1;%第一次时n=3,4个点之间有3条线

diff=(old(2:n+1)-old(1:n))/3;%就是三角形三条边的向量缩小三倍

new(1:4:4*n-3)=old(1:n);%要plot出第二个图形,new要有这几个图形的顶点坐标,这是三角形三个顶点的坐标

new(2:4:4*n-2)=old(1:n)+diff;%相当于对三个顶点分别沿其方向平移

new(3:4:4*n-1)=new(2:4:4*n-2)+diff*exp(-1i/3*pi);%diff可以角度变换 顺时针-i,逆时针i

new(4:4:4*n)=old(1:n)+diff+diff;

new(4*n+1)=old(n+1);%最后回到原点

subplot(2,3,k+1)

plot(new)

axis equal

end

②分形树的字符数组画法

% 图形可视为长短不一走向不同的线段组合

% 用字符系统表示各种线段的画法和组合

% 画图就是按照字符系统来画线段

%画分形树 初始元F 生成元FF-[-F+F+F]+[+F-F-F]

%转角 pi/8 压缩因子1/3

clear

init='F';%初始元

fund='FF-[-F+F+F]+[+F-F-F]';%生成元

A=pi/2;

z=0;

b=pi/8;

zA=[0,A];

for i=2:5

init=strrep(init,'F',fund);%把init中的‘F’字符替换成fund字符串,此时的init还是一维的

n=(1/3)^(i-1);

end

S=length(init);

figure;

axis equal;

hold on

for k=1:S

switch init(k);%比较init中的每一位字符,那上面蕴含变换信息

case 'F',

plot([z,z+n*exp(1i*A)],'linewidth',2)

z=z+n*exp(1i*A);

case '+'

A=A+b;

case '-'

A=A-b;

case '[' %因为plot是'一笔画',所以分形到枝杈的地方要回去,先记录之前的位置和角度

zA=[zA;[z,A]];

case ']'

z=zA(end,1);

A=zA(end,2);

zA(end,:)=[];

otherwise

end

end

③分形树相似平移法

u=[0,1i];%直线

for k=1:4

m=u/3;%对直线缩小三倍

uu=[m,... %缩小三倍的直线

1i/3+m*exp(1i*(pi/6)),... %旋转30°并向上平移1/3

m+1i/3,...

2i/3+m*exp(-1i*pi/6),...

m+2i/3]; %对应图1的五条长度1/3的直线

subplot(2,2,k)

plot(uu) %相似平移法在画分形时非常好用好理解

hold on

pause(1)

axis([-0.5 0.5 0 1]);

u=uu;

end

④相似平移对矩阵的操作

u=[0;1;0.5+0.5i*sqrt(3); 0];%这里用列向量 polt实际上变成了对矩阵作图

for k=1:4

m=0.5*u;

u=[m m+0.5 m+0.25+0.25i*sqrt(3)];%加的这个数与k无关 因为m始终是一个1/4的大小 这是平移思想的体现

subplot(2,2,k)

plot(real(u),imag(u),'g')%直接写plot(u)也行

end

⑤用相似移动法做作业

%相似移动法画分形图 因为是直线 所以用把初始值设成[0,i],然后第一幅图的

% 直线个数是1[0,i],第二幅图的直线个数是6:通过对[0,i]进行放缩和平移实现作图

% 第三幅图的直线个数是36(使用相似移动就不用考虑之后的东西了

cc

figure

i=1i;

u=[0,i];

subplot(2,3,1)

plot(u)

axis([-0.5 0.5 0 3])

hold on

for k=1:5

uu=[u,...

0.56*i+0.33*u*exp(i*pi/6),...

0.56*i+0.33*u*exp(-i*pi/6),...

NaN,...

i+0.26*u*exp(i*pi/6),...

i+0.26*u*exp(-i*pi/6),...

i+0.6667*u];

subplot(2,3,k+1)

plot(uu)

pause(1)

u=uu;

end

⑥画四面体分形

figure

Xabc=[0,1,1/2,0];

Yabc=[0,0,sqrt(3)/2,0];

Zabc=[0,0,0,0];

Xbcd=[1,1/2,1/2,1];

Ybcd=[0,sqrt(3)/2,sqrt(3)/6,0];

Zbcd=[0,0,2/3,0];

Xcda=[1/2,1/2,0,1/2];

Ycda=[sqrt(3)/2,sqrt(3)/6,0,sqrt(3)/2];

Zcda=[0,2/3,0,0];

Xdab=[1/2,0,1,1/2];

Ydab=[sqrt(3)/6,0,0,sqrt(3)/6];

Zdab=[2/3,0,0,2/3];

init=[Xabc,Xbcd,Xcda,Xdab;Yabc,Ybcd,Ycda,Ydab;Zabc,Zbcd,Zcda,Zdab];

nan=[NaN;NaN;NaN];

subplot(2,2,1)

plot3(init(1,:),init(2,:),init(3,:),'g')

u=1/2*init;%初始化u

for k=1:3

u1=[u(1,:)+0.5;u(2,:);u(3,:)];

u2=[u(1,:)+0.25;u(2,:)+sqrt(3)/4;u(3,:)];

u3=[u(1,:)+0.25;u(2,:)+sqrt(3)/12;u(3,:)+1/3];

uu=[u,nan,u1,nan,u2,nan,u3,nan];

subplot(2,2,k+1)

plot3(uu(1,:),uu(2,:),uu(3,:),'g')%暂时没想出来怎么改写成fill3的形式

pause(1)

u=uu/2;

end

%方法 先考虑了三维坐标下 一个面的分形(这样只有三组数,否则有12组)

%发现写成[X;Y;Z]形式 可以非常方便地plot3出来,并且能相对容易的进行平移伸缩变换

以上为计算物理上课笔记

封面

i=1i;

x=linspace(-2.0,1.0,400);

y=linspace(-1.5,1.5,400);

[Re,Im]=meshgrid(x,y);

C=Re+i*Im;

B=0;

Z=0;

for I=1:50

Z=Z.*Z+C; %

B=B+(abs(Z)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3