用python画雪花 科赫曲线递归_科赫雪花的python3实现(递归,非递归)

简介:

科赫雪花(科赫曲线)是最早发现的分形曲线之一,由瑞典科学家 Helge von Koch 在论文中构造

科赫雪花的面积趋向于原始三角形的8/5,而周长趋向无穷大

构造过程:

3dab0e862a54

原始三角形

3dab0e862a54

每边三等分

3dab0e862a54

在三等分点上构建新三角形

3dab0e862a54

继续每边三等分

3dab0e862a54

继续在三等分点上构建新三角形

...

科赫雪花可一通过下列规则描述

rewrite system (Lindenmayer system):

Alphabet : F

Constants : +, ?

**Axiom **: F

Production rules: F ? F+F–F+F

程序实现

思路1:

首先我们把三条边分开处理

考虑深度为0的情况,显然这条边是一条直线

考虑深度为1的情况,轨迹如下:

3dab0e862a54

我们把这个轨迹抽象为“前进”方法,我们就有变成了深度为1的前进方法 = 深度为0的前进方法 x4

同理我们发现,深度为2的前进方法 = 深度为1的前进方法 x4

观察到问题的复杂度在不断降低,可以使用递归来处理这样的规律

from turtle import *

def snowflake(lengthSide, levels):

if levels == 0:

forward(lengthSide)

return

lengthSide /= 3.0

snowflake(lengthSide, levels-1)

left(60)

snowflake(lengthSide, levels-1)

right(120)

snowflake(lengthSide, levels-1)

left(60)

snowflake(lengthSide, levels-1)

# main function

if __name__ == "__main__":

speed(0)

length = 300.0

#分别处理三条边

for i in range(3):

snowflake(length, 4)

right(120)

exitonclick()

思路2

把第0层画的线用0表示,第1层用1表示,那么根据画笔的轨迹我们有

第0层(三角形) 000

第1层 011001100110

第2层 022012211221022002201221122102200220122112210220

3dab0e862a54

第1层,其余类似

显然,把上一层的节点复制一遍,中间插入两个当前层次的节点即可。连续相同节点逆时针转120度,非连续相同节点逆时针转60度

from turtle import *

def draw(len,target):

tasks="000"

step,depth = len/(3**target),0

while depth

depth+=1

tasks = ''.join([s+str(depth)*2+s for s in tasks])

pre=''

for task in tasks:

if pre==task:

right(120)

else:

left(60)

forward(step)

pre = task

length = 300.0

draw(length,3)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值