Python星空

3D星空

系列文章

写在前面

Python模拟3D星空动画的完整代码。

技术需求

  1. Python turtle

    • turtle库用于在屏幕上绘制图形和实现动画。通过Turtle对象,可以控制形状、位置、颜色等属性,并进行动态更新。
    • 主要功能包括创建图形、设置画笔和填充颜色、控制速度与位置,以及隐藏和显示图形。
  2. Python random

    • random库用于生成随机数,增加动画的多样性和不可预测性。例如,在代码中用于随机生成星星的位置、大小和移动速度。
    • 使用random.uniform(0, 1)生成0到1之间的浮点数以控制星星大小;使用random.randint()生成随机整数确定星星的初始位置和速度。
  3. Turtle 对象的克隆

    • 利用turtle.clone()方法克隆turtle对象,使每颗星星拥有独立的位置、速度和大小属性。每个星星都是turtle对象的副本,能够独立移动和变化。
  4. 循环控制

    • 使用while True:无限循环和for循环不断更新星星位置,确保动画持续运行。
    • 不断更新星星位置以创建动态效果,当星星移出屏幕时,通过隐藏、重置位置并重新显示实现“循环出现”效果。
  5. 事件驱动模型

    • turtle.mainloop()启动事件循环,保持图形窗口持续显示和交互。这是turtle库及其他图形库常用的机制,确保程序持续运行直至用户关闭窗口。

完整代码

import turtle as tu
import random as ra
width, height = 800, 600
tu.setup(width, height)
tu.title("3D星空")
tu.bgcolor("black")
tu.delay(0)
t=tu.Turtle(visible=False,shape='circle')
t.pencolor("white")
t.fillcolor("white")
t.penup()
stars = []
……

代码分析

这段代码利用Python的turtle库实现了一个简单的3D星空动画效果,模拟了星星在黑暗背景上移动的场景。星星随机生成并持续向左移动,当移出屏幕时会在右侧重新出现,形成连续动态效果。代码主要分为窗口设置、星星生成、星星移动和循环刷新等部分。以下是对每个部分的详细分析:

1. 导入库

import turtle as tu
import random as ra

此行导入了turtlerandom模块,分别用于图形绘制和随机数生成。turtle库是Python内置的图形库,适用于绘制各种图形和动画;random库则用于生成随机数,本代码中用于随机生成星星的位置、大小和移动速度。

2. 设置窗口尺寸和背景

width, height = 800, 600
tu.setup(width, height)
tu.title("3D星空")
tu.bgcolor("black")
tu.delay(0)
  • width, height = 800, 600:定义绘图窗口尺寸为800x600像素。
  • tu.setup(width, height):设置窗口尺寸。
  • tu.title("3D星空"):设置窗口标题。
  • tu.bgcolor("black"):设置背景色为黑色,营造星空氛围。
  • tu.delay(0):关闭动画延迟,确保流畅绘制。

3. 创建turtle对象

t = tu.Turtle(visible=False, shape='circle')
t.pencolor("white")
t.fillcolor("white")
t.penup()

创建一个turtle对象t用于绘制星星:

  • tu.Turtle(visible=False, shape='circle'):创建不可见的圆形turtle对象。
  • t.pencolor("white")t.fillcolor("white"):设置画笔和填充颜色为白色。
  • t.penup():提升画笔,避免移动时留下痕迹。

4. 创建星星

这部分生成99颗星星,每颗通过克隆t对象创建:

  • stars = []:初始化空列表存储星星对象。
  • for i in range(99)::循环生成99颗星星。
  • star = t.clone():克隆t对象生成新星星。
  • s = ra.uniform(0, 1) / 3:生成随机大小比例。
  • star.shapesize(s, s):设置星星大小。
  • star.speed(ra.randint(2, 5)):设置随机移动速度。
  • star.setx(ra.randint(width//2, width))star.sety(ra.randint(-height//2, height//2)):设置初始位置。
  • star.showturtle():显示星星。
  • stars.append(star):将星星添加到列表中。

5. 星星的运动与循环

实现星星不断移动及重置功能:

  • while True::无限循环保证持续运动。
  • for star in stars::遍历所有星星。
  • star.setx(star.xcor() - star.speed()):使星星向左移动。
  • if star.xcor() < -width//2::判断星星是否移出屏幕左侧。
  • star.hideturtle():隐藏离开屏幕的星星。
  • star.setx(ra.randint(width//2, width))star.sety(ra.randint(-height//2, height//2)):重置星星位置。
  • star.showturtle():重新显示星星。

6. 主循环

tu.mainloop()

启动turtle主事件循环,保持窗口持续显示。

7. 总结

该代码通过turtle库实现了简单而有趣的星空动画,每颗星星具有随机的大小、速度和初始位置,形成动态效果。使用turtle的克隆功能和random模块增加了随机性和趣味性,整体结构清晰,易于理解。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

### Python 星空主题的免费资源或项目 对于希望探索星空主题项目的开发者而言,存在多个基于 Python 的开源工具和库可以利用。这些工具不仅能够帮助创建美丽的视觉效果,还可以用于教育目的或是个人兴趣开发。 #### 使用 Pygame 创建简单的星空模拟器 Pygame 是一个非常适合初学者的游戏开发库,同时也可用于制作各种图形动画,包括星空模拟。下面是一个简单示例程序来展示如何用 Pygame 实现基本的星空效果: ```python import pygame import random pygame.init() screen = pygame.display.set_mode((800, 600)) stars = [] for _ in range(200): stars.append([random.randint(0, 800), random.randint(0, 600)]) while True: screen.fill((0, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() for star in stars: star[1] += 1 if star[1] > 600: star[1] = 0 color = (255, 255, 255) size = 2 pygame.draw.circle(screen, color, star, size) pygame.display.flip() pygame.time.delay(30) ``` 此代码片段展示了如何通过 Pygame 库生成移动星星的效果[^1]。 #### 利用 Astropy 和 Matplotlib 进行天文数据可视化 Astropy 提供了一系列处理天文学数据的功能模块;而 Matplotlib 可用来绘制图表。两者结合可以帮助用户更好地理解和呈现真实的宇宙现象。 例如,可以从在线数据库下载恒星位置的数据集,并借助这两个包将其转化为直观的地图形式显示出来。 #### 探索 GitHub 上的相关项目 GitHub 平台上有许多由社区成员贡献的关于星空模拟和其他天文应用的 Python 项目。搜索关键词 "star sky simulation python" 或者浏览特定标签下的仓库往往能找到不少有趣的作品作为灵感来源或者学习对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Want595

感谢小伙伴的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值