用 Phython 展示太阳系的运动模型
1,sun
静态图片展示
# init the Solar System Icons
ico_solar = pygame.image.load( "solar.jpg" )
2,sky
背景黑色,静态展示,叠加随机的星星
# draw sky
def draw_sky(sw_init):
if sw_init:
sw_init = False
for i in range(1,50,1):
rand_x = random.randint(1,790)
rand_y = random.randint(1,790)
star = [rand_x, rand_y]
stars.append( star )
else:
# draw Sun
playgd.blit( ico_solar, [pos_sun[0]-50,pos_sun[1]-50] )
for star in stars :
pygame.draw.rect( playgd, [255,255,255],[star[0],star[1],2,2],1 )
3,planet
行星的动画模型展示是绕太阳旋转的,每个行星可以设定不同的图形,旋转半径,起始位置,旋转速度
构造一个行星的类如下,包含初始化和每帧移动两个函数
class planet_m(pygame.sprite.Sprite):
def __init__(self, img, loc, radius, spd ):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(img)
self.rect = self.image.get_rect()
self.pos = loc
self.radius = radius
self.speed = spd
self.angle = 0
print( "p_x="+str(self.pos[0])+";p_y="+str(self.pos[1]) )
self.rect = self.rect.move( self.pos )
def move( self ):
delt_x = int( self.radius * cos( radians(self.angle) ) )
delt_y = int( self.radius * sin( radians(self.angle) ) )
self.angle += self.speed
delt_x -= int( self.radius * cos( radians(self.angle) ) )
delt_y -= int( self.radius * sin( radians(self.angle) ) )
#print( "angle="+str(self.angle)+"; delt_x="+str(delt_x)+", delt_y="+str(delt_y) )
self.rect = self.rect.move( [ -delt_x, delt_y])
4,planet circle
简化行星的公转轨迹为圆形,画出多个圆形的轨迹
# draw tracks & planets
for i in range(1,7,1):
pygame.draw.circle( playgd, [50,50,50],pos_sun, 50+50*i,2 )
最终演示效果如下图所示