Author: Notus(hehe_xiao@qq.com)

Create: 2019-02-19

Update: 2019-02-19

利用turtle模块绘制五星红旗

原理不算太复杂,只是需要稍稍算一下。注释部分写的比较详细,大家自己研究,话不多说。

环境

Python version: 3.7.1

示例-网上国旗墨线图

代码运行效果

加上辅助线(墨线)后效果

最终效果(去掉辅助墨线)

代码如下

'''

绘制五星红旗(Five-Starred Red Flag)

@Author: Notus(hehe_xiao@qq.com)

@Create: 2019-02-18

@Update: 2019-02-19

@Version: 1.0

国旗数据分析:(参照下方参考图片)

1. 最小单元格 A 的大小设为(长*宽,下同):10*10

2. 左上角1/4矩形B被分成:15*10个A, 尺寸为 150 * 100

3. 国旗矩形C大小为:300 * 200(为3:2的比例)

4. 若向下为正,向右为正。大五角星相对国旗左上角(0,0)坐标为(x, y): (50, 50)

5. 4个小五角星从上至下分别为:(100, 20), (120, 40), (120, 70), (100, 90)

6. 五角星每个角36度

国旗数据参考图片(国旗黑线图):https://gss2.bdstatic.com/-fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=dc24ea3a11d5ad6ebef46cb8e0a252be/78310a55b319ebc4b97aa7678826cffc1f1716c9.jpg

'''

import turtle

from math import *

# 绘制五角星, 默认为正五角星(一个顶点朝正北方)

# 五角星每个顶角的角度为 180/5 = 36度 或 pi/5

# (x, y): 五角星中心点坐标

# size: 中心到顶点的长度, 即外接圆的半径

# angle 旋转角度, 正五角星正北顶点 turtle.left 方式旋转到被绘制五角星的角度

def draw5star(x=0, y=0, size=100, angle=0, fillcolor='yellow', pencolor='yellow'):

turtle.speed(0)

turtle.shape('blank')

turtle.color(pencolor, fillcolor)

turtle.penup()

# 定位到中心点正北方顶点(angle为0时的正北方)

turtle.goto(x, y)

turtle.setheading(90)

turtle.left(angle)

turtle.forward(size)

turtle.right(180-36/2)

turtle.pendown()

# 一条直线上的两个顶点的距离

distance = 2 * size * cos(pi/10)

# 开始绘制,对于 angle 为 0 的, 从正北方顶点开始

turtle.begin_fill()

for i in range(5):

turtle.forward(distance)

turtle.right(144)

turtle.end_fill()

# 画矩形

# (x,y) 矩形左上角坐标

def drawrectangle(x=0, y=0, height=100, width=100, fillcolor='red', pencolor='black'):

turtle.speed(0)

turtle.shape('blank')

turtle.color(pencolor, fillcolor)

turtle.penup()

turtle.goto(x, y)

turtle.setheading(0)

turtle.pensize(2)

turtle.pendown()

turtle.begin_fill()

turtle.forward(width)

turtle.right(90)

turtle.forward(height)

turtle.right(90)

turtle.forward(width)

turtle.right(90)

turtle.forward(height)

turtle.end_fill()

# 画辅助线,方便判断

# (x,y) 国旗中心点坐标

# mag 国旗放大倍数

def drawsubline(x=0, y=0, mag=1):

# 国旗尺寸

width = 300 * mag

height = 200 * mag

# 画中心十字

turtle.speed(0)

turtle.shape('blank')

turtle.pencolor('black')

turtle.penup()

turtle.goto(x+width/2, y)

turtle.setheading(180)

turtle.pensize(2)

turtle.pendown()

turtle.forward(width)

turtle.penup()

turtle.goto(x, y-height/2)

turtle.setheading(90)

turtle.pendown()

turtle.forward(height)

# 画小方格的横线

for i in range(1, 10):

# 横线

turtle.penup()

turtle.goto(x, y+height/2-i*10*mag)

turtle.setheading(180)

turtle.pendown()

turtle.forward(width/2)

# 画小方格的竖线

for i in range(1, 15):

turtle.penup()

turtle.goto(x-width/2+i*10*mag, y)

turtle.setheading(90)

turtle.pendown()

turtle.forward(height/2)

# 计算国旗矩形左上角坐标

r_x = x - width/2

r_y = y + height/2

# 画大五角星外接圆,圆绘制起始点为圆最右侧切点

turtle.penup()

turtle.goto(r_x+80*mag, r_y-50*mag)

turtle.pendown()

turtle.circle(30*mag)

# 画4个小五角星外接圆,从上至下 (110, 20), (130, 40), (130, 70), (110, 90)

turtle.penup()

turtle.goto(r_x+110*mag, r_y-20*mag)

turtle.pendown()

turtle.circle(10*mag)

turtle.penup()

turtle.goto(r_x+130*mag, r_y-40*mag)

turtle.pendown()

turtle.circle(10*mag)

turtle.penup()

turtle.goto(r_x+130*mag, r_y-70*mag)

turtle.pendown()

turtle.circle(10*mag)

turtle.penup()

turtle.goto(r_x+110*mag, r_y-90*mag)

turtle.pendown()

turtle.circle(10*mag)

# 画4个小星到大星中心的连线

turtle.penup()

turtle.goto(r_x+100*mag, r_y-20*mag)

turtle.pendown()

turtle.goto(r_x+50*mag, r_y-50*mag)

turtle.penup()

turtle.goto(r_x+120*mag, r_y-40*mag)

turtle.pendown()

turtle.goto(r_x+50*mag, r_y-50*mag)

turtle.penup()

turtle.goto(r_x+120*mag, r_y-70*mag)

turtle.pendown()

turtle.goto(r_x+50*mag, r_y-50*mag)

turtle.penup()

turtle.goto(r_x+100*mag, r_y-90*mag)

turtle.pendown()

turtle.goto(r_x+50*mag, r_y-50*mag)

#绘制五星红旗

#(x, y) 红旗中心点坐标, 默认为(0,0),即标准模式turtle绘图的中心起点。

# mag: 放大倍数, maganification

def drawflag(x=0, y=0, mag=1):

# 国旗尺寸

width = 300 * mag

height = 200 * mag

# 计算国旗矩形左上角坐标

r_x = x - width/2

r_y = y + height/2

# 画国旗矩形

drawrectangle(x=r_x, y=r_y, height=height, width=width)

# 画最大的五角星

draw5star(x=r_x+50*mag, y=r_y-50*mag, size=30*mag)

# draw5star(x=r_x+50*mag, y=r_y-50*mag, size=30*mag)

# 从上至下画4颗小五角星, 中心:(100, 20), (120, 40), (120, 70), (100, 90)

l_size = 10 * mag

draw5star(x=r_x+100*mag, y=r_y-20*mag, size=l_size, angle=180-atan(5/3)/pi*180)

draw5star(x=r_x+120*mag, y=r_y-40*mag, size=l_size, angle=180-atan(7/1)/pi*180)

draw5star(x=r_x+120*mag, y=r_y-70*mag, size=l_size, angle=90-atan(2/7)/pi*180)

draw5star(x=r_x+100*mag, y=r_y-90*mag, size=l_size, angle=90-atan(4/5)/pi*180)

if __name__ == '__main__':

drawflag(mag=2.5)

# drawsubline(mag=2.5)

input()

用python函数画德国国旗代码_每日一程-11.利用Python turtle库绘制国旗相关推荐

  1. python爬取素材图片代码_一篇文章教会你利用Python网络爬虫获取素材图片

    [一.项目背景] 在素材网想找到合适图片需要一页一页往下翻,现在学会python就可以用程序把所有图片保存下来,慢慢挑选合适的图片. [二.项目目标] 1.根据给定的网址获取网页源代码. 2.利用正则 ...

  2. 用python函数画德国国旗代码_Python使用Turtle模块绘制五星红旗代码示例

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

  3. python函数使用易错点_大部分人都会忽略的Python易错点总结

    python中复数实现(-2) ** 0.5和开根号sqrt(-2)的区别 (-2)**0.5和sqrt(-2)是不同的,前者是复数后者是会报错的. print((-2)**0.5) #输出:(8.6 ...

  4. python抖音涨粉代码_百万点赞怎么来?Python批量制作抖音的卡点视频原来这么简单!...

    1 目 标 场 景 玩抖音的朋友都应该知道,最近「卡点视频」简直不要太火.抖音上很多大神也出了剪辑各种卡点视频的教程. 实际上,利用很多手机 APP 或者 PR.FCPX 软件也可以制作卡点视频,但是 ...

  5. 如何用python开发一个贪吃蛇游戏_教你一步步利用python实现贪吃蛇游戏

    教你一步步利用python实现贪吃蛇游戏 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  教你一步步利用python实现贪吃蛇游戏.txt ] (友情提示:右键点 ...

  6. 用python函数画德国国旗代码_用Python的turtle模块画国旗

    最近在学Python,发现Python的海龟绘图非常有趣,就分享一下!话不多说,先来Python turtle的官方文档链接: Python turtle.这里面有turtle的各类指令.turtle ...

  7. 用python函数画德国国旗代码_使用Python的turtle模块画国旗

    Python的turtle模块画国旗主要用到两个函数:draw_rentangle和draw_star. 至于函数的调用就和我们学的C,C++是一样的.对于turtle画国旗的程序中,首先是查找国旗的 ...

  8. 用python函数画德国国旗代码_用Python绘制一面国旗

    import turtle as tu tu.hideturtle() #隐藏海龟 tu.speed(10) tu.title("Chinese National Flag.") ...

  9. 用python函数画德国国旗代码_用python画个五星红旗

    importturtle turtle.bgcolor("red") turtle.fillcolor("yellow") turtle.color('yell ...

最新文章

  1. 报名 | 高级管理人员AI大数据能力研修班
  2. Html5版本的全套股票行情图开源了,附带实现技术简介
  3. 什么是.NET 程序集强签名
  4. [leetcode]110.平衡二叉树
  5. 【剑指offer】——【python中return函数中的and和or表达式的返回值】
  6. 开发工具总结(2)之全面总结Android Studio2.X的填坑指南
  7. vim中如何设置多行注释和删除注释
  8. 8X25Q充电部分软件梳理(CP侧)
  9. MFC实现mysql备份_MySQL如何自动备份 - MySQL - VC中文网-VC-MFC编程论坛 - Powered by Discuz!...
  10. 微信公众平台开发4-长链接转短链接口调用实例(含源码)
  11. 【fabric实战指南二】Fabric v1.0 部署过程原理详解
  12. 网络安装ubuntu操作系统
  13. 数据库基础 新手入门(一)
  14. python zen_The Zen of Python
  15. app软件怎么开发 盘点3种app制作方式
  16. python爬取上海高级人民法院网开庭公告数据
  17. word自动保存的文件怎么恢复,word文件恢复
  18. JAVA 入坑教程 | 章节九 详解java的装箱和拆箱
  19. GTX 1050ti和GTX960哪个好
  20. 【图解】九张图带你读懂大数据医疗

热门文章

  1. 山地自行车系统的组成部分及论如何自己组装一台山地车
  2. 正则表达式 密码 需包含字母数字特殊字符
  3. SciTe 中文设置(解决乱码,中文界面)
  4. 海伦公式求三角形垂线长度
  5. 2018年,中国空气质量在全球的排名,你一定想不到!
  6. move lob会不会影响其他索引状态?
  7. 炫“库”行动-人大金仓有奖征文-数据库的备份及恢复
  8. 软阈值函数作用图matlab,软阈值(Soft Thresholding)函数解读
  9. 不考研,编程能力不强的大二同学,选择哪个专业方向?
  10. 最优控制理论 五+、极大值原理Bang-Bang控制问题的求解