用Python的Turtle制作自己的星空

  

想制作自己的星空?Python语言中一个名为Turtle的模块可以帮助您实现这一目标。Turtle是一个图形库,可以通过简单的命令控制海龟图像的行为,从而实现绘制各种图形,包括星空。

以下是用Python的Turtle制作自己的星空的完整攻略:

步骤一:导入Turtle模块和其他必要的模块

首先,需要导入Turtle模块,通过pip命令安装后才可以导入。此外,还需要导入colorsys、random和time模块。

import turtle
import colorsys
import random
import time

步骤二:创建海龟对象

接下来,需要创建一个海龟对象,这个对象将用于绘制星空。可以设置海龟的形状,颜色等。

t = turtle.Turtle()
t.getscreen().bgcolor("black")
t.speed("fastest")
t.color("white")

步骤三:绘制星空

在这一步中,将使用一种随机坐标和颜色的技巧来绘制星空。

def draw_star(turtle, x, y, size):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()

    angle = 120

    for side in range(5):
        turtle.forward(size)
        turtle.right(angle)
        turtle.forward(size)
        turtle.right(72 - angle)
    turtle.penup()
    turtle.ht()


while True:
    ran_size = random.randint(0, 20)
    ran_col = random.randint(0, 255)
    time.sleep(0.05)

    # 产生随机坐标 
    x = random.randint(-turtle.window_width()//2, turtle.window_width()//2)
    y = random.randint(-turtle.window_height()//2, turtle.window_height()//2)

    # 将RGB颜色转换成海龟颜色 
    r, g, b = colorsys.hsv_to_rgb(ran_col/255.0, 1.0, 1.0)
    t.pencolor(r, g, b)

    draw_star(t, x, y, ran_size)

使用此方法,可以绘制出随机大小和位置的“星星”来模拟星空。

示例一:修改星星形状

在绘制星空的过程中,也可以尝试修改星星的形状。以下是一个示例,其中星星的形状为一个正方形:

def draw_square(turtle, x, y, size):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()

    for i in range(4):
        turtle.forward(size)
        turtle.right(90)

    turtle.penup()
    turtle.ht()

while True:
    ran_size = random.randint(0, 20)
    ran_col = random.randint(0, 255)
    time.sleep(0.05)

    # 产生随机坐标 
    x = random.randint(-turtle.window_width()//2, turtle.window_width()//2)
    y = random.randint(-turtle.window_height()//2, turtle.window_height()//2)

    # 将RGB颜色转换成海龟颜色 
    r, g, b = colorsys.hsv_to_rgb(ran_col/255.0, 1.0, 1.0)
    t.pencolor(r, g, b)

    draw_square(t, x, y, ran_size)

示例二:添加星座

另外,也可以尝试添加星座,使得星空更具有实际意义。以下是一个示例,绘制了北斗七星和猎户座:

def draw_star(turtle, x, y, size):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()

    angle = 120

    for side in range(5):
        turtle.forward(size)
        turtle.right(angle)
        turtle.forward(size)
        turtle.right(72 - angle)
    turtle.penup()
    turtle.ht()

def draw_ursa_major(turtle):
    # 绘制北斗七星座
    turtle.goto(-200, 100)
    turtle.pendown()
    turtle.write("Ursa Major", font=("Arial", 12, "normal"))

    draw_star(turtle, -200, 0, 25)
    draw_star(turtle, -160, 20, 20)
    draw_star(turtle, -130, -5, 15)
    draw_star(turtle, -110, 10, 20)
    draw_star(turtle, -90, 0, 25)
    draw_star(turtle, -60, 18, 15)
    draw_star(turtle, -45, -5, 20)
    draw_star(turtle, -30, 8, 15)

    turtle.penup()

def draw_orion(turtle):
    # 绘制猎户座
    turtle.goto(200, -100)
    turtle.pendown()
    turtle.write("Orion", font=("Arial", 12, "normal"))

    draw_star(turtle, 200, -20, 30)
    draw_star(turtle, 235, -30, 20)
    draw_star(turtle, 220, -60, 20)
    draw_star(turtle, 198, -80, 20)
    draw_star(turtle, 175, -60, 20)
    draw_star(turtle, 162, -30, 20)
    draw_star(turtle, 195, -50, 18)
    draw_star(turtle, 180, -70, 18)

    turtle.penup()

while True:
    ran_size = random.randint(0, 20)
    ran_col = random.randint(0, 255)
    time.sleep(0.05)

    # 产生随机坐标 
    x = random.randint(-turtle.window_width()//2, turtle.window_width()//2)
    y = random.randint(-turtle.window_height()//2, turtle.window_height()//2)

    # 将RGB颜色转换成海龟颜色 
    r, g, b = colorsys.hsv_to_rgb(ran_col/255.0, 1.0, 1.0)
    t.pencolor(r, g, b)

    draw_ursa_major(t)
    draw_orion(t)

    draw_star(t, x, y, ran_size)

在这个示例中,还添加了一个函数来绘制北斗七星,以及猎户座。

这些示例仅仅是一个开始。使用Python的Turtle,可以尝试添加更多功能,比如不同颜色和尺寸的星星,海龟运动,与宇宙相关的文本,等等。

相关文章