四时宝库

程序员的知识宝库

Python Turtle 使用‘类’ 画星星

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)

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接