import math
import turtle
# 画布及画笔设置
turtle.setup(1200, 800) # 画布大小
turtle.bgcolor("red") # 画布颜色
turtle.fillcolor("yellow") # 填充颜色
turtle.color("yellow") # 画笔颜色
turtle.speed(5) # 画的速度(数字越大画的越快)
# 主星
turtle.begin_fill() # 开始填充
turtle.up() # 提起画笔
turtle.goto(-520, 240)
turtle.down() # 放下画笔,画出痕迹
for i in range(5): # 五条边
turtle.forward(240)
turtle.right(144)
turtle.end_fill() # 结束填充
def stars(lr, du, h): # lr传方向,du表示要转化的角度,h表示离画笔的高度
turtle.up()
turtle.goto(-400, 200) # 大星原点
turtle.setheading(0) # 重置海龟方向(水平向右)
if lr == "left":
turtle.left(math.degrees(du))
else:
turtle.right(math.degrees(du))
turtle.forward((h * 40) / math.sin(du) - 40) # 大星与小星的距离减小星的半径
turtle.left(18) # 小星顶点转向画边
turtle.down()
turtle.begin_fill()
for j in range(5):
turtle.forward(80 * math.cos(18))
turtle.right(144)
turtle.end_fill()
# 第一颗星
stars("left", math.atan(3 / 5), 3)
# 第二颗星
stars("left", math.atan(1 / 7), 1)
# 第三颗星
stars("right", math.atan(2 / 7), 2)
# 第四颗星
stars("right", math.atan(4 / 5), 4)
turtle.hideturtle()
turtle.done()
思路:先设置画布画笔的一些属性,然后把画笔移至大星左角,画出大星,然后以大星的圆心为标准与小星圆心相连,计算出距离通过计算将海龟移至小星与圆的交点画出小星
特别注意的是在画小星调用函数的时候要清楚的知道海龟的方向,我就是忘了重置海龟方向然后一直画不出红旗,重置代码就是turtle.setheading(0)