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变量不能以数字打头详解
Jul 06 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
Jun 12 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
Pandas之排序函数sort_values()的实现
Jul 09 Python
基于Django统计博客文章阅读量
Oct 29 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
python实现单机五子棋
Aug 28 Python
pymysql模块使用简介与示例
Nov 17 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
django文档学习之applications使用详解
2018/01/29 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
python一些性能分析的技巧
2020/08/30 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
简历的自荐信
2013/12/19 职场文书
擅自离岗检讨书
2014/02/11 职场文书
银行授权委托书样本
2014/10/13 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
颐和园导游词
2015/01/30 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
婚礼家长致辞
2015/07/27 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书