简介:

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

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

构造过程:

原始三角形

每边三等分

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

继续每边三等分

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

...

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

rewrite system (Lindenmayer system):

Alphabet : F

Constants : +, ?

**Axiom **: F

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

程序实现

思路1:

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

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

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

我们把这个轨迹抽象为“前进”方法,我们就有变成了深度为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

第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)

python科赫雪花递归理解_科赫雪花的python3实现(递归,非递归)相关推荐

  1. python创建树结构、求深度_数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)...

    前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...

  2. 雪花算法原理_孙略 | 雪花工场

    原文发表于<中国摄影>杂志2019年第1期,是为专题"2019:科学世界影像漫游"的一部分.图文作者均为孙略. 孙略1976年生于北京,毕业于清华大学,现任教于北京电影 ...

  3. C/C++ 二叉树的非递归遍历(前序、中序、后序非递归遍历)

     二叉树的非递归遍历C/C++实现:   非递归先序遍历代码: void PreOrderTraversal (struct tree* root) { //非递归先序遍历struct tree* t ...

  4. python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)

    原标题 Understanding Python Dataclasses?-?Part 2 ,作者为 Shikhar Chauhan . 这是 Python 最新的 Dataclasses 系列的第二 ...

  5. python装饰器的通俗理解_简单理解Python装饰器

    Python有大量强大又贴心的特性,如果要列个最受欢迎排行榜,那么装饰器绝对会在其中. 刚接触装饰器,会觉得代码不多却难以理解.其实装饰器的语法本身挺简单的,复杂是因为同时混杂了其它的概念.下面我们一 ...

  6. python实现雪花动态图_如何通过雪花算法用Python实现一个简单的发号器

    实现一个简单的发号器 根据snowflake算法的原理实现一个简单的发号器,产生不重复.自增的id. 1.snowflake算法的简单描述 这里的snowflake算法是用二进制的,有64位.其中41 ...

  7. python中的类怎样理解_深入理解Python中的元类(metaclass)

    如何理解python当中的元类 把这个提到外面 class __metaclass__(type): " simple custom metaclass to block adding ne ...

  8. python解题教学设计的理解_面向计算思维培养的初中 Python 项目式学习教学设计流程构建...

    2006 年, 美国卡内基梅隆大学的周以真教授提出了计算思维的概念.计算思维是利用计算机科学的基本理念解决问题.设计系统和理解人类行为的一种方法,并指出计算思维的本质是抽象(Abstraction)和 ...

  9. python双重for循环怎么理解_理解 Python 的 for 循环

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 在本篇博客中,我们将讨论 Python 中 for 循环的原理. 我们将从一组基本例子和它的语法开始,还将 ...

  10. python一切皆对象的理解_在 Python 中万物皆对象

    在 Python 中一切都是对象,并且几乎一切都有属性和方法.所有的函数都有一个内置的 __doc__ 属性,它会返回在函数源代码中定义的 doc string:sys 模块是一个对象,它有一个叫作 ...

最新文章

  1. zmq中zmq_poll()函数介绍
  2. linux安装grpc占用空间大,grpc linux安装-Go语言中文社区
  3. IBM连续20个季度营收下滑,但这可能是个好信号
  4. 【更新】Navicat Monitor v1.7的新功能说明
  5. 抹机王怎么一键新机_[电脑] [第六届机王争霸赛]水冷组——十年 by ilas 完工
  6. ckeditor简单使用心得
  7. 纯数学教程 Page 325 例LXVIII (4) 比值判别法和达朗贝尔判别法失效的一种情形...
  8. 西安电子科技大学计算机学院推免生资格,西安电子科技大学计算机学院(专业学位)计算机技术保研细则...
  9. 介绍 Jersey 依赖
  10. oracle log network server,记录一次ARC1: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned解决...
  11. 【产业互联网周报】容联云下周纽交所挂牌;声网Agora因Clubhouse股价周内涨超30%;贝索斯将卸任亚马逊CEO...
  12. SDN和NFV的主要区别
  13. [zz] 音频DAC的原理
  14. 工作4年从美团、360、陌陌、百度、阿里、京东面试程序员的回来感想
  15. 项目开发技术点、困难点总结——2020-2021年
  16. @staticmethod静态方法
  17. China Merchants Bank Beats Rivals In Quality Of Service
  18. 面试题-渗透测试实习生
  19. (0091)iOS开发itms-services协议安装IPA安装包
  20. 机房软件管理服务器及系统软件,高校机房软件自动化部署管理系统的设计及实现...

热门文章

  1. oracle学习札记95
  2. p1口实验_【正点原子FPGA连载】第二章 实验平台简介-摘自【正点原子】开拓者 FPGA 开发指南...
  3. 单片机常用C代码汇总
  4. linux中rpm命令,linux中rpm命令使用介绍
  5. python凹多边形分割_凹多边形分割成凸多边形
  6. SVN 配置忽略文件
  7. 事件管理和问题管理,配置管理和变更管理的区别
  8. 初级产品经理的日常工作流程汇总
  9. TD通过artnet控制电脑灯的操作
  10. html使用iframe包含pdf文件,react项目利用iframe显示pdf文件并打印