Koch雪花曲线的MATLAB实现
Koch曲线是分形图案的一个代表,对其研究很有意义,在此不敢多说。请见matrix67的博客:
http://www.matrix67.com/blog/archives/243
用一个复数序列代表整个图形,序列首尾相连,在复平面上的依次相连就构成了每一次的图形;对复数序列进行一次迭代,可以生成更细分的图形。下面分析迭代的计算过程。
迭代次数用n表示,映射Txn↦xn+1T\mathbf x_n\mapsto \mathbf x_{n+1}Txn↦xn+1代表了从这一次的图形到下一次这个迭代过程,第n次的序列xn={x1,x2,⋯,xkn}∈Ckn\mathbf x_n=\left\{\begin{matrix} x_1,x_2,\cdots,x_{k_n}\end{matrix}\right\}\in\Complex^{k_n}xn={x1,x2,⋯,xkn}∈Ckn,这里共有几个点是用knk_nkn来表示的。例如,n=1n=1n=1时,代表初始的正三角形,复数序列x1={x1,x2,x3,x1}={0,1,1/2(1+3ı),0}\mathbf x_1=\left\{\begin{matrix} x_1,x_2,x_3,x_1\end{matrix}\right\}=\left\{\begin{matrix} 0,1,1/2(1+\sqrt 3\imath),0\end{matrix}\right\}x1={x1,x2,x3,x1}={0,1,1/2(1+3ı),0}。
之所以用复数来表示,是为了方便对每一段进行映射。上图三角形的三条边,都是按照如下流程
- 等分三段,第1个点和第5个点与原来一样;
- 添加第2个点,在原矢量x1→x2x_1\to x_2x1→x2的1/31/31/3处;
- 添加第3个点,矢量y2→y3y_2 \to y_3y2→y3长度不变,方向顺时针转π/3\pi/3π/3;
- 添加第4个点,在原矢量x1→x2x_1\to x_2x1→x2的2/32/32/3处。
已知对复数乘以一个模值为1的复数eıθe^{\imath \theta}eıθ可以改变其辐角,而不改变其大小,改变的方向是逆时针θrad\theta \text{rad}θrad。所以对第一段x1→x2x_1\to x_2x1→x2采取如下算法:
- Δx=x2−x1\Delta x=x_2-x_1Δx=x2−x1, y1=x1,y5=x5y_1=x_1,y_5=x_5y1=x1,y5=x5
- y2=x1+1/3Δxy_2=x_1+1/3\Delta xy2=x1+1/3Δx
- y3=y2+13e−π/3ıΔxy_3=y_2+\frac1 3e^{-\pi/3\imath}\Delta xy3=y2+31e−π/3ıΔx
- y4=y2+1/3Δxy_4=y_2+1/3\Delta xy4=y2+1/3Δx
至于总共有多少段,那不必要求证,关键是对上一个序列xn={x1,x2,⋯,xkn}\mathbf x_n=\left\{\begin{matrix} x_1,x_2,\cdots,x_{k_n}\end{matrix}\right\}xn={x1,x2,⋯,xkn}的每一个分段向量xk→xk+1x_k\to x_{k+1}xk→xk+1都能进行如上计算。
Koch曲线代码
这个程序用MATLAB实现是极其简单的。
% Edited by NICAI001
% 通过复数曲线绘制Koch雪花
x_n=[1 (1+sqrt(3)*1i)/2 0 1];
slice=6; %这里是迭代次数
for n=1:slicex_p=x_n;lastSeg=length(x_n)-1;for k=0:lastSeg-1dX=(x_p(k+2)-x_p(k+1))/3;x_n(4*k+1)=x_p(k+1);x_n(4*k+2)=x_p(k+1)+dX;x_n(4*k+3)=x_n(4*k+2)+dX*(1/2-sqrt(3)*1i/2);x_n(4*k+4)=x_p(k+1)+2*dX;endx_n(4*lastSeg+1)=x_p(lastSeg+1);
end
plot(x_n,'k--'),hold on;
axis equal;
类似地对代码稍作改动可以绘制以下图案
3次迭代
6次迭代
####代码如下
y=[1 1i+1 1i 0 1];
slice=5;
for k=1:slice;
x=y;n=length(x)-1;
for s=0:n-1dz=(x(s+2)-x(s+1))/3;y(5*s+1)=x(s+1);y(5*s+2)=x(s+1)+dz;y(5*s+3)=y(5*s+2)-dz*1i;y(5*s+4)=y(5*s+3)+dz;y(5*s+5)=y(5*s+4)+dz*1i;
end
y(5*n+1)=x(n+1);
endplot(y),axis equal;
以上代码中y向量的初始值改成了正方形图案;dz没有变,仍然是原x向量三等分的值;但dz所乘的单位复数变为了-1i和1i,表示在dz方向上右偏或左偏90度;最后由于分割时原来一段上出现了5个点,最后要加上一个点 y(5)。
觉得之前的博客没有把问题说清楚,所以再来修改一下。
Koch雪花曲线的MATLAB实现相关推荐
- python海龟图画koch雪花曲线_python画图——雪花(科赫曲线)
科赫曲线是一种分形,其形态非常像雪花,因此又被称作科赫雪花.雪花曲线. 下面是用python的turtle包让我们来实时画一个 import turtle def koch(t,n): #定义一个函数 ...
- python雪花曲线实验报告_探究“雪花”曲线
张志勇 美丽的分形是大自然景物的抽象,它无比丰富的细节.绚丽多彩的结构常令我们流连忘返,图1中的科赫(Koch)雪花曲线等给我们以美的遐想.分形在多个领域有着广泛的应用,如物理中的湍流.化学中的高分子 ...
- matlab雪花图形,koch曲线与koch雪花的MATLAB实现
代码 % -- function koch(Ax, Ay, Bx, By) % 控制递归深度 Deepth = ; % 控制图画大小 Size = ; if ((Bx-Ax)^ + (By-Ay)^) ...
- OpenGL进阶(七)-康托尔集 谢尔宾斯基地毯 Koch雪花
这一篇关于分形图像,当然只是入门. 分形通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状",即具有自相似的性质.分形有几种类型 ...
- 旋转Koch雪花的绘制(MFC)
Koch雪花简介 Koch雪花的实际结构为三条Koch曲线的拼接,这三条Koch曲线分别构成正三角形的三条边即可.因此在绘制Koch曲线的设计思想为首先绘制一条线段,,假设线段长度为L,则在线段L// ...
- 分形之科赫(Koch)雪花
科赫曲线是一种分形.其形态似雪花,又称科赫雪花.雪花曲线.瑞典人科赫于1904年提出了著名的"雪花"曲线,这种曲线的作法是,从一个正三角形开始,把每条边分成三等份,然后以各边的中间 ...
- matlab求非圆齿轮的节曲线,基于MATLAB的非圆齿轮节曲线设计
第 34卷 第 4期 2016年 4月 坎 倾县 备 MACHINERY & ELECTRONICS Vo1.34 NO.4 Apr.2016 基于 MATLAB的非圆齿轮节曲线设计 张 健 ...
- 【定时同步系列10】16QAM基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB仿真
引言 重要声明:为防止爬虫和盗版贩卖,文章中的核心代码和数据集可凭[CSDN订阅截图或公z号付费截图]私信免费领取,一律不认其他渠道付费截图! 在前面的博客中 [定时同步系列8]QPSK基带调制+Ga ...
- java画雪花_java分形绘制科赫雪花曲线(科赫曲线)代码分享
首先我们举个例子: 我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形.换句话说,较小的分支通过放大适当的比例后可以得到一个与整体几乎完全一致的花簇.因此我们可以说西兰花 ...
最新文章
- sqlserver清除日志
- shell中的变量及运算符
- nginx常用代理配置
- python设置坐标轴刻度值字体大小_python 设置xlabel,ylabel 坐标轴字体大小,字体类型...
- django2.2+pymysql0.9.3报错(亲测)
- 如何理解const char*, char const*, char*const等
- thikphp 控制器
- Julia: MFDCCA和MFCCA算法代码
- 22条最常用Python代码,快收藏
- Louvain算法介绍
- js动态添加元素时绑定onclick函数
- 03-12306验证码文字 识别
- 深度学习21_李宏毅_04_Local Minimum And Saddle Point
- 数贝携手付晓岩老师带你玩转“企业架构”
- 学生成绩录入系统与查询
- 计算机取代人脑的英语作文,关于电脑和人脑差别的英语作文
- 八字易经算法之用JAVA实现完整排盘系统
- 两个女孩全程不带现金,只付加密货币几乎游遍大半个国家是一种什么体验?...
- 3.22 以太坊:以太猫源码分析2
- 【华为认证-每日十题】HCNP-RS-IENP(31-40)【问】