地球和月球轨道围绕太阳以pygame与python

时间:2017-10-04 06:17:16

标签: python python-3.x pygame

我想让太阳系只有两个属性,地球围绕太阳移动,月亮在pygame中用python代码连续绕地球移动。这是我的代码:

import sys, random, math
import pygame
from pygame.locals import *
pygame.init()
black = 0, 0, 0
white = 255, 255, 255
grey = 125, 125, 125
red = 255, 0, 0
blue = 0, 0, 255
width = 500
height = 500
screen = pygame.display.set_mode((width,height))
screen.fill(white)
clock = pygame.time.Clock()
font = pygame.font.Font(None, 15)
def rotate2D(x,y,angle):
    angle = 0.0174532925*angle
    x_r = x*math.cos(angle) - y*math.sin(angle)
    y_r = x*math.sin(angle) + y*math.cos(angle)
    return (x_r, y_r)
def translate2D(x,y,tx,ty):
    x_t = x+tx
    y_t = y+ty
    return (x_t, y_t)
def show_FPS():
    text = font.render('day = ' + '{:.2f}'.format(day) + ', ' + str(int(clock.get_fps())) + ' FPS', True, black, white)
    textRect = text.get_rect()
    textRect.bottomright = screen.get_rect().bottomright
    screen.blit(text, textRect)
sun_radius = 70
earth_radius = 15
ex = 0
ey = 0
moon_radius = 10
mx = 0
my = 0
sun2earth_dis = 200
moon2earth_dis = 90
sun2earth_orbit = 0
moon2earth_orbit = 0
day = 0
flag = 1
while flag:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            flag = 0
        if event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE:
            flag = 0
    screen.fill(white)
    day = day+0.2
    sun2earth_orbit = -(day*360.0)/365
    moon2earth_orbit = -(day*360.0)/27
    ex_, ey_ = translate2D(ex, ey, sun2earth_dis, 0)
    ex_, ey_ = translate2D(ex_, ey_, width/2, height/2) 
    mx_, my_ = translate2D(mx, my, moon2earth_dis, 0)
    mx_, my_ = rotate2D(mx_, my_, moon2earth_orbit)
    mx_, my_ = translate2D(mx_, my_, width/2, height/2)
    pygame.draw.circle(screen, red, (int(width/2), int(height/2)), sun_radius)
    pygame.draw.circle(screen, blue, (int(ex_), int(ey_)), earth_radius)
    pygame.draw.circle(screen, black, (int(mx_), int(my_)), moon_radius)
    show_FPS()
    pygame.display.flip()
pygame.quit()

在此代码中,地球围绕太阳移动。它看起来很好。现在我想在地球周围移动月球,它不断在地球和太阳周围移动。我设定地球在365天内全程移动太阳,在月球中它将在27天内绕地球移动。

详情(这是我想要开发的原创想法):

轨道速度: 在365天的太阳周围的地球, 27天内在太阳周围的月亮,

纺纱速度: 太阳1轮30天, 地球1轮一天, 月亮总是面向地球 我做到了这一点。但是月亮如何在太阳周围移动,我的想法仍然不明确。

1 个答案:

答案 0 :(得分:0)

尝试在[0,0]处计算月球与地球的坐标,然后将其添加到地球的当前坐标。