利用matlab绘制简单IFS图形(Sierpinski三角形和BarnsleyFern巴恩斯利蕨)

利用matlab绘制简单IFS图形(Sierpinski谢尔宾斯基三角形和BarnsleyFern巴恩斯利蕨)

一、SierpinskiTriangle谢尔宾斯基三角形

谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它的维度为log(3)/log(2)=1.585。(来自百度

下面用迭代的方式绘制谢尔宾斯基三角形,方法如下:

在平面上任取三个不共线的点A、B、C作为三角形的3个顶点,之后选取另一点作为当前点。
1计算当前点与随机某一顶点的中点O
2绘制该中点O,并将该点作为新的当前点。重复步骤1
在这里插入图片描述
效果如下:
在这里插入图片描述
虽然初始当前点在三角形之外,但是随着迭代,很快便具有三角形的外观。随着时间的增加呈现出谢尔宾斯基三角形。

谢尔宾斯基三角形具有空间的自相似性。比如根据上面的算法得到的正三角形如下图所示(共计2^17个点)。
在这里插入图片描述
对上图进行灰度化显示,按分辨率大小划分区间,将点数多的区间标记为白色,将点数少的区间标记为黑色。逐渐提高图像分辨率,可以得到如下动图:
在这里插入图片描述
matlab代码如下:

%谢尔宾斯三角形
%给定初始3点
Tripots=rand(3,2);
Tripots=[0,1;1*sin(2*pi/3),1*cos(2*pi/3);1*sin(4*pi/3),1*cos(4*pi/3)];

%定义SierpinskiTriangle三角形点数
N=2^17;%定义1000个点
SierpinskiTriangle=zeros(N+3,2);
SierpinskiTriangle(1:3,:)=Tripots;
%定义参考点
ReferencePoint=rand(1,2);

for j=1:N
    %选取参考点与随机角点的中点,作为新的参考点
    ReferencePoint=(Tripots(randi([1,3],1),:)+ReferencePoint)/2;
    %记录在SierpinskiTriangle中
    SierpinskiTriangle(3+j,:)=ReferencePoint;
end

scatter(SierpinskiTriangle(:,1),SierpinskiTriangle(:,2),0.1,'filled')
axis off

灰度图绘制利用hist3()函数。

参考:
1数学实验(李尚志)P125
2知乎:谢尔宾斯基三角形能用编程写出来么?该怎么写?https://www.zhihu.com/question/53448865

二、BarnsleyFern巴恩斯利蕨

巴恩斯利蕨(Barnsley fern),名字来源于它的首创者——美国佐治亚理工学院的巴恩斯利教授。

为了生成植物的形状,巴恩斯利教授把两种运算规则相结合:确定性算法与随机性算法。确定性算法的公式如下:
f ( x , y ) = [ a b c d ] [ x y ] + [ e f

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值