当前位置: 首页 > news >正文

Python炫酷星空

3D星空

系列文章

序号直达链接
Tkinter
1Python李峋同款可写字版跳动的爱心
2Python跳动的双爱心
3Python蓝色跳动的爱心
4Python动漫烟花
5Python粒子烟花
Turtle
1Python满屏飘字
2Python蓝色流星雨
3Python金色流星雨
4Python漂浮爱心
5Python爱心光波①
6Python爱心光波②
7Python满天繁星
8Python五彩气球
9Python白色飘雪
10Python七彩花朵
11Python 3D星空
12Python大雪纷飞
13Python一闪一闪亮星星
14Python爱心泡泡
15Python爱心射线
16Python圣诞礼物
17Python礼物圣诞树
18Python浪漫星空
19Python飞舞蝙蝠
20Python万圣礼物
21Python蓝色飘雪
Pygame
1Python跨年烟花
2Python炫酷烟花
3Python黑客帝国字母雨
敬请期待……

写在前面

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模块增加了随机性和趣味性,整体结构清晰,易于理解。

写在后面

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

http://www.lryc.cn/news/573803.html

相关文章:

  • 前端的跨域问题
  • Java Stream流
  • 量化-因子处理
  • 飞轮储能辅助双馈风机参与电力系统一次调频的仿真模型研究
  • 半导体二极管
  • work遇到的状态码
  • 跨平台开发flutter初体验
  • 华为云Flexus+DeepSeek征文|华为云 Dify 高可用部署教程:CCE 容器集群一键构建企业级智能应用
  • 登录拦截功能实现 -瑞吉外卖笔记
  • Windows 后渗透中可能会遇到的加密字符串分析
  • 等等等等等等
  • PostgreSQL全栈部署指南:从零构建企业级高可用数据库集群
  • pyqt f-string
  • jenkins对接、jenkins-rest
  • LocalAI: OpenAI、Claude 等的开源替代
  • 3、NLP黄金九步法(问题定义-数据获取-数据探索)
  • Flink Connector Kafka深度剖析与进阶实践指南
  • js 函数参数赋值问题
  • 【Android】am命令
  • ROS 2 中 Astra Pro 相机与 YOLOv5 检测功能编译启动全记录
  • Oracle 数据库查询:单表查询
  • 华为云Flexus+DeepSeek征文|开启DeepSeek-V3+R1商用服务之旅
  • 查询消耗 IO 多的 SQL -达梦
  • C++法则1:在 C++ 中,所有的具名变量都是左值,即使它们的类型是右值引用。
  • 云原生/容器相关概念记录
  • 第八章 网络安全
  • 基于Vue.js的图书管理系统前端界面设计
  • 包教包会,ES6类class的基本入门
  • TS类型啊啊啊2
  • 计算机系统结构课堂测验