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程序
Apr 04 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
Python自定义线程池实现方法分析
Feb 07 Python
Numpy掩码式数组详解
Apr 17 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
python3爬虫中异步协程的用法
Jul 10 Python
python实现计算图形面积
Feb 22 Python
Python学习之包与模块详解
Mar 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
我的论坛源代码(六)
2006/10/09 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
php经典趣味算法实例代码
2020/01/21 PHP
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
使用C++扩展Python的功能详解
2018/01/12 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
基于Python的PIL库学习详解
2019/05/10 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
广州品高软件.net笔面试题目
2012/04/18 面试题
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
大学生学习生活的自我评价
2013/11/01 职场文书
心理健康心得体会
2014/01/02 职场文书
科研课题实施方案
2014/03/18 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
Django程序的优化技巧
2021/04/29 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫