您好,登錄后才能下訂單哦!
前言
提到太陽系,大家可能會想到哥白尼和他的日心說,或是捍衛、發展日心說的斗士布魯諾,他們像一縷光一樣照亮了那個時代的夜空,對歷史感興趣的小伙伴可以深入了解一下,這里就不多說了。
太陽以巨大的引力使周邊行星、衛星等繞其運轉,構成了太陽系,它主要包括太陽、8 個行星、205 個衛星以及幾十萬個小行星等,本文我們使用 Python 來簡單的動態模擬一下太陽系的運轉。
實現
功能的實現,主要要到的還是 Python 的 pygame 庫,我們先導入需要的所有 Python 庫,代碼如下所示:
import sys import math import pygame from pygame.locals import *
接著定義一些常量(如:顏色、寬高等)及創建窗口,代碼如下所示:
WHITE =(255, 255, 255) SILVER = (192, 192, 192) BLACK = (0, 0, 0) GREEN = (0, 255, 0) RED = (255, 0, 0) BLUE = (0, 0, 255) YELLOW = (255, 255, 0) SandyBrown = (244, 164, 96) PaleGodenrod = (238, 232, 170) PaleVioletRed = (219, 112, 147) Thistle = (216, 191, 216) size = width, height = 800, 600 screen = pygame.display.set_mode(size) pygame.display.set_caption("太陽系") # 創建時鐘(控制游戲循環頻率) clock = pygame.time.Clock() # 定義三個空列表 pos_v = pos_e = pos_mm = [] # 地球、月球等行星轉過的角度 roll_v = roll_e = roll_m = 0 roll_3 = roll_4 = roll_5 = roll_6 = roll_7 = roll_8 = 0 # 太陽的位置(中心) position = size[0] // 2, size[1] // 2
我們先在窗口中畫一個太陽,代碼如下:
pygame.draw.circle(screen, YELLOW, position, 60, 0)
看一下效果:
接著畫一個地球,讓其繞著太陽旋轉,代碼如下:
# 畫地球 roll_e += 0.01 # 假設地球每幀公轉 0.01 pi pos_e_x = int(size[0] // 2 + size[1] // 6 * math.sin(roll_e)) pos_e_y = int(size[1] // 2 + size[1] // 6 * math.cos(roll_e)) pygame.draw.circle(screen, BLUE, (pos_e_x, pos_e_y), 15, 0) # 地球的軌跡線 pos_e.append((pos_e_x, pos_e_y)) if len(pos_e) > 255: pos_e.pop(0) for i in range(len(pos_e)): pygame.draw.circle(screen, SILVER, pos_e[i], 1, 0)
看一下效果:
我們再接著畫月球,代碼如下:
# 畫月球 roll_m += 0.1 pos_m_x = int(pos_e_x + size[1] // 20 * math.sin(roll_m)) pos_m_y = int(pos_e_y + size[1] // 20 * math.cos(roll_m)) pygame.draw.circle(screen, SILVER, (pos_m_x, pos_m_y), 8, 0) # 月球的軌跡線 pos_mm.append((pos_m_x, pos_m_y)) if len(pos_mm) > 255: pos_mm.pop(0) for i in range(len(pos_mm)): pygame.draw.circle(screen, SILVER, pos_mm[i], 1, 0)
看一下效果:
其他幾個星球的實現也類似,代碼如下:
# 其他幾個行星 roll_3 += 0.03 pos_3_x = int(size[0] // 2 + size[1] // 3.5 * math.sin(roll_3)) pos_3_y = int(size[1] // 2 + size[1] // 3.5 * math.cos(roll_3)) pygame.draw.circle(screen, GREEN, (pos_3_x, pos_3_y), 20, 0) roll_4 += 0.04 pos_4_x = int(size[0] // 2 + size[1] // 4 * math.sin(roll_4)) pos_4_y = int(size[1] // 2 + size[1] // 4 * math.cos(roll_4)) pygame.draw.circle(screen, SandyBrown, (pos_4_x, pos_4_y), 20, 0) roll_5 += 0.05 pos_5_x = int(size[0] // 2 + size[1] // 5 * math.sin(roll_5)) pos_5_y = int(size[1] // 2 + size[1] // 5 * math.cos(roll_5)) pygame.draw.circle(screen, PaleGodenrod, (pos_5_x, pos_5_y), 20, 0) roll_6 += 0.06 pos_6_x = int(size[0] // 2 + size[1] // 2.5 * math.sin(roll_6)) pos_6_y = int(size[1] // 2 + size[1] // 2.5 * math.cos(roll_6)) pygame.draw.circle(screen, PaleVioletRed, (pos_6_x, pos_6_y), 20, 0) roll_7 += 0.07 pos_7_x = int(size[0] // 2 + size[1] // 4.5 * math.sin(roll_7)) pos_7_y = int(size[1] // 2 + size[1] // 4.5 * math.cos(roll_7)) pygame.draw.circle(screen, Thistle, (pos_7_x, pos_7_y), 20, 0) roll_8 += 0.08 pos_8_x = int(size[0] // 2 + size[1] // 5.5 * math.sin(roll_8)) pos_8_y = int(size[1] // 2 + size[1] // 5.5 * math.cos(roll_8)) pygame.draw.circle(screen, WHITE, (pos_8_x, pos_8_y), 20, 0)
最后,我們來看一下整體實現的動態效果:
是不是有內味了。
總結
本文我們使用 Python 簡單模擬了太陽系的運轉,有興趣的小伙伴可以自己運行一下代碼或對功能做進一步擴展。
到此這篇關于如何利用Python動態模擬太陽系運轉的文章就介紹到這了,更多相關Python動態模擬太陽系運轉內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。