网易首页 > 网易号 > 正文 申请入驻

Python中turtle的填充问题

0
分享至

文/辽源市田家炳高级中学校 王德贵

一、创意来源

在今年24期绘制标准党旗的案例中,我们在画镰刀时遇到了一个问题,在两点间画两条圆弧,即使封闭也只会填充出一个半圆,而不是我们期望的镰刀。于是我就想到Python的填充究竟遵循哪些规律呢?

这个Python案例也是等级考试一级内容的延伸知识点。

二、设计思路

填充问题,是Python考试中turtle的重要知识点。

  1. 要设置填充颜色。有两种方法:

(1) color("画笔颜色","填充颜色");如color("red","green")。

(2) fillcolor("填充颜色")。

2.要使用填充命令:begin_fill()和end_fill()开始填充和结束填充。

3.需要填充的语句块必须在填充命令中间。

4.填充的图形必须是封闭图形。

以上是Python课程里讲解的知识点,那么这足够完成我们需要的填充吗?

我们根据这些基本知识,做几个封闭图形,看看填充情况,这时我们自然会发现:填充是有规律的(世上万物皆有律)!所以我们的思路就是做基本程序,解基本问题。

三、程序设计

根据turtle知识和填充的基本要求,我设计了几个画月牙的实例,运行后看看有什么规律。

1、填充问题分析

(1)实例一(图1)

#代码1
from turtle import*
bgcolor("black")
color("red","yellow")
hideturtle()
begin_fill()
circle(100,180)
up()
home()
down()
left(30)
circle(115,120)
end_fill()
done()

运行后发现,虽然画出了封闭曲线,但没有按照我们的思路填充一个弯月,而是填充了整个半圆(图2)。

(2)实例二(图3)

#代码2
from turtle import*
bgcolor("black")
color("red","yellow")
hideturtle()
begin_fill()
circle(100,180)
right(30)
circle(115,-120)
end_fill()
done()

修改上述代码,我们先从下方起点画到上方顶点后,直接从上方顶点画回到下方起点,中间没有抬笔过程。这样画出的也是一个封闭曲线,填充正常(图4)!

其实上两例中,例子1的第11行和12行代码,例子2的第7行到第9行,旋转的角度和圆弧半径都是经过几次修改测试得到的。

这些角度和圆弧半径不影响后面的规律验证。

(3)实例三

实例三从同一点出发,画封闭图形,运行结果,大家可以看到,填充不正常(图5)。

#代码3
from turtle import*
color("red","green")
hideturtle()
begin_fill()
forward(100)
left(90)
forward(100)
up()
home()
down()
circle(100,90)
end_fill()

(4)实例四

实例四也是从同一点出发,画封闭图形,运行结果,大家可以看到,填充正常(图6)。

#代码4
from turtle import*
color('red','green')
hideturtle()
begin_fill()
forward(100)
left(90)
forward(100)
up()
home()
down()
left(90)
circle(-100,90)
end_fill()

2.结论

那么问题来了,从同一点出发画的两个图形,填充效果怎么会不同?

通过试验和分析,我总结出一个结论:涉及到圆弧图形的填充时,默认为弧线内填充(圆心和弧线之间)。当需要外侧填充时,必须是用turtle顺次画出的封闭曲线才能正常填充。根据我们总结的规律,将实例三做修改,经过测试,证明了这结论正确(图7)。

#代码3-修改
from turtle import*
color('red','green')
hideturtle()
begin_fill()
circle(100,90)
forward(-100)
right(90)
forward(-100)
end_fill()

四、绘制月相

理解这个关键所在后,大家可以自己编程测试。下面我们就利用这个结论用来画出任意大小的月相,当然还是先从简单的开始。

1.月亮基本代码

月有阴晴圆缺,怎么画呢?使用circle(半径,弧度数如果不规定则画圆,步数如果给出步数就出多边形)命令(图8)。

from turtle import*
from math import*
bgcolor('black')
color('white','white')
setheading(0)
begin_fill()
circle(100,180)
right(45)
circle(141,-90)
end_fill()
done()

同样,代码第8行半径和角度,第9行的距离,也是我一点点修改、测试出来的。运行效果如图,发现月牙大了(图9)。

2.月相基本知识

月相,天文学术语(phase of the moon),是指天文学中对于地球上看到的月球被太阳照明部分的称呼。月球绕地球运动,使太阳、地球、月球三者的相对位置在一个月的时间中有规律地变动。因为月球本身不发光,且不透明,只有月球直接被太阳照射的部分才能反射太阳光。我们从不同的角度上看到月球被太阳直接照射的部分,这就是月相的来源。月相不是由于地球遮住太阳所造成的(这是月食),而是由于我们只能看到月球上被太阳照到发光的那一部分所造成的,其阴影部分是月球自己的阴暗面。

参考月相图,这里不做过多解释,有兴趣同学可以自己查找相关知识(图10)。

3.月相画法规律

那大家一定会想,各种月相都能画出来吗?有规律吗?咱们看图说话,假设两圆相交的上侧部分是要画的月亮(图11)。

外圆O、内圆O’的半径为r、r’,我们先画一个半径为r的半圆,turtle的方向正好转过180,要想画出下面的小弧,turtle必须旋转一个角度a,然后画个内圆圆弧,大小为a’,由图中可以看出,a’=1800-2* a,而半径r’=r/cos(a),因此,画内弧时,要转过的角度和半径知道了,我们就可以画月亮了。

4.月相代码程序

代码如图12。

#月相大小
from turtle import*
from math import*
a=eval(input("输入内圆弧度数(0-180):"))
r=eval(input("输入外圆半径:"))
bgcolor("black")
color('white','white')
hideturtle()
begin_fill()
circle(r,180)
right(a)
circle(r/cos(a*pi/180),-abs(180-2*a))
end_fill()
done()

运行,输入内圆弧度数相应数值,即可(图13)。

其实这个月亮是在屏幕中心上方的,新月、残月、凸月等月相怎么得到呢(图14)?

#月相大小、位置、方向
from turtle import*
from math import*
xy=input("输入显示位置坐标(用空格分开):")
c=eval(input("输入方向角:"))
a=eval(input("输入内圆弧度数(0-180):"))
r=eval(input("输入外圆半径(与坐标之和小于屏幕大小):"))
b=xy.split(" ")
bgcolor("black")
color('white','white')
hideturtle()
up()
goto(eval(b[0]),eval(b[1]))
down()
setheading(c)
begin_fill()
circle(r,180)
left(-a)
circle(r/cos(a*pi/180),-abs(180-2*a))
end_fill()
done()

运行程序,输入月亮位置坐标、月亮的朝向、内圆弧度数和外圆半径,即可画出任意方向和大小的月亮。注意外圆半径与西医综合横纵坐标之和不能大于屏幕尺寸(图15)。

如果想画凸月,内圆弧度数大于90即可。如果是满月,那就输入180,其它情况大家可以自行测试,其取值范围是0-180(图16)。

五、测试与改进

程序编写过程中,最好边输入代码,边测试,这样可以随时调整程序。

这个案例用到了列表、字符串、数据转换、绝对值等相关知识。math是数学模块,和turtle一样,使用前需要导入。

案例的讲解过程,即是我的实际操作过程,只是遇到了问题,都是经过多次修改、测试得到的结果。既需要耐心,又需要知识点扎实。在此更希望在学习中能真正做到独立思考,研究解决问题的方法和思路,其实这是提高编程能力的最好办法。如有不当之处,请诸位斧正!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
一夜三炸!文班顶薪续约,老詹创无人能破纪录,骑士憋大招

一夜三炸!文班顶薪续约,老詹创无人能破纪录,骑士憋大招

阿讯说天下
2026-06-03 02:13:39
美国务卿:伊朗领导人哈梅内伊仍在世,并“越来越多”与美国接触

美国务卿:伊朗领导人哈梅内伊仍在世,并“越来越多”与美国接触

启迪你的思维
2026-06-03 20:20:29
甘肃最牛诈骗犯,刚出狱就冒充市委副书记,因政绩优秀而被抓

甘肃最牛诈骗犯,刚出狱就冒充市委副书记,因政绩优秀而被抓

神奇的锤子
2025-02-23 22:11:02
冰火两重天!女性成人用品占比超6成,男性ED药日销锐减3.6万片

冰火两重天!女性成人用品占比超6成,男性ED药日销锐减3.6万片

思思夜话
2026-06-02 11:20:02
立刻停止食用这些粗粮,吃得越多,肠癌风险越高?医生告诉你真相

立刻停止食用这些粗粮,吃得越多,肠癌风险越高?医生告诉你真相

华庭讲美食
2026-06-03 17:15:40
痛心!广西失联18岁女孩李思绮去世,月薪3000,晚上11点才下班

痛心!广西失联18岁女孩李思绮去世,月薪3000,晚上11点才下班

黑哥讲现代史
2026-06-03 18:16:59
2亿灵活就业者,正在集体放弃社保:不是不想养老,是真的赌不起

2亿灵活就业者,正在集体放弃社保:不是不想养老,是真的赌不起

职场资深秘书
2026-05-29 15:54:56
告诉爸妈别舍不得开空调!研究发现:温度适当调低,或能产生抑癌效果!

告诉爸妈别舍不得开空调!研究发现:温度适当调低,或能产生抑癌效果!

华医网
2026-06-03 05:41:13
A股“股王”,今天股价突破2000元!刚上市1个多月

A股“股王”,今天股价突破2000元!刚上市1个多月

南方都市报
2026-06-03 16:51:54
时隔5年,A股再现股价2000元以上的股票,26个交易日从81涨上去的

时隔5年,A股再现股价2000元以上的股票,26个交易日从81涨上去的

丁丁鲤史纪
2026-06-03 14:12:18
赌王传家宝亮相!奚梦瑶婚礼戴婆婆珍藏澳白,梁安琪用心良苦

赌王传家宝亮相!奚梦瑶婚礼戴婆婆珍藏澳白,梁安琪用心良苦

动物奇奇怪怪
2026-06-03 18:21:59
陕西省人民政府发布一批人事任免通知

陕西省人民政府发布一批人事任免通知

黄河新闻网吕梁
2026-06-03 16:58:20
撕开资本伪装:快递外卖行业真相剖析

撕开资本伪装:快递外卖行业真相剖析

烽火瞭望者
2026-06-03 06:17:16
每体:卡萨多接近加盟摩纳哥,巴萨要价2000万

每体:卡萨多接近加盟摩纳哥,巴萨要价2000万

懂球帝
2026-06-04 00:07:25
9年投入5800万!董路没教练证却带足球小将夺冠 孙继海:马戏团

9年投入5800万!董路没教练证却带足球小将夺冠 孙继海:马戏团

念洲
2026-06-03 06:51:28
太意外!社保一季度突然“抛弃”科技主线,悄悄重仓3大冷门赛道

太意外!社保一季度突然“抛弃”科技主线,悄悄重仓3大冷门赛道

时光在作祟
2026-06-03 11:38:21
罗齐尔涉嫌收受10万美元贿赂,他将失去几乎全部2660万美元的合同

罗齐尔涉嫌收受10万美元贿赂,他将失去几乎全部2660万美元的合同

好火子
2026-06-04 01:21:00
湖南农村学霸高考只考239,班主任不相信查监控,看到真相他哭了

湖南农村学霸高考只考239,班主任不相信查监控,看到真相他哭了

二十一号故事铺
2024-09-28 06:30:02
豪门婆婆有多豪?赌王送四太的传家澳白,儿媳大婚直接拿来撑场面

豪门婆婆有多豪?赌王送四太的传家澳白,儿媳大婚直接拿来撑场面

一盅情怀
2026-06-03 15:32:19
英超涨幅榜前10:克鲁皮暴涨3000万欧第1,谢尔基上涨2500万

英超涨幅榜前10:克鲁皮暴涨3000万欧第1,谢尔基上涨2500万

懂球帝
2026-06-03 19:39:17
2026-06-04 01:56:49
电脑报少年派 incentive-icons
电脑报少年派
最新鲜的互联网产业资讯
3939文章数 1602关注度
往期回顾 全部

科技要闻

传DeepSeek融资意向500亿:腾讯投100亿

头条要闻

男子不想上班辞职后上武当山当道士 8个月后选择下山

头条要闻

男子不想上班辞职后上武当山当道士 8个月后选择下山

体育要闻

选择中国品牌的库里,和他们的巨大野心

娱乐要闻

官方痛批乱象 刘涛郑恺等艺人遭点名

财经要闻

AI,开始偷懒了?

汽车要闻

专访蒋平:安全不做高低配 长安要让安全技术普惠

态度原创

教育
手机
艺术
时尚
游戏

教育要闻

重磅教育部官宣2026年高考报名人数!清华北大扩招不用留学了?

手机要闻

华为Mate90系列重磅爆料:全新Deco设计登场,三大梯队排名曝光!

艺术要闻

二十年前割麦的场景

月经、初潮与生育真相,那些藏在动画片里的性启蒙

曝《塞尔达》传奇重制版将亮相!任天堂发布会下周见

无障碍浏览 进入关怀版