星系的旋转运动是一种迷人的自然现象。在这篇博客中,我们将使用Python创建一个动态旋转的星系动画。通过利用Pygame库,我们可以模拟星系中的恒星围绕中心旋转的视觉效果。
在开始之前,你需要确保你的系统已经安装了Pygame库。如果你还没有安装它,可以使用以下命令进行安装:
pip install pygame
Pygame是一个跨平台的Python模块,用于编写视频游戏。它包括计算机图形和声音库,使得动画制作变得更加简单。
我们首先需要导入Pygame库和其他必要的模块:
import pygame
import math
import random
我们需要初始化Pygame并设置屏幕的基本参数:
pygame.init()
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption("旋转星系动画")
clock = pygame.time.Clock()
我们创建一个Star
类来定义恒星的属性和行为:
class Star:
def __init__(self, x, y, radius, angle, speed):
self.x = x
self.y = y
self.radius = radius
self.angle = angle
self.speed = speed
def update(self):
self.angle += self.speed
self.x = int(400 + self.radius * math.cos(self.angle))
self.y = int(400 + self.radius * math.sin(self.angle))
def draw(self, screen):
pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 2)
我们定义一个函数来创建多个恒星,并存储在一个列表中:
def create_galaxy(num_stars):
stars = []
for _ in range(num_stars):
radius = random.uniform(50, 350)
angle = random.uniform(0, 2 * math.pi)
speed = random.uniform(0.001, 0.01)
star = Star(400, 400, radius, angle, speed)
stars.append(star)
return stars
stars = create_galaxy(200)
我们在主循环中更新和绘制恒星:
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
for star in stars:
star.update()
star.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
import pygame
import math
import random
# 初始化Pygame
pygame.init()
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption("旋转星系动画")
clock = pygame.time.Clock()
# 恒星类定义
class Star:
def __init__(self, x, y, radius, angle, speed):
self.x = x
self.y = y
self.radius = radius
self.angle = angle
self.speed = speed
def update(self):
self.angle += self.speed
self.x = int(400 + self.radius * math.cos(self.angle))
self.y = int(400 + self.radius * math.sin(self.angle))
def draw(self, screen):
pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 2)
# 创建星系
def create_galaxy(num_stars):
stars = []
for _ in range(num_stars):
radius = random.uniform(50, 350)
angle = random.uniform(0, 2 * math.pi)
speed = random.uniform(0.001, 0.01)
star = Star(400, 400, radius, angle, speed)
stars.append(star)
return stars
stars = create_galaxy(200)
# 主循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
for star in stars:
star.update()
star.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()