python编程之 环绕卫星轨道
2015-07-08 22:51
639 查看
教材的第六章主要讲了下如何加载图片以及缩放,旋转等基本操作。用一个环绕卫星demo作为例子。
因为没有找到素材,在实现的过程中飞船的环绕的中心点并不是画面中央,我觉得可能是素材的因素,如果有错误欢迎指出。
没有按照书上的方法写飞船旋转的代码,而是基础的数学知识,根据当前位于圆心可以计算的角度。草图如下,对很简单。。
实际进行编写的时候会根据你写的三角函数,位置会做一些调整,思路就是这样。
源代码:
截图:
前期做的这些小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都不难,重点放在思路上以及实现的细节部分。希望后面难度加大以后也能够坚持下去。
相关文章推荐
- Python字符整数类型转换
- karloop介绍--hello world大家好,今天为大家介绍一款非常轻量级的的web开发框架,karloop框架。使用python开发 首先我们下载karloop源码进行安装。 源码地址 下载成
- adb connection python 一键 wifi 连接
- python基础(1)
- python装饰器
- epoll 简单用法
- tornado 源码初识
- python_queue多线程
- 提供给开发者 10 款最好的 Python IDE(转)
- OOP in python DEMO
- 【Python 学习手册笔记】介绍Python对象类型
- 汉诺塔和杨辉三角问题的Python实现
- numpy数组基础知识
- Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系
- [python] tornado.log将输出定向到stdout
- Python使用QRCode生成二维码
- Python文件夹与文件的操作
- python编程之 模拟时钟
- python 文件操作
- Demo of Python "Map Reduce Filter"