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

分形原理,康托尔集,科赫曲线,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 += 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值