ass673556617的专栏

近期记录一些leetcode上的题目,以及平时遇到的一些问题

python编程之 环绕卫星轨道

教材的第六章主要讲了下如何加载图片以及缩放,旋转等基本操作。用一个环绕卫星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都不难,重点放在思路上以及实现的细节部分。希望后面难度加大以后也能够坚持下去。

阅读更多
版权声明: https://blog.csdn.net/awawfwfw/article/details/46810125
个人分类: python pygame
想对作者说点什么? 我来说一句

卫星轨道模拟器

2014年04月19日 1.51MB 下载

没有更多推荐了,返回首页

不良信息举报

python编程之 环绕卫星轨道

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭