永发信息网

用MATLAB运行koch曲线

答案:2  悬赏:10  手机版
解决时间 2021-04-24 19:07
用MATLAB运行koch曲线
最佳答案

把以下程序存为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)%%%%%%%%%%%%%%%%%%%%%


全部回答
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

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求《仙剑奇侠传4》游戏安全下载网址!!!
这款阿迪的型号多少
三星手机怎样调整时间,三星手机s4怎么手动调
为什么自行车的两个车轮平行不倒?
我的手机AMOIA530下载了一个软件后,JAVA管理
为什么我的酷币十万变六千
图标怎么全部不显示
宾利水产食品有限公司在什么地方啊,我要过去
如今社会技术门路很多,什么技术最吃的开呢?
工银瑞信增强收益A后市如何?
求圣安地列斯完30%左右的存档
深圳有汽车直接到广东怀集市汽车总站吗
在淘宝买DNF号被骗了
哪種香水,味道聞起來似有似無的啊 ,順便說
如果你发现你女朋友屋企收埋好多距同以前男朋
推荐资讯
炫舞紫钻怎么又掉级了
请大师帮忙解读易经卦象!今天我替老公摇了一
1+2+3+.+1998+1999+2000+1999+1998+.+3+2+1=(
为什么我的手提电脑不能玩征服?
余文乐唱过什么国语歌曲?
如果让张杰和陈楚生在比一次谁赢呢
DNF我PK的时候为什么像G一样
喜欢一个人会不会变?
日本能否实现政治大国地位?
APP雪鲤鱼上的手机qq杂用啊,
人的生命是谁的呢
居里夫人为什么没有申请镭的专利
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?