新手学习,如何用turtle画一个五星红旗!!

作为一个Python学习的新手,在学习了邹琪鲜老师的网易云课程后有一个小作业,让使用turtle画一个美国国旗,但zuo作为一个中国人,为啥要画美国国旗啊,要画就画中国国旗!

新手学习,如何用turtle画一个五星红旗!!_第1张图片

首先在网上百度了一下国旗,看完后瞬间就蒙圈了!!!

国旗尺寸分6种规格(单位MM):
1号,2880×1920;
2号,2400×1600;
3号,1920×1280;
4号,1440×960;
5号,960×640;
6号,660×440;
五颗星的位置尺寸及大小星的比例:
为便于确定五星之位置,
先将旗面对分为四个相等的长方形,将左上方之长方形上下划为十等分,左右划为十五等分。
大五角星的中心点,在该长方形上五下五、左五右十之处。
其画法为:
以此点为圆心,以三等分为半径作一圆。
在此圆周上,定出五个等距离的点,其一点须位于圆之正上方。
然后将此五点中各相隔的两点相联,使各成一直线。
此五直线所构成之外轮廓线,即为所需之大五角星。
五角星之一个角尖正向上方。
四颗小五角星的中心点,
第一点在该长方形上二下八、左十右五之处,
第二点在上四下六、左十二右三之处,
第三点在上七下三、左十二右三之处,
第四点在上九下一、左十右五之处。
其画法为:以以上四点为圆心,各以一等分为半径,分别作四个圆。
在每个圆上各定出五个等距离的点,其中均须各有一点位于大五角星中心点与以上四个圆心的各联结线上。
然后用构成大五角星的同样方法,构成小五角星。
此四颗小五角星均各有一个角尖正对大五角星的中心点。

要是按照上述画法,作为新手完全无法实用turtle实现。但是作为第一次看到国旗画法的我颇感兴趣,于是按照上述画法使用CAD画了一个国旗的图,如下图所示:

新手学习,如何用turtle画一个五星红旗!!_第2张图片

 考虑到已经用CAD画出了图形,所以我想尝试使用一个笨办法,即利用turtle里面的坐标轴。将所画CAD图形中五角星的一角的位置转化为turtle里面具体坐标,所以我选取了五个点,分别为大星的顶点,以及每个小星距离大星最近的角点作为参考点。这样考虑按上图国旗尺寸设置画布大小,turtle坐表原点为画布中心,所以利用CAD测量出每个点的大小以及箭头需要旋转的角度。具体参数如下表所示:(小星顺序为从上到下)

  参考点 旋转角度 长度
大星 (-960,768) 顺108度 547.8
小星1 (-562.3,718.6) 逆121度 182.6
小星2 (-383,562.4) 顺23度 182.6
小星3 (-380.2,311.8) 顺24度 182.6
小星4 (-554.7,153.3) 顺23度 182.6

CAD草图如下:

新手学习,如何用turtle画一个五星红旗!!_第3张图片

最后附上代码(可在Python 的IDLE里直接运行)

import turtle
turtle.screensize(2880,1920,"red")
turtle.pensize(1)
turtle.pencolor("yellow")
turtle.penup()
turtle.goto(-960,768)
turtle.pendown()
turtle.right(108)

turtle.fillcolor("yellow")#主五角心绘制
turtle.begin_fill()
for _ in range(5):
  turtle.forward(547.8)
  turtle.left(144)
turtle.end_fill()

turtle.penup()#调整画笔位置及角度
turtle.goto(-562.3,718.6)
turtle.pendown()
turtle.left(121)

turtle.begin_fill()#绘制第一个小五角星
for _ in range(5):
  turtle.forward(182.6)
  turtle.left(144)
turtle.end_fill()

turtle.penup()#调整画笔位置及角度
turtle.goto(-383,562.4)
turtle.pendown()
turtle.right(23)

turtle.begin_fill()#绘制第二个小五角星
for _ in range(5):
  turtle.forward(182.6)
  turtle.left(144)
turtle.end_fill()

turtle.penup()#调整画笔位置及角度
turtle.goto(-380.2,311.8)
turtle.pendown()
turtle.right(24)

turtle.begin_fill()#绘制第三个小五角星
for _ in range(5):
  turtle.forward(182.6)
  turtle.left(144)
turtle.end_fill()

turtle.penup()#调整画笔位置及角度
turtle.goto(-554.7,153.3)
turtle.pendown()
turtle.right(23)

turtle.begin_fill()#绘制第三个小五角星
for _ in range(5):
  turtle.forward(182.6)
  turtle.left(144)
turtle.end_fill()

turtle.hideturtle()

运行结果图:

新手学习,如何用turtle画一个五星红旗!!_第4张图片

最后虽然画出来了,但是还是存在两个问题:

(1)画图无法完整显示,部分隐藏在滚轮部分;

(2)所画图形无法导出文件,网上搜索的如下代码:

ts = turtle.getscreen()
ts.getcanvas().postscript(file="duck.eps")

使用过,但存在导出图片不完整,以及颜色丢失问题。

望知道如何解决的大神告知!!!!!

你可能感兴趣的:(Python,turtle)