python trutle画五星红旗

 学了一个多月python,最近学习trutle模块画图,下面是整个代码,有详细注释,初学者可以参考,共同学习,有好的意见可以留言,欢迎阅读

import turtle as t
import math
t.speed(3)
t.setup(width=760,height=540,startx=820,starty=0)
t.title('五星红旗')
t.color('red','red')
t.penup()
t.goto(-330,220)
t.pendown()
t.begin_fill()
for i in range(2):#画出整个红色部分
  t.fd(660)
  t.right(90)
  t.fd(440)
  t.right(90)
t.end_fill()
#把整体660X440分成上下10等分,左右15等分
n = 22 #一等分的长度
#四个小星星的坐标,网上找的教程详情参考网站:https://baijiahao.baidu.com/s?id=1721944369716436370&wfr=spider&for=pc
x1,y1 = -n*5,n*8
x2,y2 = -n*3,n*6
x3,y3 = -n*3,n*3
x4,y4 = -n*5,n
t.penup()
t.goto(-(330-5*n),n*5)#大五角星所在圆的圆心,上五行【下五】行和【左五】列右十列的交叉位置
#t.dot(n*3,'red')#画一个隐形圆用于取五角星的五个顶点,半径是3等分
t.sety(110+3*n)#以圆的正上方为第一个顶点,取五个点的坐标
a = []#创建空列表用于存储坐标
t.setheading(180)
t.color('yellow','yellow')#设置画笔以及填充颜色都为黄色
for i in range(5):
  t.circle(66,72)#半径66,弧度72画圆,等于把圆分成5等分,记录每次终点坐标
  a.append(t.pos())
t.begin_fill()
#通过访问每一点坐标来画出五角星
#这个顺序根据五角星的画法路线自己琢磨的,路线应该是固定的
t.goto(a[1])
t.goto(a[3])
t.goto(a[0])
t.goto(a[2])
t.goto(a[4])
t.end_fill()
#定义函数用来画小五角星
#参数为小五角星所在圆的圆心坐标,大体方法类似于大五角星的方法,取值不同,
#需要用到math库计算角度和距离
def get_value(x, y):
  #大五角星到小五角星的圆心距离,勾股定理计算
  fd_value = math.sqrt((110 - y) ** 2 + (-220 - x) ** 2)
  # print(fd_value)
  t.goto(-220, 110)#大五角星的圆心
  head = math.atan2(110 - y, -220 - x)
  # print(math.degrees(head))
  t.setheading(math.degrees(head) + 180)#计算偏角,math库里的方法
  # print(t.heading())
  t.fd(fd_value)
  t.bk(22)#从大圆心到小圆心,要抬笔,只需要路线,到达圆心之后原路返回小圆心半径的距离,开始画圆,因为默认是从当前位置逆时针开始画圆
  t.right(90)#右转90°,摆正位置
  #下面方法跟大五角星一样
  a = []
  for i in range(5):
    t.circle(22, 72)
    a.append(t.pos())
  t.begin_fill()
  t.goto(a[1])
  t.goto(a[3])
  t.goto(a[0])
  t.goto(a[2])
  t.goto(a[4])
  t.end_fill()
#调用函数,传入参数
get_value(-n * 5, n * 8)
get_value(-n * 3, n * 6)
get_value(-n * 3, n * 3)
get_value(-n * 5, n)
#隐藏画笔


t.hideturtle()
t.mainloop()

你可能感兴趣的:(python)