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 列表list使用介绍
Nov 30 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
Python学习思维导图(必看篇)
Jun 26 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
Python shelve模块实现解析
Aug 28 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
Python logging日志库空间不足问题解决
Sep 14 Python
Python音乐爬虫完美绕过反爬
Aug 30 Python
python获取带有返回值的多线程
May 02 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
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
JavaScript里实用的原生API汇总
2015/05/14 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
vue ssr 指南详读
2018/06/29 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
Python实现全角半角转换的方法
2014/08/18 Python
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
Python与C/C++的相互调用案例
2021/03/04 Python
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
室内设计实习自我鉴定
2013/09/25 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
工程负责人任命书
2014/06/06 职场文书
班级口号大全
2014/06/09 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
关于颐和园的导游词
2015/01/30 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书