【编程书籍】《The Nature of Code》笔记 -《代码本色》8.分形

本文详细介绍了分形的概念,由曼德博集合引出,强调了分形在不同尺度下的自相似性和精细结构。通过递归的概念,探讨了如何实现康托集和科赫曲线,并利用ArrayList技术进行实现。接着,文章讨论了分形树的绘制,包括固定夹角和随机角度的变化,以及随机树枝数量和分形角度的影响。最后,介绍了L系统作为模拟植物生长模式的工具,展示了其在生成递归分形图案中的应用。
摘要由CSDN通过智能技术生成

8.1 什么是分形

*背景:术语分形(源自拉丁文fractus,意思是“破碎”)是数学家本华·曼德博(Benoit Mandelbrot)于1975年提出的。在他的《大自然的分形几何》(The Fractal Geometry of Nature)中,分形被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且 每一部分都是整体缩小后的形状(至少近似)”。
最著名且最具代表性的分形图案是以曼德博的名字命名的,也就是上图的曼 德博集合。曼德博集合是由复二次多项式迭代生成的。
在这里插入图片描述

*思想:
每个细节形状都是缩小后的整体形状
在这里插入图片描述

*辨析:
:单纯的自相似并不能构成分形。一 条直线也具有自相似的特征,它在任意缩放尺度下看起来都是一样的,而且可以看成 是由无数短直线构成的,但直线并不是分形。
:分形的特点是在小尺度下也有精细的结构。

8.2 递归

*示例1:

在这里插入图片描述

void drawCircle(int x, int y, float radius) 
{
   
	ellipse(x, y, radius, radius);
	if(radius > 2) 
	{
   
		radius *= 0.75f;
		drawCircle(x, y, radius); drawCircle() //函数递归地调用自身
	}
}

*示例2:
在这里插入图片描述

void setup() 
{
   
	size(400,400);
	smooth();
}
void draw() 
{
   
	background(255);
	drawCircle(width/2,height/2,200);
}
void drawCircle(float x, float y, float radius) 
{
   
	stroke(0);
	noFill();
	ellipse(x, y, radius, radius);
	if(radius > 2) 
	{
   
		drawCircle(x + radius/2, y, radius/2); //为了产生分支效果,drawCircle()函数在两处drawCircle(x - radius/2, y, radius/2);
	}
}

8.3 递归函数实现康托尔集

在这里插入图片描述

void cantor(float x, float y, float len) {
   
	if (len >= 1) //如果长度小于1个像素,就停止递归!
	{
    
		line(x,y,x+len,y);
		y += 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值