【发布时间】:2018-03-15 10:50:34
【问题描述】:
我想用python代码在pygame中使太阳系只有两个属性,即地球围绕太阳旋转和月亮围绕地球连续旋转。这是我的代码:
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天绕太阳一周,
纺纱速度: 太阳在 30 天内转一圈, 第 i 天地球 1 圈, 月亮总是对着地球 我已经做到了。但是月亮如何围绕太阳运行这个想法我仍然不清楚。
【问题讨论】:
-
在这种情况下,您可能需要学习一些matrix math!秘诀是认识到您可以通过将多个单独的变换矩阵相乘来将多个旋转/缩放/变换组合在一起。如果不清楚,我可以在答案中详细说明。
标签: python python-3.x pygame