python编程之 环绕卫星轨道
发布时间
阅读量:
阅读量
教材的第六章主要介绍了加载图片的方法及其相关的缩放、旋转等基本操作,并以一个环绕卫星DEMO为例进行展示
由于缺乏相关素材,在实施过程中飞船的环绕中心位置并非画面中央。我认为这可能与素材质量有关。如有错误,请批评指正。
未依照教材中的方案编写飞船旋转的代码,并非采用专业编程技巧;而是运用基础数学知识,在确定物体处于圆心位置的基础上计算所需角度值。草图如上所示,并不复杂。

在编写过程中,在您提供的三角函数的基础上进行操作时,在处理位置设置上会有相应的调整。总体思路就是如此。
源代码:
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 8 21:24:03 2015
5. @author: liuchang
"""
import random,math,pygame
from pygame.locals import *
#定义 坐标类
def wrap_angle(angle):
return angle%360
def print_text(font,x,y,text,color=(255,255,255)):
imgText=font.render(text,True,color)
screen.blit(imgText,(x,y))
class Point(object):
def __init__(self,x,y):
self.__x = x
self.__y = y
def getx(self):
return self.__x
def setx(self,x):
self.__x = x
x = property(getx,setx)
def gety(self):
return self.__y
def sety(self,y):
self.__y = y
y = property(gety,sety)
def __str__(self):
return "{X:"+"{:.0f}".format(self.x)+ \
",Y:"+"{:.0f}".format(self.y)+"}"
pygame.init()
screen = pygame.display.set_mode((1000,700))
pygame.display.set_caption("orbit demo")
font = pygame.font.Font(None,60)
space = pygame.image.load("backnew.jpg").convert()
planet = pygame.image.load("glazed.png").convert_alpha()
ship = pygame.image.load("ship.png").convert_alpha()
s_width,s_height = ship.get_size()
width,height = planet.get_size()
ship = pygame.transform.smoothscale(ship,(s_width//10,s_height//10))
pos = Point(0,0)
old_pos = Point(0,0)
angle = 0.0
#angle = wrap_angle(angle -0.1)
radius = 250
while True:
for event in pygame.event.get():
if event.type== QUIT:
sys.exit()
keys = pygame.key.get_pressed()
if keys[K_ESCAPE]:
sys.exit()
#background
screen.blit(space,(0,0))
#palnet
screen.blit(planet,(500-width/2,350-height/2))
#ship
angle = wrap_angle(angle +0.1)#转动
pos.x = math.cos(math.radians(angle))*radius
pos.y = math.sin(math.radians(angle))*radius
r_angle = -angle+180
r_ship = pygame.transform.rotate(ship,r_angle)
screen.blit(r_ship,(720+pos.x-width/2,550+pos.y-height/2))
#screen.blit(ship,(50,50))
print_text(font,0,20,"rotation:"+"{:.2f}".format(angle))
print_text(font,400,20,"rotation angle:"+"{:.2f}".format(r_angle))
pygame.display.update()
截图:

前期完成的这些小型演示项目相对容易,并不在意细节上的复杂性。重点应放在思想上以及具体实施环节中的细节处理上。希望在后续难度提升时也能保持稳定性。
全部评论 (0)
还没有任何评论哟~
