mat*_*the 2 recursion matlab fractals
以下是我的代码:
function sierpinski(A, B, C, n)
if n == 0
patch([A(1), B(1), C(1)], [A(2), B(2), C(2)], [0.0 0.0 0.0]);
else
sierpinski(A, (A + B)/2, (A + C)/2, n-1);
sierpinski(B, (B + A)/2, (B + C)/2, n-1);
sierpinski(C, (C + A)/2, (C + B)/2, n-1);
end
% sierpinski([0 0], [1 0], [.5 .8], 8)
Run Code Online (Sandbox Code Playgroud)
这不是很有效.我想首先生成所有数据然后打补丁,但我不知道如何正确使用.另外,我的代码可以用于循环吗?
您想要编写一个函数来生成数据,另一个函数来绘制它是一个很好的想法 - 将数据生成与处理和处理与输出分开通常是一个好主意.我会做这样的事情:
function out = sierpinski(a, b, c, n)
if n == 0
out.xvals = [a(1), b(1), c(1)];
out.yvals = [a(2), b(2), c(2)];
else
out1 = sierpinski(a, (a+b)/2, (a+c)/2, n-1);
out2 = sierpinski(b, (a+b)/2, (b+c)/2, n-1);
out3 = sierpinski(c, (a+c)/2, (b+c)/2, n-1);
out = [out1, out2, out3];
end
end
Run Code Online (Sandbox Code Playgroud)
这将创建一个长度结构3^n,其每个条目包含sierpinski三角形中一个小三角形的坐标.您绘制它的代码可能看起来像
>> out = sierpinski([0,0], [1,0], [0.5, sqrt(3)/2], 8);
>> figure(); hold on;
>> for i = 1:length(out)
patch(out(i).xvals, out(i).yvals, 'k');
end
Run Code Online (Sandbox Code Playgroud)
在我的机器上崩溃(似乎Matlab不能很好地处理同一个图上的数千个补丁),但是在每个小三角形的角落处绘制一个点的类似循环.
>> x = [out.xvals];
>> y = [out.yvals];
>> plot(x, y, '.');
Run Code Online (Sandbox Code Playgroud)
产生这个情节
