您的位置:首页 > 编程语言 > Python开发

python编程之 环绕卫星轨道

2015-07-08 22:51 639 查看
教材的第六章主要讲了下如何加载图片以及缩放,旋转等基本操作。用一个环绕卫星demo作为例子。

因为没有找到素材,在实现的过程中飞船的环绕的中心点并不是画面中央,我觉得可能是素材的因素,如果有错误欢迎指出。

没有按照书上的方法写飞船旋转的代码,而是基础的数学知识,根据当前位于圆心可以计算的角度。草图如下,对很简单。。



实际进行编写的时候会根据你写的三角函数,位置会做一些调整,思路就是这样。

源代码:

# -*- coding: utf-8 -*-
"""
Created on Wed Jul  8 21:24:03 2015

@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()


截图:



前期做的这些小demo都不难,重点放在思路上以及实现的细节部分。希望后面难度加大以后也能够坚持下去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: