Python使用Turtle模块绘制五星红旗代码示例


Posted in Python onDecember 11, 2017

在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言。python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些基本理念有所理解。

在作业提交的论坛里看到很多turtle画出来的精美图形,想不出什么要画的东西,于是决定拿五星红旗来练练手。

前期准备

五星红旗绘制参数

Turtle官方文档

turtle的基本操作

# 初始化屏幕
window = turtle.Screen()
# 新建turtle对象实例
import turtle
aTurtle = turtle.Turtle()
# 海龟设置
aTurtle.hideturtle() # 隐藏箭头
aTurtle.speed(10)  # 设置速度
# 前进后退,左转右转
aTurtle.fd(100)  # 前进100像素
aTurtle.right(90) # 右转90°
aTurtle.back(100)
aTurtle.left(90)
# 填充颜色
aTurtle.begin_fill()
aTurtle.fillcolor('yellow')
DoSomethinghere()
aTurtle.end_fill()
# 抬起笔和放下笔,这样进行的操作不会留下痕迹
aTurtle.penup()
aTurtle.goto(start_pos)
aTurtle.fd(radius)
aTurtle.pendown()

绘制五星红旗代码

github地址:https://gist.github.com/dc11287081ee67075da8

#!/usr/bin/env python   
# -*- coding: utf-8 ?*-
''' 对于turtle类的一些封装方法,包括画正多边形,正多角形和五星红旗。'''
__author__ = 'Hu Wenchao'
 
import turtle
import math
 
def draw_polygon(aTurtle, size=50, n=3):
  ''' 绘制正多边形
  args:
    aTurtle: turtle对象实例
    size: int类型,正多边形的边长
    n: int类型,是几边形    
  '''
  for i in xrange(n):
    aTurtle.forward(size)
    aTurtle.left(360.0/n)
 
def draw_n_angle(aTurtle, size=50, num=5, color=None):
  ''' 绘制正n角形,默认为黄色
  args:
    aTurtle: turtle对象实例
    size: int类型,正多角形的边长
    n: int类型,是几角形  
    color: str, 图形颜色,默认不填色
  '''
  if color:
    aTurtle.begin_fill()
    aTurtle.fillcolor(color)
  for i in xrange(num):
    aTurtle.forward(size)
    aTurtle.left(360.0/num)
    aTurtle.forward(size)
    aTurtle.right(2*360.0/num)
  if color:
    aTurtle.end_fill()
 
def draw_5_angle(aTurtle=None, start_pos=(0,0), end_pos=(0,10), radius=100, color=None):
  ''' 根据起始位置、结束位置和外接圆半径画五角星
  args:
    aTurtle: turtle对象实例
    start_pos: int的二元tuple,要画的五角星的外接圆圆心
    end_pos: int的二元tuple,圆心指向的位置坐标点
    radius: 五角星外接圆半径
    color: str, 图形颜色,默认不填色  
  '''
  aTurtle = aTurtle or turtle.Turtle()
  size = radius * math.sin(math.pi/5)/math.sin(math.pi*2/5)
  aTurtle.left(math.degrees(math.atan2(end_pos[1]-start_pos[1], end_pos[0]-start_pos[0])))
  aTurtle.penup()
  aTurtle.goto(start_pos)
  aTurtle.fd(radius)
  aTurtle.pendown()
  aTurtle.right(math.degrees(math.pi*9/10))
  draw_n_angle(aTurtle, size, 5, color)
 
def draw_5_star_flag(times=20.0):
  ''' 绘制五星红旗
  args:
    times: 五星红旗的规格为30*20, times为倍数,默认大小为10倍, 即300*200
  '''
  width, height = 30*times, 20*times
  # 初始化屏幕和海龟
  window = turtle.Screen()
  aTurtle = turtle.Turtle()
  aTurtle.hideturtle()
  aTurtle.speed(10)
  # 画红旗
  aTurtle.penup()
  aTurtle.goto(-width/2, height/2)
  aTurtle.pendown()
  aTurtle.begin_fill()
  aTurtle.fillcolor('red')
  aTurtle.fd(width)
  aTurtle.right(90)
  aTurtle.fd(height)
  aTurtle.right(90)
  aTurtle.fd(width)
  aTurtle.right(90)
  aTurtle.fd(height)
  aTurtle.right(90)  
  aTurtle.end_fill()
  # 画大星星
  draw_5_angle(aTurtle, start_pos=(-10*times, 5*times), end_pos=(-10*times, 8*times), radius=3*times, color='yellow') 
  # 画四个小星星
  stars_start_pos = [(-5, 8), (-3, 6), (-3, 3), (-5, 1)]
  for pos in stars_start_pos:
    draw_5_angle(aTurtle, start_pos=(pos[0]*times, pos[1]*times), end_pos=(-10*times, 5*times), radius=1*times, color='yellow') 
  # 点击关闭窗口
  window.exitonclick()
if __name__ == '__main__':
    draw_5_star_flag()

结果:

Python使用Turtle模块绘制五星红旗代码示例

总结

以上就是本文关于Python使用Turtle模块绘制五星红旗代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python 字符串中的字符倒转
Sep 06 Python
Python中的日期时间处理详解
Nov 17 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
微信跳一跳小游戏python脚本
Jan 05 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
详解Python3序列赋值、序列解包
May 14 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
python基础之停用词过滤详解
Apr 21 Python
浅析Git版本控制器使用
Dec 10 #Python
python中Apriori算法实现讲解
Dec 10 #Python
Python自动化运维之IP地址处理模块详解
Dec 10 #Python
python利用rsa库做公钥解密的方法教程
Dec 10 #Python
Python跨文件全局变量的实现方法示例
Dec 10 #Python
git进行版本控制心得详谈
Dec 10 #Python
Python内置模块turtle绘图详解
Dec 09 #Python
You might like
风格模板初级不完全修改教程
2006/10/09 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
Python 字典dict使用介绍
2014/11/30 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
酒店值班经理的工作职责范本
2014/02/18 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
白酒代理协议书范本
2014/10/26 职场文书
生日宴会祝酒词
2015/08/10 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL