ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python分形树-递归

2022-02-20 12:01:20  阅读:218  来源: 互联网

标签:turtle 递归 python 树丛 分形 所示 屏幕 绘制


分形树

1. 利用turtle画出分形树

  1. 问题描述: 利用turtle画出下图所示的分形树
  2. 要求:
    1. 树木主干向上生长
    2. 分形层数为4,二叉树
    3. 第一层树枝长度为60,逐层减6
    4. 左右树枝的倾斜角度不限,最终效果和下图所示大致相同即可
import turtle as t


def tree(n,x):
    if n <= 0:
        return None
    else:
        t.left(30)

        t.forward(x)
        tree(n-1,x-6)
        t.backward(x)

        t.right(60)

        t.forward(x)
        tree(n-1,x-6)
        t.backward(x)

        
        t.left(30)

t.left(90)
tree(4,60)

结果如下图所示:

在这里插入图片描述

2. 绘制分形树丛

一、 修改步骤l中生成分形树的方法:

  1. 分 型层数改为4~6之间的随机数

  2. 第一层树枝长改为30~60之间的随机数

二、绘制分形树丛

  1. 在800X600的屏幕中绘制分形树丛

  2. 树木数量为 50棵

  3. 每棵分形树的树根位置为屏幕范围内随机坐标点,树枝允许伸出屏幕窗口外;

  4. 以屏幕中心垂直线为分界,位于屏幕左侧的树木向左倾斜,位于屏幕右侧的树木向右倾斜;绘制过程瞬间完成(即看不到绘画过程)。

import turtle as t
import random

        
def tree(n,x):
    if n <= 0:
        return None
    else:
        t.left(30)

        t.forward(x)
        tree(n-1,x-6)
        t.backward(x)

        t.right(10)

        t.forward(x)
        tree(n-1,x-6)
        t.backward(x)

        
        t.right(20)
def tree2(n,x):
    if n <= 0:
        return None
    else:
        t.right(30)

        t.forward(x)
        tree2(n-1,x-6)
        t.backward(x)

        t.left(10)

        t.forward(x)
        tree2(n-1,x-6)
        t.backward(x)

        
        t.left(20)

screen = t.Screen()
screen.setup(800,600)
screen.tracer(0)


t.left(90)
for i in range(50):
    x = random.randint(-300,300)
    y = random.randint(-200,200)
    n = random.randint(4,6)
    x1 = random.randint(30,60)
    
    t.penup()
    t.goto(x,y)
    t.pendown()

    if x>0:
        tree2(n,x1)
    else:
        tree(n,x1)

t.update()

结果如下图所示:
在这里插入图片描述

标签:turtle,递归,python,树丛,分形,所示,屏幕,绘制
来源: https://blog.csdn.net/m0_56945138/article/details/123027662

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有