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 20 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
python处理xml文件的方法小结
May 02 Python
python决策树之C4.5算法详解
Dec 20 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
python顺序执行多个py文件的方法
Jun 29 Python
Python数学形态学实例分析
Sep 06 Python
Python实现代码统计工具
Sep 19 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 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
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
浅谈Python单向链表的实现
2015/12/24 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
手机促销活动方案
2014/02/05 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
优秀教师单行材料
2014/12/16 职场文书
销售助理岗位职责
2015/02/11 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
高一数学教学反思
2016/02/18 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL