永发信息网

用MATLAB运行koch曲线

答案:2  悬赏:10  手机版
解决时间 2021-04-24 19:07
  • 提问者网友:那叫心脏的地方装的都是你
  • 2021-04-24 05:13
用MATLAB运行koch曲线
最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-04-24 06:45

把以下程序存为koch.m


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%KOCH: Plots 'Koch Curve' Fractal
%
% koch(n) plots the 'Koch Curve' Fractal after n iterations
% e.g koch(4) plots the Koch Curve after 4 iterations.
% (be patient for n>8, depending on Computer speed)
%
% The 'kline' local function generates the Koch Curve co-ordinates using
% recursive calls, while the 'plotline' local function is used to plot
% the Koch Curve.
%
% Copyright (c) 2000 by Salman Durrani (dsalman@wol.net.pk)
%--------------------------------------------------------------------
function []=koch(n)
if (n==0)
x=[0;1];
y=[0;0];
line(x,y,'Color','b');
axis equal
set(gca,'Visible','off')
else
levelcontrol=10^n;
L=levelcontrol/(3^n);
l=ceil(L);
kline(0,0,levelcontrol,0,l);
axis equal
set(gca,'Visible','off')
set(gcf,'Name','Koch Curve')
end
%--------------------------------------------------------------------
function kline(x1,y1,x5,y5,limit)
length=sqrt((x5-x1)^2+(y5-y1)^2);
if(length>limit)
x2=(2*x1+x5)/3;
y2=(2*y1+y5)/3;
x3=(x1+x5)/2-(y5-y1)/(2.0*sqrt(3.0));
y3=(y1+y5)/2+(x5-x1)/(2.0*sqrt(3.0));
x4=(2*x5+x1)/3;
y4=(2*y5+y1)/3;
% recursive calls
kline(x1,y1,x2,y2,limit);
kline(x2,y2,x3,y3,limit);
kline(x3,y3,x4,y4,limit);
kline(x4,y4,x5,y5,limit);
else
plotline(x1,y1,x5,y5);
end
%--------------------------------------------------------------------
function plotline(a1,b1,a2,b2)
x=[a1;a2];
y=[b1;b2];
line(x,y);
%--------------------------------------------------------------------


%%%%%%%%%%%%然后在命令提示符处运行koch(5)%%%%%%%%%%%%%%%%%%%%%


全部回答
  • 1楼网友:人间朝暮
  • 2021-04-24 06:57
koch() 应该取得三个参数,如 koch(p, q, n) 其中 p 是起点的平面座标向量,例如 p=[0;0];,而 q 是起点的平面座标向量,例如 q=[1;0];。第三个参数 n 是一个无号整数 (0 或正整数),代表要「翘起」几个回合;所谓一个回合,是指将每一根线段都「翘起」一次。前面那四张图,就分别是 n 为 0, 1, 2 和 3 的效果。 koch() 的想法很巧妙:如果指定的「回合」是 0,就用 plot() 函式把线段画出来。否则就把输入的线段「翘起」成四根线段,把每一根线段送去下一回合 koch() 去做 (把回合数减一)。程式如下: function koch(p,q,n) if (n==0) plot([p(1);q(1)], [p(2);q(2)], 'LineWidth',4,'Color','red'); hold on; else c = q-p; c = [-c(2); c(1)]; c = (p+q)/2 + c/sqrt(12); % 求出「向左侧翘起 1/3」的顶点座标向量 c a = (2*p+q)/3; % 求出从 p 到 q 的 1/3 处端点座标向量 a b = (p+2*q)/3; % 求出从 p 到 q 的 2/3 处端点座标向量 b koch(p, a, n-1); % 对 pa 线段做下一回合 koch(a, c, n-1); % 对 ac 线段做下一回合 koch(c, b, n-1); % 对 cb 线段做下一回合 koch(b, q, n-1); % 对 bq 线段做下一回合 end koch() 程式只有两个技术需要稍加解释。首先,plot() 的前两个参数只是要话 p 至 q 的线段而已,没什麼特别。 plot() 的后四个参数是要 Matlab 用 4 point 粗的红色线条来画折线图。而 hold on 是让以前画的图保持在图形视窗里,否则新的 plot() 指令会自动清除留在图形视窗里面的任何旧图。 使用 koch() 需注意的是,p 和 q 必须是向量。譬如要说 p=[0;0]; 和 q=[1;0]; 而不是说 p=[0,0]; 和 q=[1,0];。其实很容易改写 koch() 来帮助使用者不受这个限制,留给读者当习题。 koch() 会打开 Matlab 的图形视窗,在里面画图。但是 koch() 执行之后的 hold 状态是 on,需自行将它关闭,以免以后画的所有图都叠在一起了。此外,koch() 也没有为我们处理座标边框,因此图形的比例不太对,这也需要在 koch() 执行之后再处理。以下是一组例子。 p=[0;0]; q=[1;0]; koch(p,q,2) hold off axis([0 1 -0.2 0.8]) axis square axis off

这个是用MATLAB实现绘制Koch雪花图形,

你可以参考一下 http://libai.math.ncu.edu.tw/bcc16/B/matlab/d15.shtml

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯