上机实验2——turtle 库绘制进阶图形

知识点:turtle 库坐标控制、循环结构、函数封装(教材2.3-2.4)

实验任务 :

  1. 绘制嵌套彩色五角星(大小逐层递减)
  2. 设计函数绘制自定义正多边形(边数与颜色参数化)
  3. 扩展:实现动态旋转花瓣图案。

实现思路:
1.导入 turtle 库用于绘图操作,导入 time 库(需要控制旋转速度)来实现延迟功能。
2. 确定五角星的颜色列表,设置初始大小。通过循环来控制绘制五角星的数量,在每次循环内,设置画笔颜色,使用内层循环绘制单个五角星的五条边。绘制完一个五角星后,减小其大小并调整画笔位置,以便绘制下一个更小的五角星。
3. 设计一个函数,接收边数和颜色作为参数。在函数内,根据边数计算出每个外角的角度。设置好画笔颜色后,通过循环,按边数绘制多边形的每条边,每次绘制完一条边后,让画笔旋转相应的外角角度。
4. 先设计函数绘制单个花瓣,利用 turtleturtle.circle()圆弧绘制方法来实现。再设计函数,根据花瓣数量,循环调用绘制单个花瓣的函数,并旋转一定角度,从而绘制出完整的花朵。最后设计动态旋转函数,在每次循环中,先清除之前绘制的内容,重新绘制花朵,然后让花朵旋转一定角度,并使用 timetime.sleep()函数添加延迟,以实现动态旋转效果。

完整代码:

import turtle
import time


def draw_nested_pentagrams():
    colors = ['pink', 'green', 'blue', 'orange', 'purple']
    size = 200
    for i in range(5):
        turtle.pencolor(colors[i])
        for _ in range(5):
            turtle.forward(size)
            turtle.right(144)
        size -= 40
        turtle.penup()
        turtle.forward(20)
        turtle.right(144)
        turtle.pendown()


def draw_regular_polygon(sides, color):
    angle = 360 / sides
    turtle.pencolor(color)
    for _ in range(sides):
        turtle.forward(100)
        turtle.right(angle)


def draw_petal():
    turtle.circle(100, 60)
    turtle.left(120)
    turtle.circle(100, 60)


def draw_flower(num_petals):
    for _ in range(num_petals):
        draw_petal()
        turtle.left(360 / num_petals)


def rotate_flower(num_petals, duration):
    screen = turtle.Screen()
    for _ in range(duration):
        screen.tracer(0)
        turtle.clear()
        draw_flower(num_petals)
        screen.update()
        turtle.left(1)
        # 每旋转一次添加 0.1 秒的延迟
        time.sleep(0.1)


# 设置画布和画笔
turtle.speed(0.55)
turtle.pensize(2)

# 绘制嵌套彩色五角星
draw_nested_pentagrams()

# 移动画笔到新位置
turtle.penup()
turtle.goto(200, 0)
turtle.pendown()

# 绘制自定义正多边形(例如,六边形,黄色)
draw_regular_polygon(6, 'black')

# 移动画笔到新位置绘制旋转花瓣
turtle.penup()
turtle.goto(-200, -200)
turtle.pendown()

# 动态旋转花瓣图案
rotate_flower(8, 360)

# 完成绘制
turtle.done()

运行截图:

posted @ 2025-04-18 10:13  Uiui·  阅读(21)  评论(0)    收藏  举报