上一篇
Python实现旋转地球动画 - 完整代码教程 | Python编程技巧
- Python
- 2025-08-08
- 60
Python实现旋转地球动画教程
本文将教你使用Python的Pygame和Matplotlib库创建令人惊叹的3D旋转地球动画。包含完整代码实现和详细解释。
实现旋转地球的基本原理
创建3D旋转地球动画主要涉及以下技术:
- 3D投影 - 将3D球体坐标投影到2D平面
- 纹理映射 - 将地球贴图应用到球体表面
- 旋转动画 - 通过改变旋转角度实现动画效果
- 双缓冲技术 - 实现平滑的动画渲染
方法1:使用Pygame实现旋转地球
步骤1:安装所需库
pip install pygame numpy
步骤2:完整代码实现
import pygame import numpy as np import math import sys # 初始化pygame pygame.init() # 设置窗口尺寸 WIDTH, HEIGHT = 800, 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("旋转地球 - Pygame实现") # 地球参数 RADIUS = 150 ROTATION_SPEED = 0.005 # 创建地球表面点 def create_sphere_points(radius, num_points=100): points = [] for i in range(num_points): for j in range(num_points): theta = i * 2 * math.pi / num_points phi = j * math.pi / num_points x = radius * math.sin(phi) * math.cos(theta) y = radius * math.sin(phi) * math.sin(theta) z = radius * math.cos(phi) points.append((x, y, z)) return np.array(points) # 创建地球点 sphere_points = create_sphere_points(RADIUS, 100) # 旋转矩阵 def rotation_matrix_x(angle): return np.array([ [1, 0, 0], [0, math.cos(angle), -math.sin(angle)], [0, math.sin(angle), math.cos(angle)] ]) def rotation_matrix_y(angle): return np.array([ [math.cos(angle), 0, math.sin(angle)], [0, 1, 0], [-math.sin(angle), 0, math.cos(angle)] ]) # 主循环 angle = 0 clock = pygame.time.Clock() running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 清屏 screen.fill((0, 0, 30)) # 更新旋转角度 angle += ROTATION_SPEED # 应用旋转矩阵 rot_y = rotation_matrix_y(angle) rot_x = rotation_matrix_x(angle * 0.5) rotation_matrix = np.dot(rot_y, rot_x) # 投影点并绘制 for point in sphere_points: rotated_point = np.dot(rotation_matrix, point) # 3D到2D投影 z = 1 / (2 - rotated_point[2] / RADIUS) # 透视投影因子 x_proj = rotated_point[0] * z + WIDTH // 2 y_proj = rotated_point[1] * z + HEIGHT // 2 # 根据深度设置颜色 depth = max(0, min(255, int(rotated_point[2] + RADIUS))) color = (0, 100 + depth // 2, 200 - depth // 3) # 绘制点 if 0 <= x_proj < WIDTH and 0 <= y_proj < HEIGHT: pygame.draw.circle(screen, color, (int(x_proj), int(y_proj)), 1) # 添加说明文字 font = pygame.font.SysFont(None, 24) text = font.render("Pygame实现旋转地球 - 按ESC退出", True, (200, 200, 255)) screen.blit(text, (20, 20)) # 更新屏幕 pygame.display.flip() clock.tick(60) pygame.quit() sys.exit()
方法2:使用Matplotlib实现旋转地球
步骤1:安装所需库
pip install matplotlib numpy
步骤2:完整代码实现
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from mpl_toolkits.mplot3d import Axes3D # 创建图形和3D坐标轴 fig = plt.figure(figsize=(10, 8), facecolor='#0f1b2d') ax = fig.add_subplot(111, projection='3d') # 设置背景颜色和网格 ax.set_facecolor('#0f1b2d') ax.grid(False) ax.set_axis_off() # 生成球体点 u = np.linspace(0, 2 * np.pi, 100) v = np.linspace(0, np.pi, 50) x = 10 * np.outer(np.cos(u), np.sin(v)) y = 10 * np.outer(np.sin(u), np.sin(v)) z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) # 创建地球表面 earth = ax.plot_surface(x, y, z, rstride=2, cstride=2, color='#3498db', edgecolor='#1e5f8a', alpha=0.8) # 添加大陆轮廓 def add_continents(ax): # 简化的大陆轮廓坐标 continents = [ # 亚洲 np.array([[-3, -2, 7], [-1, -4, 8], [2, -2, 8], [5, 0, 7], [3, 5, 6], [-1, 6, 5], [-3, 2, 6], [-3, -2, 7]]), # 北美洲 np.array([[-8, 2, 4], [-5, 5, 5], [-2, 6, 4], [0, 5, 3], [-1, 2, 4], [-3, 0, 5], [-6, 1, 4], [-8, 2, 4]]), # 南美洲 np.array([[-5, -3, 6], [-3, -6, 5], [-1, -8, 3], [0, -6, 4], [-2, -4, 6], [-5, -3, 6]]), # 非洲 np.array([[1, -4, 8], [3, -1, 8], [5, 2, 7], [5, 5, 5], [3, 5, 6], [1, 2, 7], [0, -1, 8], [1, -4, 8]]), # 欧洲 np.array([[-1, 6, 5], [0, 8, 3], [2, 8, 3], [3, 6, 5], [1, 5, 6], [-1, 6, 5]]), # 澳大利亚 np.array([[7, -5, 4], [8, -3, 4], [9, -1, 2], [8, -3, 3], [7, -5, 4]]) ] for continent in continents: ax.plot(continent[:,0], continent[:,1], continent[:,2], color='#2ecc71', linewidth=1.5) add_continents(ax) # 设置坐标轴范围 ax.set_xlim([-12, 12]) ax.set_ylim([-12, 12]) ax.set_zlim([-12, 12]) # 旋转动画函数 def update(frame): ax.view_init(elev=30, azim=frame) return fig, # 创建动画 ani = FuncAnimation(fig, update, frames=np.arange(0, 360, 1), interval=50, blit=False) plt.tight_layout() plt.show()
旋转地球效果展示
Pygame实现
使用Pygame实现的3D地球旋转动画,具有实时渲染和交互性
Matplotlib实现
使用Matplotlib实现的3D地球旋转动画,适合科学可视化和数据分析
技术总结
本文介绍了两种使用Python实现旋转地球动画的方法:
- Pygame方法:适合创建交互式应用和游戏,性能较好,但3D功能有限
- Matplotlib方法:适合科学可视化和数据分析,3D功能强大,但性能不如Pygame
你可以根据具体需求选择合适的方法。要提升效果,可以考虑:
- 使用真实的地球纹理贴图代替简单着色
- 添加云层和光照效果
- 实现更精确的大陆轮廓
- 添加星空背景和月球等天体
本文由XiPinYan于2025-08-08发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20257635.html
发表评论