Python用turtle库绘制图形——漂亮的玫瑰

2023-10-31

一、漂亮的玫瑰简笔画图片

图1的漂亮的玫瑰简笔画图片是从“百度图片”下载的一幅玫瑰图片,画得很漂亮,但只是黑白色,且没有画花萼(萼片)。

 

图1 漂亮的玫瑰简笔画图片

二、绘制玫瑰的方法

花叶、花梗用形状(圆弧和直线)绘制,并填色,叶片上的锯齿状边缘(叶缘)用圆弧+转角+直线绘制,叶片上的叶脉用直线+圆弧绘制。花瓣部分相对复杂一些,既要表达花瓣的翻边(用前一篇毛笔简笔画的绘制方法),用轮廓线填色绘制边缘,但再要对此边缘构成的花瓣填色就困难了。解决有办法是分层绘制,先将整个花朵(花瓣部分)绘制成封闭形状,然后填花瓣色作为花瓣背景,再在其上绘制花瓣边缘,叠加在一起绘制成花瓣组成的花朵。

为了方便处理叶片、花梗、花萼、花瓣的衔接,根据turtle绘图后面绘制的会覆盖前面绘制的图形这一原理,按先画花瓣背景,然后画叶片、花梗,再画花萼,最后画花瓣的顺序绘制。

先绘制粗细不匀的线条的轮廓,然后填色,以此模拟毛笔绘制效果。

三、turtle绘图相关命令

以下出现“|”表示或者,如penup() | pu() | up(),表示标准函数是penup(),也可以用其缩写函数pu()或up()。

1. 画笔控制函数

以下出现“|”表示或者,如penup() | pu() | up(),标准方法是penup(),也可以用其缩写方法pu()或up()。

penup() | pu() | up():抬起画笔。画笔运动将不绘制图形,仅移动,但不影响填色

pendown() | pd() | down():落下画笔。画笔运动将绘制图形线条

pensize(width) | width(width):画笔宽度(粗细)。宽度用像素表示,默认width=1

pencolor(color):显示或设置画笔颜色。①参数color缺省时为显示当前画笔颜色;②一个参数时颜色必须是字符串或元组,可用颜色名字符串,如'tomato',十六进制RGB字符串,如'#ff6347',数值型RGB元组,如(255, 99, 71)或(1, 0.39, 0.28); ③三个参数,三个数值分别表示R, G, B,如255, 99, 71或1, 0.39, 0.28

2. 运动控制函数

forward(d) | fd(d):沿当前海龟方向向前移动d个像素距离(相对位置),如d为负数则向后移动,画笔方向不变

circle(radius, extent=None, steps=None):绘制半径为radius,角度为extent°的弧形或steps边内接边。如省略extent和steps,则画圆,radius为正,圆心在海龟方向左侧,radius为负,则圆心在海龟方向右侧;如指定extent,按角度°绘制圆弧,radius为正,圆心在海龟方向左侧,radius为负,则圆心在海龟方向右侧;如只指定steps,则绘制圆的内接正steps边形,如指定extent和steps,则绘制圆指定圆弧的内接正steps边折线。

goto(x,y):移动到坐标(x, y)位置(绝对位置)

3. 方向控制函数

setheading(angle) | seth(angle):改变前进方向。如angle为正,则从海龟0°方向向角度正方向转到angle°(绝对度数);如angle为负,从海龟0°方向向角度负方向转到angle°(绝对角度)。默认水平方向向右为0°,逆时针方向为正,顺时针方向为负

left(angle) | lt(angle):海龟左转(逆时针方向)angle°(相对度数)

right(angle) | rt(angle):海龟右转(顺时针方向)angle°(相对度数)

4. 填色控制函数

begin_fill():在绘制要填充的形状之前调用。启动填色模式,此语句之后到end_fill()之间绘制的形状区域将用填充颜色填写色,即使抬笔也会填写色

end_fill():填充调用begin_fill()后绘制的形状。如形状不封闭,则先连接起点和终点然后再填色,填色后终止填色模式。抬笔不影响填色,只是抬笔后区域边缘不画线而已

fillcolor(color):显示或设置填充颜色。①参数color缺省时为显示当前填充颜色;②一个参数时颜色必须是字符串或元组,可用颜色名字符串,如'tomato',十六进制RGB字符串,如'#ff6347',数值型RGB元组,如(255, 99, 71)或(1, 0.39, 0.28); ③三个参数,三个数值分别表示R, G, B,如255, 99, 71或1, 0.39, 0.28

5. 颜色控制函数

colormode(cmode=None):显示或设置色彩模式。没有参数则返回色彩模式;缺省模式为1.0模式,即RGB范围为0-1.0,也称小数模式;可设置为255模式,即RGB范围为0-255的整数,也称整数模式

color(*args):返回或设置画笔颜色和填充颜色。没有参数则返回画笔颜色和填充颜色;只有一个参数colorstring、(r, g, b)时,则同时设置pencolor()和fillcolor()为此颜色;二个参数colorstring1, colorstring2、(r1, g1, b1), (r2, g2,b2)时,前一颜色为画笔颜色、后一颜色为填充颜色;三个参数r, g, b时,则同时设置pencolor和fillcolor为此(r, g, b)颜色

6. 海龟LOGO控制和文字字体控制函数

showturtle() |st():显示海龟LOGO

hideturtle() |ht():隐藏海龟LOGO

write(arg,move=False,align="left",font=("Arial",8,"normal")):绘制文字。Align为方式,font为字体、大小和字形。本例字体为"Arial"、大小为8磅、字形为"正常"

表1 部分颜色名称与RGB对照表

四、漂亮玫瑰花的绘制

turtle库是Python内置的图形化模块,是Python标准库之一,不需要额外安装。搜索了一下Python用turtle库绘制玫瑰花案例,归纳一下其实只有三朵(见图2),其中②是①的简化版(没有考证哪幅先画),但好像画得比较抽象,逼真度还不如简笔画。③轮廓画得挺好,但花瓣没有颜色。

图2 网上Python用turtle库绘制玫瑰花案例(归纳为三朵)

本篇介绍的漂亮玫瑰花则是Python用turtle库绘制玫瑰花的另一种画派,逼真度较高(见图3)。

 图3 用本篇介绍的方法绘制的漂亮玫瑰花 

由于Python的turtle库绘图语句都比较短,按规范程序有570余行,因在必要的位置上加了注释,并考虑篇幅将多条语句合并在同一行,虽不符合规范,也增加了阅读难度,但大大地压缩了篇幅,压缩后仅160余行,而且不影响程序的正常运行。

完整源代码如下:

执行结果:(见图3)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python用turtle库绘制图形——漂亮的玫瑰 的相关文章

  • 如何在多进程系统中实现锁定?

    我们正在并行运行许多詹金斯项目 我们使用 python 并且选择使用 pyenv 管理虚拟环境 不幸的是 pyenv 有一个众所周知的竞争条件 https github com yyuu pyenv issues 174 为了解决这个问题
  • 当我有自定义身份验证模型时,如何登录 Django Rest 可浏览 API?

    我有一个自定义用户模型 如下所示account models py from django contrib auth modles import AbstractUser from django db models signals impo
  • 获取 .wav 文件长度或持续时间

    我正在寻找一种方法来找出 python 中音频文件 wav 的持续时间 到目前为止我已经了解了 pythonwave图书馆 mutagen pymedia pymad我无法获取 wav 文件的持续时间 Pymad给了我持续时间 但它不一致
  • 此 TypeError 消息中提到的“代码对象”是什么?

    在尝试使用Python时exec声明 我收到以下错误 TypeError exec arg 1 must be a string file or code object 我不想传递字符串或文件 但什么是代码对象 如何创建一个 创建代码对象的
  • 从文本文件中删除特定字符

    我对 Python 和编码都很陌生 我当时正在做一个小项目 但遇到了一个问题 44 1 6 23 2 7 49 2 3 53 2 1 68 1 6 71 2 7 我只需要从每行中删除第三个和第六个字符 或者更具体地说 从整个文件中删除 字符
  • 使用python查找txt文件中字母出现的次数

    我需要从 txt 文件中读取该字母并打印 txt 文件中出现的次数 到目前为止 我已经能够在一行中打印内容 但计数有问题 有人可以指导吗 infile open grades txt content infile read for char
  • 如何返回 cost, grad 作为 scipy 的 fmin_cg 函数的元组

    我怎样才能使 scipy 的fmin cg使用一个返回的函数cost and gradient作为元组 问题是有f对于成本和fprime对于梯度 我可能必须执行两次操作 非常昂贵 grad and cost被计算 此外 在它们之间共享变量可
  • 是否可以从 Julia 调用 Python 函数并返回其结果?

    我正在使用 Python 从网络上抓取数据 我想使用这些数据在 Julia 中运行计算 是否可以在 Julia 中调用该函数并返回其结果 或者我最好直接导出到 CSV 并以这种方式加载数据 绝对地 看PyCall jl https gith
  • 协程从未被等待

    我正在使用一个简单的上下文管理器 其中包含一个异步循环 class Runner def init self self loop asyncio get event loop def enter self return self def e
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • AttributeError:“模块”对象没有属性[重复]

    这个问题在这里已经有答案了 我有两个 python 模块 a py import b def hello print hello print a py print hello print b hi b py import a def hi
  • Python Anaconda:如何测试更新的库是否与我现有的代码兼容?

    我在 Windows 7 机器上使用 Python 2 7 Anaconda 安装进行数据分析和科学计算 当新的库发布时 例如新版本的 pandas patsy 等 您建议我如何测试新版本与现有代码的兼容性 是否可以在同一台机器上安装两个
  • 使用 for 循环创建一系列元组

    我已经搜索过 但找不到答案 尽管我确信它已经存在了 我对 python 很陌生 但我以前用其他语言做过这种事情 我正在以行形式读取数据文件 我想将每行数据存储在它自己的元组中 以便在 for 循环之外访问 tup i inLine wher
  • Airflow 1.9 - 无法将日志写入 s3

    我在 aws 的 kubernetes 中运行气流 1 9 我希望将日志发送到 s3 因为气流容器本身的寿命并不长 我已经阅读了描述该过程的各种线程和文档 但我仍然无法让它工作 首先是一个测试 向我证明 s3 配置和权限是有效的 这是在我们
  • 使用 Python 将连续日期分组在一起

    Given dates datetime 2014 10 11 datetime 2014 10 1 datetime 2014 10 2 datetime 2014 10 3 datetime 2014 10 5 datetime 201
  • 使用另一个数据帧在数据帧中创建子列

    我对 python 和 pandas 很陌生 在这里 我有一个以下数据框 did features offset word JAPE feature manual feature 0 200 0 aa 200 200 0 200 11 bf
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • 带 Flask 的 RPI dht22:无法将第 4 行设置为输入 - 等待 PulseIn 消息超时

    我正在尝试制作一个 Raspberry Pi 3 REST API 使用 DHT22 提供温度和湿度 整个代码 from flask import Flask jsonify request from sds011 import SDS01
  • 如何使用 python 定位和读取 Data Matrix 代码

    我正在尝试读取微管底部的数据矩阵条形码 我试过libdmtx http libdmtx sourceforge net 它有 python 绑定 当矩阵的点是方形时工作得相当好 但当矩阵的点是圆形时工作得更糟 如下所示 另一个复杂问题是在某
  • IndexError - 具有匀称形状的笛卡尔 PolygonPatch

    我曾经使用 shapely 制作一个圆圈并将其绘制在之前填充的图上 这曾经工作得很好 最近 我收到索引错误 我将代码分解为最简单的操作 但它甚至无法执行最简单的循环 import descartes import shapely geome

随机推荐

  • 如何对Element组件的样式进行自定义修改

    如何对Element 组件的样式进行自定义修改 前言 举例项目 主要代码 效果 一 定位需要修改的样式 二 使用全局样式的修改方法 代码如下 三 使用局部样式的修改方法 代码如下 前言 在项目开发过程中我们常常需要借助第三方组件库 而ele
  • Java经典面试题整理及答案详解(一)

    简介 面试题包括java集类和设计模式 spring工作原理 动态代理 事务的控制等方面 码住 我们能赢 Java在编程语言中 占据着重要的地位 随着技术的更新与发展 越来越多的人进入互联网行业 踏上Java编程之旅 本系列内容来源于阿里云
  • leedcode

    本节只写自己做的leedcode 只是用来当笔记 里面记录的方法有自己想的 也有来自各位大神的思路 1 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果 请重建该二叉树 假设输入的前序遍历和中序遍历的结果中都不含重复的数字 例如 给出 前
  • 【华为OD机试】比赛【C++ Java Python】

    题目描述 一个有N个选手参加比赛 选手编号为1 N 3 lt N lt 100 有M 3 lt M lt 10 个评委对选手进行打分 打分规则为每个评委对选手打分 最高分10分 最低分1分 请计算得分最多的3位选手的编号 如果得分相同 则得
  • 三点“揭露”内向技术人如何做好分享?

    引言 内向的人不适合做分享 似乎有这么一个想法根植在所有人的心底 特别对于程序员这个群体 内向的人更加多了 毕竟 不内向谁当程序员呢 我当时选择程序员这个职业 就是因为不太喜欢和人打交道 但是经过这些年的实践 我逐渐发现 内向的人如果能充分
  • Windows软件:如何安装ideaIU-2020.3.3并使用无限重置插件达到永久使用

    前言 在我们做SpringBoot Java项目时 一个好的开发工具可以让我们的效率达到事半功倍 早期的eclipse已经无法满足我们日常需求 当然idea集成开发工具在很早前就已经进入市场 如今取得了无法撼动的地位 首居Java开发工具第
  • Redis学习笔记(三)——事务控制及Jedis使用

    又是一个新的周末 上周由于周末睡过头了 Redis的学习进度也慢了不少 这篇内容本该是上周应该发布的 晚了一些哈哈 这篇文章我会学习一下Redis的事务控制 可能对于初学的小伙伴来说事务控制比较难以理解 我的语言也不是很精炼 但还是希望对小
  • Mybatis学习——使用Limit分页

    Limit分页 SQL语句 语法 SELECT FROM table LIMIT stratIndex pageSize SELECT FROM table LIMIT 5 10 检索记录行 6 15 为了检索从某一个偏移量到记录集的结束所
  • NDK编译时报错: Android NDK: NDK Application 'local' targets unknown ABI(s): arm64-v8a x86_64

    网上下了一个github项目 NDK编译时报错 Android NDK NDK Application local targets unknown ABI s arm64 v8a x86 64 Android NDK Please fix
  • Intellij IDEA设置HTTP Proxy

    Intellij IDEA设置HTTP Proxy MAC版 打开Appearance Behavior gt System Settings gt Http Proxy 点选 Auto detect proxy settings gt A
  • Apache Hive+Kerberos安装配置及 Kettle(Pentaho)访问带 Kerberos 认证的 Hive的集成

    目录 1 连接 2 KDC 安装 2 1 安装 Kerberos 服务 2 2 配置 var kerberos krb5kdc kdc conf 2 3 配置 var kerberos krb5kdc kadm5 acl 2 4 配置 et
  • Java从后台重定向(redirect)到另一个项目的方法

    1 通过ModelAndView跳转 RequestMapping alipayforward public ModelAndView alipayforward HttpServletRequest req HttpServletResp
  • uview基本配置,在HubildX中如何配置uni-app相关的组件

    配置步骤 1 引入uView主JS库 在项目根目录中的main js中 引入并使用uView的JS库 注意这两行要放在import Vue之后 main js import uView from uview ui Vue use uView
  • 重心坐标

    数学中 重心坐标是由单形 如三角形或四面体等 顶点定义的坐标 重心坐标是齐次坐标的一种 设 v1 vn 是向量空间 V 中一个单形的顶点 如果 V 中某点 p 满足 那么我们称系数 1 n 是 p 关于 v1 vn 的重心坐标 这些顶点自己
  • utf-8 中的一个汉字占几个字节

    原文链接 http blog csdn net chummyhe89 article details 7777613 占 2 个字节的 占 3 个字节的 基本等同于 GBK 含 21000 多个汉字 占 4 个字节的 中日韩超大字符集里面的
  • R手册(Common)--tidyverse+tibble

    tidyverse是一系列包的组合 构建了一套完整的数据分析生态链 提供了一套整洁的数据导入 分析和建模方法 刷新了R语言原有的数据科学体系 文章目录 tidyverse Usage core tidyverse packages Impo
  • 【HBZ分享】ClickHouse数据结构 之 LSM-TREE

    ClickHouse高性能写入剖析 LSM Tree数据结构 简介 先了解一组测试数据来对比磁盘的 随机读写 与 顺序读写 的性能差距 顺序读写 磁盘的顺序读写 磁头基本不需要换道 即使换道 时间也是极短的 性能极高 比如0 03 2000
  • 转移到ios下载安卓_转移到ios下载-转移到ios app下载v2.10.0 安卓最新版-2265安卓网...

    转移到ios app是一款非常好用的手机换机app 用户可以通过该软件把安卓手机的文档和数据完美的转移到ios中 不用担心换手机后数据丢失 并且该软件操作简单 有需要的可以到2265安卓网下载体验 转移到ios介绍 Move to iOS
  • easypoi 导出合并表头,合并单元格 遇到的坑

    大家肯定都知道 easypoi 但是不知道有没有用过 我也是第一次用 常规导出确实非常简单 在字段上 加注解 Excel name 序号 isColumnHidden true orderNum 0 fixedIndex 0 进行排序就可以
  • Python用turtle库绘制图形——漂亮的玫瑰

    一 漂亮的玫瑰简笔画图片 图1的漂亮的玫瑰简笔画图片是从 百度图片 下载的一幅玫瑰图片 画得很漂亮 但只是黑白色 且没有画花萼 萼片 图1 漂亮的玫瑰简笔画图片 二 绘制玫瑰的方法 花叶 花梗用形状 圆弧和直线 绘制 并填色 叶片上的锯齿状