Python海龟有了新技能,这回画了个印度美女。Python海龟洪水填充命令fill的用法

news2024/11/26 16:51:47

Python海龟有了新技能,这回画了个印度美女。看官想一想,如果要填充圆环区域,该如何填充呢?Python的海龟模块本质是对凸多边形的填充,对于凹多边形的填充无法胜任。

真正的Python海龟绘图在这,视频里还有点教学呢,先看看感受感受:

Python sprites精灵模块洪水填充命令fill用法

如果不知道什么是洪水填充,请先自行百度一下。这里,我们只要import turtle 即导入海龟模块,然后从Python精灵模块借用一个叫fill的命令,就能实现海龟的漫水填充功能了。

这个新开发的fill命令有四个参数,分别是x,y,fillcolor和mode。x和y表示填充的起点坐标,也就是说小海龟会顺着这个点去填充,一直到边界,然后又会更换方向填充其它区域。对于小海龟来讲,它在“相片”中遨游,就像在一个巨大的迷宫中移动一样。fillcolor表示填充颜色,而mode则表示模式。模式有0、1和2三种,默认的模式为2。

模式为0适合于凸多边形的填充。如果看官画的都是凸多边形,还是用这种模式最好。

模式为1适合于任意多边形的填充,速度慢!或者适合于演示DFS。

模式为2则采用了完全不同的算法,速度较快,所以默认的模式为这种。

假设有一个圆心在(0,0)的半径为100的圆圈,则只要在圆内任取一个点,如(20,20),那么调用fill(20,20),那么小海龟就会到达(20,20)这个坐标点,开始用像素填满整个圆形。

其基本的原理是用洪水填充算法,深度搜索到圆圈的边界,确定轮廓与圆内所有的点,然后填充所有的点。

下面是两个例子,第一个例子导入海龟模块,然后借用了sprites模块的fill命令进行填充。运行完之后,可以用鼠标当画笔画图形。以下是源代码:

import random
import turtle
from sprites import fill,Key,Mouse,mouse_pos

ysb = ['red','orange','yellow','green','cyan',
       'blue','purple','pink','brown','lime']

screen = turtle.Screen()    
screen.xy_grid()        # 显示坐标图
screen.setup(480,720)
turtle.shape('blank')
turtle.hideturtle()
turtle.goto(0,100)
turtle.pd()
turtle.pensize(2)
turtle.circle(100)    
turtle.penup()
fill(50,150,mode=0)      # 在(50,150)坐标开始填充,模式为2
fill(-50,150,fillcolor='red',mode=2)      # 在(50,150)坐标开始填充,模式为2
fill(50,250,fillcolor='blue',mode=2)      # 在(50,150)坐标开始填充,模式为2
fill(-50,250,fillcolor='green',mode=2)      # 在(50,150)坐标开始填充,模式为2
ft = ('黑体',14,'normal')
s = '请画封闭图形,然后单击右键填充'
turtle.home();turtle.write(s,align='center',font=ft)

spacekey = Key('space')           # 实例化空格键
leftkey = Mouse()                 # 实例化鼠标左键
rightkey = Mouse(3)               # 实例化鼠标右键
turtle.ht()                       # 隐藏海龟
turtle.pensize(4)
turtle.pencolor('red')
screen.listen()                   # 监听按键检测
screen.colormode(255)
while True:
    turtle.goto(mouse_pos())
    if spacekey.isdownup():         # 如果按空格键,更换画笔颜色
        turtle.pencolor(random.choice(ysb))
    if leftkey.down():              # 如果单击左键,则落笔 
        turtle.pendown()
    else:
        turtle.penup()              # 否则抬笔
    if rightkey.isdownup():         # 如果单击右键并松开,则填充
        fx,fy = rightkey.pos
        r  = random.randint(0,255)
        g  = random.randint(0,255)
        b  = random.randint(0,255)
        fill(fx,fy,fillcolor=(r,g,b),mode=2) # 默认模式为2,共有0,1,2共有3种模式,请自行尝试
        
    screen.update()

第二个例子,则没有导入turtle模块,直接使用的sprites模块,新建了一个叫turtle的角色,使用这个turtle的fill方法进行填充。代码如下所示:

"""
   fill new method.py         # 填充新法.py
   This is a example, demo fill  new method.
"""
from sprites import Sprite

turtle = Sprite('blank',visible=False)
screen = turtle.getscreen()
screen.delay(10)
# 设定鼠标移动事件,在标题栏显示鼠标指针坐标
screen.onmousemove(lambda x,y:screen.title(str(x)+"," + str(y)))

turtle.speed(1)
turtle.goto(0,200)
turtle.pensize(4)
turtle.pd()
for i in range(3):
    turtle.fd(30)
    turtle.right(120)
    turtle.fd(30)
    turtle.left(120)
turtle.circle(-10,180)
turtle.right(45)
turtle.fd(130)
turtle.goto(0,200)
turtle.fillcolor('pink')   # 设定填充颜色
turtle.penup()             #  remember penup (起新的线条项目)
turtle.fill(3,171,mode=2)  # mode为2会调用洪水填充函数

# 下面画个残缺圆进行填充
turtle.goto(-100,100)
turtle.pendown()
turtle.circle(-50,90)
turtle.circle(50,90)
turtle.circle(100,180)
turtle.circle(100,90)
turtle.fillcolor('cyan')
turtle.penup()            # remember penup 画完后要抬笔
turtle.fill(-150,200,mode=2)

# 空心十字架
turtle.pu();turtle.home();turtle.pd()
for  i in range(4):
    turtle.fd(50);turtle.left(90);turtle.fd(50)
    turtle.right(90);turtle.fd(50);turtle.right(90)
turtle.penup()
turtle.fillcolor('light green')
turtle.fill(10,-10)   # 不写第三个参数表示填充凸多边形

# 不规则图形
turtle.goto(-130,-130)
turtle.pd()
turtle.goto(-130,0)
turtle.goto(-230,-190)
turtle.goto(130,-200)
turtle.goto(-230,00)
turtle.penup()       # remember penup 
turtle.fillcolor('red')
turtle.fill(-137,-26)

# 凹
turtle.goto(150,-100);turtle.pd()
turtle.fd(50);turtle.right(90);turtle.fd(50);turtle.left(90);turtle.fd(50);turtle.left(90)
turtle.fd(50);turtle.right(90);turtle.fd(50);turtle.right(90);turtle.fd(100);turtle.right(90)
turtle.fd(150);turtle.right(90);turtle.fd(100);turtle.penup()
turtle.fillcolor('gray')
turtle.fill(200,-170)

# ☆
turtle.goto(200,200);turtle.pd()
for i in range(5):
    turtle.fd(50)
    turtle.left(144)
turtle.penup()          # remember penup 
turtle.fillcolor('magenta')
turtle.fill(195,237)
turtle.fillcolor('red')
turtle.fill(204,225)
turtle.fillcolor('blue')
turtle.fill(197,210)
turtle.fillcolor('green')
turtle.fill(182,218)
turtle.fillcolor('orange')
turtle.fill(183,231)
turtle.fillcolor('lime')
turtle.fill(194,223,mode=1)

screen.mainloop()

请读者仔细观察两种方法的细微区别。如果你的程序运行不了,这很正常,这是由于没有安装sprites模块,或者没有升级到最新版本。使用 pip install sprites --upgrade即可安装或者升级到最新版本。

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

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

相关文章

AI绘画真的是太神奇!

最近会员群的同学一直研究AI绘画,AI技术真的太神奇了,以前是插画师的看家本领,现在通过AI技术一下子让平头老百姓也能有这样的技能!好像路痴有了导航也能开车了。最近在研究如何利用AI做卡通头像,发现这个不仅好玩&…

深度图解 Redis Hash(散列表)实现原理

1. 是什么 Redis Hash(散列表)是一种 field-value pairs(键值对)集合类型,类似于 Python 中的字典、Java 中的 HashMap。一个 field 对应一个 value,你可以通过 field 在 O(1) 时间复杂度查 field 找关联的…

更换Mysql数据库-----基于Abo.io 的书籍管理Web应用程序

之前公司一直使用的是ASP.NET Boilerplate (ABP),但是当解决方案变得很大时,项目启动就变得非常慢,虽然也想了一些办法,将一些基础模块做成Nuget包的形式,让整个解决方案去引用。但是整个项目还是很臃肿,各…

双轴高精度倾角传感器安装方式和485协议

倾角安装注意事项 在安装传感器时,不正确安装会导致测量角度误差偏大。安装时请注意以下两点: 1.“两面”指安装面与被测物体的安装面紧靠(被测物体的安装面要尽可能水平),不能有夹角产生(如A图中的角a&a…

【靶场】vulfocus搭建和场景编排

前言 Vulfocus 是一个漏洞集成平台,将漏洞环境 docker 镜像,放入即可使用,开箱即用,这里我们搭建在云服务器上,需要高一点的配置,搭建可以按需搭建本地和自己的服务器上,我们主要使用场景编排功…

【系统学习】Java基础1之多线程

前言 被公司换岗一年多了,从Linux C换到了java开发,奈何大环境不好,半吊子经验找不到好工作。 接触了spring cloud, spring boot k8s等许多新的知识。已经开发Java生态相关项目已一年半,但都止步于用的阶段,自知毫无竞…

小航编程题库蓝桥杯stem科技素养模拟练习试卷(初级第2套)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 25. 百度公司是一家于 2000 年创立的互联网公司,其业务范围十分广泛。以下选 项中,( )不…

v4L2应用开发学习!

一.什么是V4L2框架? V4L2英文全称是Video for Linux2,它是专门为视频设备设计的内核驱动。在做视频的开发中,一般我们操控V4L2的设备节点就可以直接对摄像头进行操作。通常V4L2在Linux的设备节点是**/dev/video0**。无论是MIPI摄像头还是UVC摄…

SpringBoot项目快速添加新依赖框架的插件---->EditStarters

在SpringBoot项目中,我们往往会因为项目的需要经常需要添加一些新的依赖来支持项目的运行,此时可能会有人去Maven中央仓库去下载相关依赖,再来导入pom.xml。 但是可以有另外一种更快速的方法:那就是IDEA已经提供了一种快速的插件&…

HTB PC

HTB PC 链接:https://qing3feng.github.io/2023/05/29/HTB%20PC/ 今天又学一招,配置好/etc/hosts​文件: ​[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 如图所示,这样子就可以直接ping pc​了&#x…

Mongodb 为什么提起处理JSON 就是MOGNODB 的,因为我没得选

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

ChatGPT时代情感分析还存在吗?一份真实调查

深度学习自然语言处理 原创作者:qazw 引言 最近几年,GPT-3、PaLM和GPT-4等LLM刷爆了各种NLP任务,特别是在zero-shot和few-shot方面表现出它们强大的性能。因此,情感分析(SA)领域也必然少不了LLM的影子,但是哪种LLM适用…

结束了

阅读本文大概需要 1.29 分钟。 帅张读书会,结束了。 这里也简单记录一下这件事,毕竟是自己做了两年的产品。 经过两年的时间,自 2021 年 5 月 27 日至 2023 年 5 月 27 日,帅张读书会这个项目持续了两期,第二期现在结束…

配置wxworks6.9系统移植到xilinx zynq ps端

一,创建bootrom 打开打开Workbench,目录在C:\WindRiver\workbench-3.3\wrwb\platform\x86-win32\eclipse\eclipse-x86-win32 在菜单栏,点击 File->New->Project。The New Project Wizard opens。 在 VxWorks 6.x中,选择 Vx…

音乐驱动虚拟人——娱乐场景下虚拟人的AI驱动实践

元宇宙时代的娱乐场景下,通过高精度的AI驱动模型还原真人的歌舞表演,有着更低成本、更多创造性、精彩度、实时互动性的综合优势,是虚拟数字人驱动的最终形态。LiveVideoStackCon 2022北京站邀请到腾讯音乐天琴实验室计算机视觉负责人——董治…

动画图解程序?这个可视化运行环境太方便了

入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 了解代码的执行过程是编程的基本要求。 一个熟练的编程老手只需要用肉眼看着代码,就能对其运行的过程有所了解。然而对于刚接触…

权限维持-SSP-DLL 加载

前言 继续学习中,今天是权限维持的东西,大家永远不要忘记初心,要一起奋斗哦! 注:单机环境和域环境都可以使用 复现 一.进程注入lsass.exe 使用mimikatz将伪造的SSP注入内存,这样用户在注销重新登录的时候就…

机器学习库Scikit-learn

本文目录 3.1 背景知识3.2 Scikit-learn概述3.3 Scikit-learn主要用法 3.3.1 基本建模流程3.3.2 数据预处理3.3.3 监督学习算法3.3.4 无监督学习算法3.3.5 评价指标3.3.6 交叉验证及超参数调优3.4 Scikit-learn总结参考文献 Scikit-learn是基于NumPy、SciPy和Matplotlib的开源P…

全国流体力学盛会召开,飞桨AI4S携最新科研进展亮相西湖大学

‍‍‍‍ 5月20-21日,第四届全国智能流体力学研讨会暨第二届智能流体力学产业联合体大会在西湖大学召开。此次会议由中国力学学会、中国空气动力学会、《水动力学研究与进展》编委会、西湖大学、浙江大学、上海交通大学、中国船舶集团第七〇八研究所主办&#xff1b…

nsis制作windows安装包-修改安装目录读写权限

目录 1. 背景2. 使用AccessControl修改权限2.1 AccessControl下载安装2.2 修改脚本 1. 背景 使用nsis制作的windows安装包在安装时,将安装目录设置到非系统盘里,安装完成后一般不会出现读写权限的异常问题。但是,安装时选择在系统盘里安装&a…