鱼C论坛

 找回密码
 立即注册
查看: 2055|回复: 1

[作品展示] pygame编写的万有引力效果演示

[复制链接]
发表于 2021-11-1 21:14:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
pygame编写的万有引力效果演示

GMm_mian.py
  1. import pygame
  2. from GMm_ import *
  3. pygame.init()

  4. m1 = [1, 700, 300, 0, 0]
  5. m2 = [1e14, 500, 300, 0, 0]
  6. m3 = [1, 300, 300, 0, 0]
  7. m1[4] = speed_v(m2[0], m1[1]-m2[1], m1[2]-m2[2])
  8. m3[4] = -speed_v(m2[0], m3[1]-m2[1], m3[2]-m2[2])

  9. window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
  10. pygame.display.set_caption("star")

  11. zhong = star(m1)
  12. zhong1 = star(m2)
  13. diqiou = star(m3)
  14. stars_ = stars()
  15. stars_.add(zhong)
  16. stars_.add(zhong1)
  17. stars_.add(diqiou)

  18. window.fill((255, 255, 255))
  19. FPS = 60
  20. clock = pygame.time.Clock()
  21. CREATE_ENEMY_EVENT = pygame.USEREVENT
  22. pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)


  23. while True:

  24.     clock.tick(FPS)

  25.     pygame.draw.circle(window, (211, 211, 211), (zhong.x, zhong.y), 10)
  26.     pygame.draw.circle(window, (0, 0, 0), (zhong.x, zhong.y), 5)
  27.     pygame.draw.circle(window, (211, 211, 211), (zhong1.x, zhong1.y), 10)
  28.     pygame.draw.circle(window, (0, 0, 0), (zhong1.x, zhong1.y), 5)
  29.     pygame.draw.circle(window, (211, 211, 211), (diqiou.x, diqiou.y), 10)
  30.     pygame.draw.circle(window, (0, 0, 0), (diqiou.x, diqiou.y), 5)

  31.     pygame.display.update()

  32.     pygame.draw.circle(window, (211, 211, 211), (zhong.x, zhong.y), 5)
  33.     pygame.draw.circle(window, (211, 211, 211), (zhong1.x, zhong1.y), 5)
  34.     pygame.draw.circle(window, (211, 211, 211), (diqiou.x, diqiou.y), 5)

  35.     stars_.gravitation(zhong)
  36.     stars_.gravitation(zhong1)
  37.     stars_.gravitation(diqiou)

  38.     for event in pygame.event.get():

  39.         if event.type == pygame.QUIT:
  40.             exit()

  41.         elif event.type == CREATE_ENEMY_EVENT:
  42.             print(zhong.speed_x, zhong.speed_y, zhong1.speed_x, zhong1.speed_y, diqiou.speed_x, diqiou.speed_y)
复制代码

GMm_.py
  1. G = 6.67e-11
  2. WIN_WIDTH = 1000
  3. WIN_HEIGHT = 600


  4. def speed_v(M, x, y):
  5.     return (G * M / ((x ** 2 + y ** 2) ** 0.5)) ** 0.5


  6. class star:
  7.     def __init__(self, li):
  8.         self.m = li[0]
  9.         self.x = li[1]
  10.         self.y = li[2]
  11.         self.speed_x = li[3]
  12.         self.speed_y = li[4]

  13.     def motion(self):
  14.         self.x += self.speed_x
  15.         self.y += self.speed_y

  16.     def acceleration(self, q_x, q_y):
  17.         self.speed_x += q_x
  18.         self.speed_y += q_y


  19. class stars:
  20.     def __init__(self):
  21.         self.li = []

  22.     def add(self, star_):
  23.         self.li.append(star_)

  24.     def gravitation(self, star_):
  25.         a = 0
  26.         b = 0
  27.         for i in self.li:
  28.             if i == star_:
  29.                 continue
  30.             else:
  31.                 x = i.x - star_.x
  32.                 y = i.y - star_.y
  33.                 r = (x ** 2 + y ** 2) ** 0.5
  34.                 q = G * i.m / r ** 2
  35.                 a += x / r * q
  36.                 b += y / r * q
  37.         star_.acceleration(a, b)
  38.         star_.motion()
复制代码


                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-2 09:18:10 | 显示全部楼层
牛蛙,哈哈,坐等更新三体
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-15 22:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表