import math as m
import random as rdm
import turtle as ttl
from turtle import Turtle
import turtle_snow as sn
class Pattern(Turtle):
# Pattern 继承Turtle类的所有方法
# 将画星星的方法变成Pattern的内置方法
def draw_stars(self,x=0,y=0,r=1,heading=0):
'x,y为星星的中心点坐标;r为中心点到角点的距离;heading为画笔的角度'
self.color('yellow','yellow') # 设置画笔颜色和填充颜色
fd = 2*r*m.sin(m.radians(72))*(m.sin(m.radians(18)))/(
m.sin(m.radians(180-36-18)))
# 根据画笔朝向角度计算画笔起点至中心点连线与Y轴夹角角度
degree = heading + 72
# 根据中心点坐标计算画笔起点坐标
newX = x - r*m.sin(m.radians(degree))
newY = y + r*m.sin(m.radians(90 - degree))
self.up()
self.setpos(newX,newY) # 设置画笔起点坐标
self.setheading(heading) # 设置画笔朝向
self.down()
self.begin_fill()
while True:
self.fd(fd)
self.left(72)
self.fd(fd)
self.right(144)
if abs(self.pos() - (newX,newY)) < 1:
break
self.end_fill()
self.hideturtle()
# 使用Pattern
p = Pattern()
ttl.screensize(600,600,'skyblue')
p.getscreen().tracer(60,0)
for i in range(30):
x = 300 * rdm.random() * rdm.choice([-1,1])
y = 300 * rdm.random() * rdm.choice([-1,1])
r = rdm.randint(6,25)
heading = 72 * rdm.random()
# 像调用turtle的各种方法一样,调用方法draw_stars
p.draw_stars(x,y,r,heading)