Pygame中实现图像旋转效果-应用2-1

可以通过Pygame的图像旋转效果,实现模拟太阳系星球运行的效果,如图1所示。

图1 太阳系星球运行效果图

1 定义天体类CelestrialBody的代码

通过天体类CelestrialBody来实现太阳系中星球的移动和显示。

1.1 init()方法

从图1中可以看出,无论是恒星(太阳),行星(地球和土星)还是卫星(月球、土卫1和土卫2)包含的属性有名字、大小、图片、自转速度、公转速度等。在__init__()方法中定义这些属性,代码如图2所示。

图2 init()方法的代码

其中,init()方法的参数name表示天体的名字;image表示天体对应的图片;radius是天体的半径;distance是天体到其父天体的距离;parent是天体的父天体;rotation_speed是天体的自转速度;revolution_speed是天体的公转速度;ring表示天体是否有"环";ring_radius表示"环"的大小。在第27-36行定义CelestrialBody的相应属性来保存这些参数值。第30行代码根据指定的天体大小self.radius,通过pygame.transform.smoothscale()方法对天体的图片self.image进行放缩处理。第37-38行定义的属性rotation_angle和revolution_angle表示天体自转的角度和公转的角度,初始值为0。第39-40行代码定义的属性x和y分别表示天体的中心位置,默认情况下天体的位置位于窗口中间,SCREEN_WIDTH和SCREEN_HEIGHT是窗口宽度和高度,在定义CelestrialBody类之前对这两个变量赋值。第41行调用了类的update_postion()方法更新天体位置。

相关链接1 python类的相关知识,请参考《Python中类的使用1》。

1.2 update_position()方法

对于恒星(太阳),行星(地球和土星)还是卫星(月球、土卫1和土卫2)这三种不同类型的天体,其确定位置的方法是不同的。恒星位置固定,而行星的位置是随着其公转角度的变化而变化的,卫星的位置不但与公转角度有关,而且还与其父天体(行星)的位置有关,如图3所示。

图3 确定行星和卫星位置的示意图

update_position()方法的代码如图4所示。

图4 update_position()方法的代码

其中,第43行的if语句通过self.parent判断该天体是否具有父天体,如果有父天体,则说明该天体是行星或者卫星,其位置需要实时更新,如果没有父天体,则说明该天体是恒星,其位置是__init__()方法中指定的窗口中心。如果天体有父天体,第44行代码首先计算其公转角度self.revolution_angle;之后第45-46行代码更新了该天体的位置,是其父天体的横纵坐标的基础上加上公转半径self.distance与公转角度self.revolution_angle正余弦的乘积,原理如图3所示。第47行代码更新天体的自转角度;第48行代码根据天体的自传角度旋转天体图像self.image,并将旋转之后的图像保存在属性self.image_rotate中。

注意1 在图1的效果图中可以看出,恒星(太阳)也有自转效果。

相关链接2 计算天体位置的数学方法,请参考《Pygame中实现图像旋转效果-高级2-1》

1.3 draw()方法

draw()方法的作用是显示天体,代码如图5所示。

图5 draw()方法代码

其中,draw()方法的screen参数表示绘制天体的窗口;第50-51行的if语句判断天体是否具有父天体,如果有,则通过pygame.draw.circle()绘制该天体公转的轨道。第52-57行代码中的if语句判断天体是否具有"环",如果有,则通过pygame.draw.ellipse()绘制该天体的环。第58-59行代码绘制天体图像。第60-62行代码显示天体名称。

相关链接3 pygame绘制圆形、椭圆,显示图像以及显示文字的相关知识,请参考《Pygame中画圆》《Pygame显示文字》

相关推荐
VidDown7 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频9 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林9 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li11 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook11 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺11 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
启观川12 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦12 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python
小羊没烦恼!12 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net
钱栈up13 小时前
扫完 3.5 万文件后,我发现了 521 组散落的同名文件
爬虫·python·数据分析