用Python实现绘画樱花树

下面这段代码使用了Python的turtle模块来绘制一个类似于樱花的图案。具体来说,它定义了两个函数:Tree和Petal,并使用这两个函数来绘制图案。

 

Tree函数:

 

这个函数递归地绘制了樱花的躯干。它接受两个参数:branch(表示当前的树干或树枝的长度)和t(一个turtle对象,用于绘图)。

在函数内部,首先检查branch的长度,并根据其长度决定树干的颜色、粗细和绘制方式。

然后,函数向前移动一段距离(等于branch的长度),并随机地向右转或左转一定的角度。

接着,函数递归地调用自身两次,绘制两个较小的树枝。

最后,函数抬起笔头,向后移动一段距离,然后放下笔头,准备下一次的绘制。

 

Petal函数:

 

这个函数绘制了从树上飘落的花瓣。它接受两个参数:m(表示要绘制的花瓣数量)和t(一个turtle对象,用于绘图)。

在函数内部,它循环m次,每次绘制一个花瓣。每个花瓣都是通过抬起笔头、向前移动一段距离、向左转90度、向前移动一段距离、放下笔头、绘制一个圆形、然后抬起笔头、向后移动并右转90度来完成的。

花瓣的颜色被设置为淡珊瑚色。

 

主程序部分:

 

首先,创建了一个turtle对象t和一个turtle屏幕对象w。

然后,隐藏了画笔,并设置了绘图区域的更新频率和初始方向。

接着,使用Tree函数绘制了樱花的躯干,并使用Petal函数绘制了从树上飘落的花瓣。

 

总体来说,这段代码通过递归和随机性生成了一个类似于樱花的图案,其中树干和树枝的绘制考虑了长度、颜色和粗细的变化,而花瓣则通过随机的位置和角度来模拟飘落的效果。

示例代码:

import turtle as T
import random
import time

# 画樱花的躯干
def Tree(branch, t):
  time.sleep(0.0005)
  if branch > 3:
    if 8 <= branch <= 12:
      if random.randint(0, 2) == 0:
        # 白色
        t.color('snow')
      else:
        # 淡珊瑚色
        t.color('lightcoral')
      t.pensize(branch / 3)
    elif branch < 8:
      if random.randint(0, 1) == 0:
        t.color('snow')
      else:
        t.color('lightcoral')
      t.pensize(branch / 2)
    else:
      # 赭色
      t.color('sienna')
      t.pensize(branch / 10)
    t.forward(branch)
    a = 1.5 * random.random()
    t.right(20 * a)
    b = 1.5 * random.random()
    Tree(branch - 10 * b, t)
    t.left(40 * a)
    Tree(branch - 10 * b, t)
    t.right(20 * a)
    t.up()
    t.backward(branch)
    t.down()

# 掉落的花瓣
def Petal(m, t):
  for i in range(m):
    a = 200 - 400 * random.random()
    b = 10 - 20 * random.random()
    t.up()
    t.forward(b)
    t.left(90)
    t.forward(a)
    t.down()
    t.color('lightcoral')
    t.circle(1)
    t.up()
    t.backward(a)
    t.right(90)
    t.backward(b)
    # 绘图区域
t = T.Turtle()
# 画布大小
w = T.Screen()
# 隐藏画笔
t.hideturtle()
t.getscreen().tracer(5, 0)
t.left(90)
t.up()
t.backward(150)
t.down()
t.color('sienna')

# 画樱花的躯干
Tree(60, t)
# 掉落的花瓣
Petal(200, t)

小编推荐Pythonit教程网:blog.pythonit.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MQTT简介

https://mqtt.org/ MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; 一种轻量级的&#xff0c;基于发布订阅模式的通信协议&#xff0c;用于在物联网和机器与机器&#xff08;M2M&#xff09;通信中传输消息。 它具有低带宽和低功耗的特点&#xff0c;适用于…

Dockerfile制作镜像

Dockerfile制作镜像 Dockerfile介绍 dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了一条条构建镜像所需的指令和说明。 dockerfile仅仅是用来制作镜像的源码文件&#xff0c;是构建容器过程中的指令&#xff0c;docker能够读取dockerfile的指定进行自动…

vue3 开发记录

1.引入nprogress插件&#xff0c;显示未声明文件 无法找到模块“nprogress”的声明文件。 解决方法&#xff1a; vite-env.d.ts // 解决引入模块的报错提示 declare module "nprogress";2.在 .evn 文件中创建了自定义环境变量 VITE_APP_BASE_URL 但在项目中使用时出…

【学习记录】Resnet

Resnet的残差块 BasicBlock模块&#xff1a; Resnet的作用 解决梯度消失。网络越深&#xff0c;会导致梯度消失。Resnet可以解决梯度消失的问题。 Resnet的原理 参考视频&#xff1a;https://www.bilibili.com/video/BV1cM4y117ob/?spm_id_from333.337.search-card.all.cl…

请查收:2024年腾讯云服务器优惠价格表_租用配置报价

一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核2G、2核4G、4核8G、8核16G、4核16G、8核32G、16核32G、16核64等配置可选&#xff0c;公网带宽1M、3M、5M、12M、18M、22M、28M…

FreeRTOS任务切换

目录 一、PendSV异常 二、任务切换场合 1、执行系统调用 2、滴答定时器(SysTick)中断 三、PendSV中断服务函数 1、分析xPortPendSVHandler中断服务函数 四、查找下一个要运行的任务的两种方法 1、获取下一个要运行的任务 2、查找下一个要运行的任务的两种方法 2.1、通…

Android全屏黑边解决方案

在Android12以上的手机&#xff0c;设置全屏后屏幕底部有黑边或者白边&#xff0c;有的屏幕顶部有黑边。解决方案很简单&#xff0c;在使用的主题中添加对应的设置即可&#xff0c;如下&#xff1a; res/values/themes.xml <resources><style name"Base.Theme.La…

C++:封装

封装:将数据和操作数据的方法进行结合, 隐藏具体的实现细节, 只提供接口用来交互 类: 一种自定义类型, 类域和访问限定符, 让外面只能看到该类的一些接口, 而看不到其具体的成员及接口的具体实现 类 语法:class name{...}; 里面可有成员函数, 成员变量类域: 访问类域里面的代…

Windows系统安装TortoiseSVN并结合内网穿透实现远程访问本地服务器——“cpolar内网穿透”

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

ThreeDWorld(TDW)学习(待更新)

目录 前言 1.TDW 2.transport challenge 总结 前言 因为挑战赛了解到tdw仿真平台。 想了解的请点击&#xff1a; GitHub - threedworld-mit/tdw: ThreeDWorld simulation environment GitHub - chuangg/tdw-transport-challenge-starter-code 1.TDW ThreeDWorld (TDW)是一…

范德蒙行列式

范德蒙行列式&#xff08;Vandermonde determinant&#xff09;是一种特殊形式的行列式&#xff0c;常在多项式理论和插值中遇到。其命名来源于法国数学家Alexandre-Thophile Vandermonde。范德蒙行列式是以一组数为变量的行列式&#xff0c;其特殊之处在于每一行的元素是前一行…

VSCode安装与使用详细教程

一、引言 简要介绍VSCode&#xff08;Visual Studio Code&#xff09;是什么&#xff0c;它的主要特点和用途&#xff0c;以及为什么选择VSCode作为代码编辑器。 二、下载与安装 访问VSCode官方网站下载页面。选择适合操作系统的版本&#xff08;Windows、macOS、Linux&…

孩提家乐福愿

孩提家乐福愿 预知过往时&#xff0c;风雨夜晚事。 ​季暖烟火气&#xff0c;升级父母知。 ​爱孩绕膝闹&#xff0c;庭院长幼喜。 ​聚德传承系&#xff0c;言行耕读义。

数据卷dockerfile

目录 一、数据卷 1. 简介 2. 数据卷和数据卷容器 1. 数据卷&#xff1a; 2. 数据卷容器&#xff1a; 二、自定义镜像 1. 作用 2. 自定义centos 3. 自定义tomcat8 一、数据卷 1. 简介 数据卷是一个可供一个或多个容器使用的特殊目录&#xff0c;它将主机操作系统目录直…

mysql修改字段的长度锁表问题

mysql修改字段的长度锁表问题 背景 MySQL&#xff08;这里指5.6及其后续版本&#xff09;修改字段的长度锁表会锁表吗&#xff1f;答案是可能会但不一定会 具体原理 MySQL 5.6 及以后版本扩大字段长度 支持 online ddl in-place 模式&#xff0c;而这将不会锁表。varchar 表示…

string字符串进行分割

c标准库中&#xff0c;对string字符串并没有提供分割操作&#xff0c;需要自己手动实现此功能。 方式1&#xff1a; 采用 std::stringstream 输入字符串&#xff0c;通过getline()函数&#xff0c;来对字符串进行分割。 #include <sstream>void getSplit(std::string s…

Unity—MVC分层开发思想

每日一句&#xff1a;当你不努力的时候&#xff0c;天赋就会一点一点被收回 目录 MVC分层开发思想 MVC是什么 MVC的开发步骤 案例&#xff1a;点击按钮实现金币进行添加&#xff0c;并且把金币记录到JSON里 MVC模式实现 背包系统基础代码 背包项目实现步骤 MVC分层开发思…

spring-data-redis概述及用法

一、spring-data-redis spring-data-redis是spring-data模块的一部分,专门用来支持在spring管理项目对redis的操作,使用java操作redis最常用的是使用jedis,但并不是只有jedis可以使用,像jdbc-redis jredis也都属于redis的java客户端,他们之间是无法兼容的,如果你在一个项目中使…

【vue+element ui】大屏自适应中el-select下拉内容在低分辨率下显示不全问题解决

目录 背景 现象 解决方案 背景 最近要把一个1920px*1080px的大屏改成自适应的&#xff1b;最低适配到1028px*720px&#xff1b; 现象 自适应适配改完之后 将电脑屏幕改成1028px*720px分辨率后&#xff0c;下拉显示正常 通过谷歌浏览器设置Toggle device toolbar为1028px*…

Fastjson2 <== 2.0.26反序列漏洞

根据Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章&#xff0c;文章中引入注目的是利用条件限制条件&#xff0c;不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题&#xff0c;其实如果单独去使用一些关键词去搜索&a…