📄 liubian.asv
字号:
function liubian(n);
% 六边形分形;
% n 为递归次数,亦即分形的层数;
clc;close all;clear;
if nargin==0; % 设定递归次数n
n=4;
end
rand('state',3); % 将当前状态重设到状态3,
% 使每次程序运行时生成的各个分形六边形的颜色不变
C=rand(n+5,3); % 生成一个(n+5)*3的随机矩阵C,对各个分形填色
figure;
axis square equal; % 保持纵、横坐标的刻度单位一致
% axis([1 11 -1 1]); % 设定标度范围
grid;hold on;
a=-pi/6; % 设定六边形的偏转角度。a=-pi/6时,六边形有一条边平行于y轴
p=0; % 设定六边形中心位置。p=j时,中心位置为(j,0)
r=1; % 设定六边形的半径,即中心到顶角的距离
[p,r,n,a]=liuliu(p,r,n,a,C);
function [p,r,n,a]=liuliu(p,r,n,a,C);
% 绘制六边形,该函数通过递归实现对六边形的分形;
% p 是六边形的中心位置;
% r 是六边形的半径;
% n 是递归次数;
% a 是六边形的偏转角度;
% C 是颜色矩阵;
s=2; % 设定六边形的中心偏移量,从而可得到分形的生成过程
z=p+r*exp(i*([0:6]*pi*1/3+a))+s; % z 是主六边形的中心位置
z1=p+2*r*exp(i*([0:6]*pi*2/3+a))/4+s; % z1 是主六边形内各个分形的中心位置
pf=fill(real(z),imag(z),C(n+2,:)); % 生成一个已填色的六边形
set(pf,'EdgeColor',C(n+3,:)); % 设定六边形边缘的颜色
if n>0;
[z1(1),r,n,a]=liuliu(z1(1),r/2,n-1,a,C); % 绘制主六边形的分形
n=n+1;r=r*2;
[z1(2),r,n,a]=liuliu(z1(2),r/2,n-1,a,C);
n=n+1;r=r*2;
[z1(3),r,n,a]=liuliu(z1(3),r/2,n-1,a,C);
n=n+1;r=r*2;
[z1(4),r,n,a]=liuliu(z1(4),r/2,n-1,a,C);
n=n+1;r=r*2;
[z1(5),r,n,a]=liuliu(z1(5),r/2,n-1,a,C);
n=n+1;r=r*2;
[z1(6),r,n,a]=liuliu(z1(6),r/2,n-1,a,C);
n=n+1;r=r*2;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -