Python八大行星漂亮动画演示

"""一个简单的演示八大行星公转的动画,采用arcade街机游戏模块制作,安装Arcade请用pip install arcade --user。
A simple animation to simulate the rotation of eight planets is made by using Arcade module. To install Arcade, use PIP install arcade--user.
"""

__author__ = "lixingqiu"
__date__ = "2019/3/8"

import time
import math
import arcade
import random

SCREEN_WIDTH = 1350
SCREEN_HEIGHT = 780
SCREEN_TITLE = "eight planet 八大行星"

class Planet(arcade.Sprite):
    def __init__(self,image,a,b,angle,speed):
        """image:造型图片,a:Long axis长半轴,b:semi-minor axis短半轴,angle:初始角度"""
        super().__init__(image)
        self.center_x = SCREEN_WIDTH / 2
        self.center_y = SCREEN_HEIGHT / 2        
        self.direction = angle                  # 自定义direction,不用原有属性angle   
        self.a = a
        self.b = b
        self.speed = speed        
        
    def update(self):
        """ Calculating Initial Coordinates Based on Elliptic Parametric Equation"""

        self.direction = self.direction + 365 / self.speed 
        self.direction = self.direction % 360        
        x = SCREEN_WIDTH / 2 + self.a * math.cos(math.radians(self.direction)) # 根据椭圆参数方程算起始坐标
        y = SCREEN_HEIGHT / 2 + self.b * math.sin(math.radians(self.direction))
        self.center_x = x
        self.center_y = y
        super().update()        
    
class MyGame(arcade.Window):
    """
    继承自窗口的MyGame类.
    """

    def __init__(self, width, height, title):
        super().__init__(width, height, title)
        arcade.set_background_color(arcade.color.WHITE)
                       
        
    def setup(self):
        """ 这里是对游戏中的各个对象进行设置 """
      
        self.planet_list = arcade.SpriteList()                # 新建角色列表,以便统一渲染          

        # 背景角色生成
        pass

        # 太阳角色生成
        pass        

        # 行星角色生成
        pass
        
        for i in range(8):                                     # 生成8个行星
            angle = self.angle_list[i]
            a,b = self.ab_list[i]
            image = self.planets_image[i]
            speed = self.days[i]
            aplanet = Planet(image,a,b,angle,speed)          # 新建行星
            self.planet_list.append(aplanet)                 # 添加到所有行星列表              
         
    def update(self, x):
        """每帧更新游戏内在逻辑"""        
 
        self.planet_list.update()       
        self.sun.update_animation()     
 
    
    def on_draw(self):
        """渲染屏幕 """

        arcade.start_render()  

        # 开始画背景
        self.background.draw()
        self.sun.draw()
        self.planet_list.draw()        
 

def main():
    """ Main method """
    window = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
    window.setup()
    arcade.run()


if __name__ == "__main__":
    main()

 

Python八大行星漂亮动画演示

  • 11
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
当涉及到行星运动的代码时,通常会使用天体力学的知识和算法来模拟行星的轨道运动。下面是一个简单的示例代码,用Python实现了大行星(水金地火木土天王)的运动模拟: ```python import math class Planet: def __init__(self, name, distance, speed): self.name = name self.distance = distance self.speed = speed self.angle = 0 def update(self, time): self.angle += self.speed * time def get_position(self): x = math.cos(math.radians(self.angle)) * self.distance y = math.sin(math.radians(self.angle)) * self.distance return (x, y) # 创建大行星对象 mercury = Planet("Mercury", 50, 1) venus = Planet("Venus", 70, 0.8) earth = Planet("Earth", 100, 0.6) mars = Planet("Mars", 130, 0.5) jupiter = Planet("Jupiter", 180, 0.3) saturn = Planet("Saturn", 220, 0.25) uranus = Planet("Uranus", 260, 0.2) neptune = Planet("Neptune", 300, 0.15) # 模拟行星运动 time = 0 while True: # 更新每个行星的位置 mercury.update(time) venus.update(time) earth.update(time) mars.update(time) jupiter.update(time) saturn.update(time) uranus.update(time) neptune.update(time) # 获取每个行星的位置并打印 print(mercury.name, mercury.get_position()) print(venus.name, venus.get_position()) print(earth.name, earth.get_position()) print(mars.name, mars.get_position()) print(jupiter.name, jupiter.get_position()) print(saturn.name, saturn.get_position()) print(uranus.name, uranus.get_position()) print(neptune.name, neptune.get_position()) # 增加时间 time += 1 ``` 这段代码使用了一个`Planet`类来表示每个行星,其中包含了行星的名称、距离太阳的距离和行星的速度。通过不断更新每个行星的角度,可以计算出它们在二维平面上的位置。在示例代码中,我们简单地使用了一个无限循环来模拟行星的运动,并打印出每个行星的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李兴球

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值