利用octave程序绘制其它两种分形图形,除了koch曲线、sierpinski三角形
时间: 2024-02-13 17:02:07 浏览: 178
分形图形生成
好的,我可以帮你回答这个问题。以下是两个常见的分形图形,你可以用Octave程序绘制它们:
1. Barnsley fern(巴恩斯利蕨)
Barnsley fern是一种类似于蕨类植物的分形图形,它由四个不同的变换组成。下面是一个简单的Octave程序,用于绘制Barnsley fern:
```
% 绘制Barnsley fern
% 定义初始点
x = 0;
y = 0;
% 定义四个变换
f1 = @(x, y) [0, 0; 0, 0.16] * [x; y];
f2 = @(x, y) [0.85, 0.04; -0.04, 0.85] * [x; y] + [0; 1.6];
f3 = @(x, y) [0.2, -0.26; 0.23, 0.22] * [x; y] + [0; 1.6];
f4 = @(x, y) [-0.15, 0.28; 0.26, 0.24] * [x; y] + [0; 0.44];
% 定义每个变换的概率
p = [0.01, 0.85, 0.07, 0.07];
% 绘制Barnsley fern
for i = 1:100000
% 随机选择一个变换
r = rand();
if r < p(1)
xy = f1(x, y);
elseif r < p(1) + p(2)
xy = f2(x, y);
elseif r < p(1) + p(2) + p(3)
xy = f3(x, y);
else
xy = f4(x, y);
end
% 绘制点
plot(xy(1), xy(2), '.', 'MarkerSize', 1, 'Color', [0, 0.6, 0]);
% 更新坐标
x = xy(1);
y = xy(2);
end
% 设置坐标轴范围
axis([-3, 3, 0, 10]);
```
2. Mandelbrot set(曼德博集合)
Mandelbrot set是一种复数集合,它由一系列复平面上的点组成。下面是一个简单的Octave程序,用于绘制Mandelbrot set:
```
% 绘制Mandelbrot set
% 定义绘图范围
xmin = -2;
xmax = 1;
ymin = -1.5;
ymax = 1.5;
% 定义绘图参数
maxiter = 100;
eps = 1e-6;
% 定义网格
nx = 1000;
ny = 1000;
x = linspace(xmin, xmax, nx);
y = linspace(ymin, ymax, ny);
% 初始化绘图矩阵
M = zeros(ny, nx);
% 计算Mandelbrot set
for i = 1:nx
for j = 1:ny
c = x(i) + 1i * y(j);
z = 0;
for k = 1:maxiter
z = z^2 + c;
if abs(z) > 2
M(j, i) = k;
break;
end
end
end
end
% 绘制Mandelbrot set
imagesc(x, y, M);
set(gca, 'YDir', 'normal');
colormap(hot);
axis equal;
```
希望这些程序能够帮到你!
阅读全文