日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python模拟太阳系_用 Python 动态模拟太阳系运转

發布時間:2023/12/19 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python模拟太阳系_用 Python 动态模拟太阳系运转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提到太陽系,大家可能會想到哥白尼和他的日心說,或是捍衛、發展日心說的斗士布魯諾,他們像一縷光一樣照亮了那個時代的夜空,對歷史感興趣的小伙伴可以深入了解一下,這里就不多說了。

太陽以巨大的引力使周邊行星、衛星等繞其運轉,構成了太陽系,它主要包括太陽、8 個行星、205 個衛星以及幾十萬個小行星等,本文我們使用 Python 來簡單的動態模擬一下太陽系的運轉。

實現

功能的實現,主要要到的還是 Python 的 pygame 庫,我們先導入需要的所有 Python 庫,代碼如下所示:

import sys

import math

import pygame

from pygame.locals import *1

2

3

4

接著定義一些常量(如:顏色、寬高等)及創建窗口,代碼如下所示:

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] // 21

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

我們先在窗口中畫一個太陽,代碼如下:

pygame.draw.circle(screen, YELLOW, position, 60, 0)1

看一下效果:

接著畫一個地球,讓其繞著太陽旋轉,代碼如下:

# 畫地球

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)1

2

3

4

5

6

7

8

9

10

11

看一下效果:

我們再接著畫月球,代碼如下:

# 畫月球

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)1

2

3

4

5

6

7

8

9

10

11

看一下效果:

其他幾個星球的實現也類似,代碼如下:

# 其他幾個行星

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)1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

最后,我們來看一下整體實現的動態效果:

是不是有內味了。

總結

本文我們使用 Python 簡單模擬了太陽系的運轉,有興趣的小伙伴可以自己運行一下代碼或對功能做進一步擴展。

源碼在公眾號 Python小二 后臺回復 200812 獲取。

本文非首發于個人號

文章來源: blog.csdn.net,作者:Python小二,版權歸原作者所有,如需轉載,請聯系作者。

原文鏈接:blog.csdn.net/ityard/article/details/113793230

總結

以上是生活随笔為你收集整理的python模拟太阳系_用 Python 动态模拟太阳系运转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。