Python方式实现射后不管导弹的简易制导系统

news2024/12/28 3:25:10

1 问题

对QN-506上的S570智能反坦克制导导弹的射后不管产生了浓厚的兴趣,想用Python简易还原一下。

2 方法

  1. 之前查阅资料时了解到使用pygame库制作的贪吃蛇,是否有一种方法能让“贪吃蛇”一直跟着鼠标走呢?

    鼠标模拟行进中的坦克,“蛇头”模拟S570巡飞弹;

  2. 先把pygame框架搭好,把导弹的基本参数定义好;

  3. 导弹是会拐弯的,但它不是质点,所以引入了一张矩形图片,还要把它的旋转效果做出来。

    但就在我认知范围内在pygame中做出旋转效果并不容易;

  4. 49cd71f778ae5114fd955f931fe6d9c5.jpeg8b55d6833d7838e44dcaca6972673e99.jpeg

  5. 查阅相关资料后了解到可以让图片变形实现旋转效果,可以用以下代码实现:

    screen.blit(missiled,(x1-width+(x1-C[0]),y1-height/2+(y1-C[1])));

通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。

代码清单 1

import pygame,sys
from math import *
pygame.init()
font1=pygame.font.SysFont('microsoftyaheimicrosoftyaheiui',23)
textc=font1.render('T',True,(250,0,0))
screen=pygame.display.set_mode((800,700),0,32)
missile=pygame.image.load('missile.png').convert_alpha()
height=missile.get_height()
width=missile.get_width()
pygame.mouse.set_visible(0)
x1,y1=100,600           #导弹的初始发射位置
velocity=800            #导弹速度
time=1/1000             #每个时间片的长度
clock=pygame.time.Clock()
A=()
B=()
C=()
while True:
   for event in pygame.event.get():
       if event.type==pygame.QUIT:
           sys.exit()
   clock.tick(300)
   x,y=pygame.mouse.get_pos()          #获取鼠标位置,鼠标就是需要打击的目标
   distance=sqrt(pow(x1-x,2)+pow(y1-y,2))      #两点距离公式
   section=velocity*time               #每个时间片需要移动的距离
   sina=(y1-y)/distance
   cosa=(x-x1)/distance
   angle=atan2(y-y1,x-x1)              #两点间线段的弧度值
   fangle=degrees(angle)               #弧度转角度
   x1,y1=(x1+section*cosa,y1-section*sina)
   missiled=pygame.transform.rotate(missile,-(fangle))
   if 0<=-fangle<=90:
       A=(width*cosa+x1-width,y1-height/2)
       B=(A[0]+height*sina,A[1]+height*cosa)
   if 90<-fangle<=180:
       A = (x1 - width, y1 - height/2+height*(-cosa))
       B = (x1 - width+height*sina, y1 - height/2)
   if -90<=-fangle<0:
       A = (x1 - width+missiled.get_width(), y1 - height/2+missiled.get_height()-height*cosa)
       B = (A[0]+height*sina, y1 - height/2+missiled.get_height())
   if -180<-fangle<-90:
       A = (x1-width-height*sina, y1 - height/2+missiled.get_height())
       B = (x1 - width,A[1]+height*cosa )
   C = ((A[0] + B[0]) / 2, (A[1] + B[1]) / 2)
   screen.fill((0,0,0))
   screen.blit(missiled, (x1-width+(x1-C[0]),y1-height/2+(y1-C[1])))
   screen.blit(textc, (x,y)) #鼠标用一个红色T代替
pygame.display.update()
140f66917ea7bd400ab096038203744d.png附件:代码中的missile.png文件

3 结语

针对在pygame中实现图片旋转的问题,提出显示图片时将其移动的方法,通过实机实验,证明该方法是有效的。未来还可以加入导弹撞击到“T”时的爆炸效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/874914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

劝你入行嵌入式的五个理由

嵌入式技术作为一个备受瞩目的领域&#xff0c;已经吸引了越来越多的人才。如果您还在考虑是否要进入该领域&#xff0c;我建议您听听以下五个理由&#xff1a; 一、市场需求旺盛 随着科技的迅猛发展&#xff0c;嵌入式系统已经广泛渗透到我们生活的各个方面。从智能家居到智能…

rabbitmq的持久化

目录 队列实现持久化 如何删除队列​编辑 消息实现持久化 不公平分发 如何保障当 RabbitMQ 服务停掉以后消息生产者发送过来的消息不丢失。默认情况下 RabbitMQ 退出或由于某种原因崩溃时&#xff0c;它忽视队列和消息&#xff0c;除非告知它不要这样做。确保消息不会丢失需…

浅析前端请求登录与后台对接

首先确保前后端接口参数一致&#xff0c;我这里使用的是ant design Pro 前端框架 小技&#xff1a;shiftf6&#xff0c;全局重构&#xff0c;当接口不一致时很方便 前&#xff1a; 后&#xff1a; 前后端交互&#xff1a;前端需要向后端发送请求&#xff0c;前端ajax来请求后…

Ubuntu虚拟机增加交换内存

接下来增加交换内存。配置交换内存&#xff0c;需要用户根据自己的实际情况进行配置。这里举例分配 5G 交换内存。 在开始之前&#xff0c;使用命令检查一下您的 ubuntu 的 swap 分区&#xff0c;可以看到交换分区为 2G &#xff0c;如下图所示&#xff1a; sudo swapon …

【ChatGPT 指令大全】怎么使用ChatGPT来辅助知识学习

目录 概念解说 简易教学 深度教学 教学与测验 解释一个主题的背后原理 总结 在当今信息时代&#xff0c;互联网的快速发展为我们获取知识提供了前所未有的便利。而其中&#xff0c;人工智能技术的应用也为我们的学习和交流带来了新的可能性。作为一种基于自然语言处理的人…

(css)点击前隐藏icon图表 点击后显示

(css)点击前隐藏icon图表 点击后显示 效果 html <liv-for"(item,index) in sessionList":key"index"class"liClass":class"{ active: change2 index }"tabindex"2">...<el-tooltip class"item" effec…

双驱拖挂底盘的制作分享

1. 运动功能说明 本文示例将实现R331样机双驱拖挂底盘运动的功能。 2. 结构说明 双驱拖挂底盘是一种具有两个驱动轴的车辆底盘&#xff0c;它由两个驱动轴、悬挂系统、转向系统和连接拖车的结构组成。以下是一些关于双驱拖挂底盘的主要特点和优势&#xff1a; ① 强大的牵引能力…

网络基础-PosixAPI

文章目录 一.网络常用接口Linux协议栈与posix api的关系 背景1.1 socket1.8 close服务端posix接口1.2 bind1.3 listen1.4 accept1.5 connect1.6 send1.7 recv总结 二. 修改句柄属性2.1 fctl2.2 特殊作用2.2.1 设置阻塞非阻塞2.2.1 实例2.2.2设置获取记录锁2.2.2 实例 三、文件操…

苹果恢复已删除的照片,3种超实用教程!

【大家帮帮孩子吧&#xff01;去旅游拍的写真不小心被我删掉了&#xff0c;回收站也找不到&#xff0c;有什么办法能恢复回来吗&#xff1f;】 不小心误删了重要照片该怎么办&#xff1f;大家都知道&#xff0c;苹果手机【最近删除】里的照片只能保留30天&#xff0c;超过了这…

CAD版本怎么在线转换?教你在线转换CAD版本方法

CAD文件版本转换通常是由于文件的创建者使用了与接收者不同的CAD软件版本。此外&#xff0c;如果接收者使用的CAD软件版本与创建者使用的版本不兼容&#xff0c;则可能需要进行文件版本转换&#xff0c;以便接收者能够正确地查看和编辑文件。很多小伙伴喜欢在线处理文件格式&am…

《零基础实践深度学习》(第2版)学习笔记,(五)深度学习与计算机视觉

文章目录 1. 计算机视觉概述2. 图像分类3. 目标检测 1. 计算机视觉概述 图像分类 目标检测 2. 图像分类 3. 目标检测

Guitar Pro8专业版吉他学习、绘谱、创作软件

Guitar Pro 8 专业版更强大&#xff01;更优雅&#xff01;更完美&#xff01;Guitar Pro 8.0 五年磨一剑&#xff01;多达30项功能优化&#xff01;Guitar Pro8 版本一共更新近30项功能&#xff0c;令吉他打谱更出色&#xff01;Guitar Pro8 是自2017年4月发布7.0之后发布的最…

独立游戏开发者的工具栈【Lumnis作者】

作为一名单人游戏开发者&#xff0c;需要成为多面手。 如果你想避免委托给承包商&#xff0c;需要身兼数职&#xff0c;并精通艺术、编程、游戏设计、音乐创作、营销等&#xff0c;具体取决于你制作的游戏。 学习所有这些需要时间和练习&#xff0c;但也需要金钱。 大多数游戏…

thread 的join方法

join方法的底层执行&#xff1f; 看如测试用例&#xff1a; -> 两个红色的框分别说明了sleep方法前后test01的状态&#xff0c;这个不是重点&#xff0c;只是一个验证而已。 重要的是test02的状态&#xff0c;调用join方法后&#xff0c;test02变成了WAITING状态&#xff…

每日一题 92反转链表||

题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;…

冠达管理:股票成交量变小的含义?股价不涨是什么原因?

股票成交量是一个很重要的分析指标&#xff0c;遭到许多出资者的重视。那么股票成交量变小的意义&#xff1f;股价不涨是什么原因&#xff1f;冠达管理也为我们预备了相关内容&#xff0c;以供参考。 股票成交量变小的意义&#xff1f; 股票成交量是指在一定时间内&#xff0c…

2023 ChatGPT 3.5+4.0 + AI智能绘图-设计师专项源码 附安装教程

AI绘图专业设计 不得将程序用作任何违法违纪内容&#xff0c;不要让亲人两行泪 界面部分图解构&#xff1a; 前台show&#xff1a; 后台Show&#xff1a; 前端部署&#xff1a; 安装pm2管理器 点击设置 选择v16.19.1版本-切换版本 再新建一个网站 点击设置 添加反向代…

CSS变形与动画(一):transform变形 与 transition过渡动画 详解(用法 + 代码 + 例子 + 效果)

文章目录 变形与动画transform 变形translate 位移scale 缩放rotate 旋转skew 倾斜多种变形设置变形中心点 transition 过渡动画多种属性变化 变形与动画 transform 变形 包括&#xff1a;位移、旋转、缩放、倾斜。 下面的方法都是transform里的&#xff0c;记得加上。 展示效…

冠达管理:股票估值低为什么好于估值高?如何判断估值?

进行股票交易要掌握一些重要的相关常识&#xff0c;比如对股票估值状况的判别&#xff0c;假如出资者能清楚的得知买入的股票价格是否合适&#xff0c;那对于出资来说是大有益处的。但是&#xff0c;关于估值&#xff0c;会有估值低好于高一说&#xff0c;为什么估值低会好于估…

爬虫:Scrapy热门爬虫框架介绍

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3-5章&#xff0c;最短1个月就能全方位的完成Python的学习并进行实战开发&#xff0c;学完了定能成为大佬&#xff01;加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教…