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

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”时的爆炸效果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 常见问题解决思路

Linux 常见问题解决思路 CPU 高系统平均负载高&#xff08;load average&#xff09; CPU 高 1&#xff0c;步骤&#xff1a;查找进程-》查找线程-》分析threadDump日志-》找出问题代码 a、查看 cpu 高的 java 进程 topb、生成进程下所有线程的栈日志 jstack 1721 > 1712.…

设计模式之单例设计模式

单例设计模式 2.1 孤独的太阳盘古开天&#xff0c;造日月星辰。2.2 饿汉造日2.3 懒汉的队伍2.4 大道至简 读《秒懂设计模式总结》 单例模式(Singleton)是一种非常简单且容易理解的设计模式。顾名思义&#xff0c;单例即单一的实例&#xff0c;确切地讲就是指在某个系统中只存在…

centos 7.9 部署django项目

1、部署框架 主要组件&#xff1a;nginx、uwsgi、django项目 访问页面流程&#xff1a;nginx---》uwsgi---》django---》uwsgi---》nginx 2、部署过程 操作系统&#xff1a;centos 7.9 配置信息&#xff1a;4核4G 50G 内网 eip &#xff1a;10.241.103.216 部署过程&…

pycharm调整最大堆发挥最大

python程序运行时&#xff0c;怎么提高效率&#xff0c;设置pycharm最大堆过程如下&#xff1b; 一、进入设置pycharm最大堆&#xff1b; 二、进入设置pycharm最大堆&#xff1b; 如果8g设置为6g左右&#xff0c;占75%左右最佳

数学建模之“TOPSIS数学模型”原理和代码详解

一、简介 TOPSIS&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff09;是一种多准则决策分析方法&#xff0c;用于解决多个候选方案之间的排序和选择问题。它基于一种数学模型&#xff0c;通过比较每个候选方案与理想解和负理想解之间的相…

小程序CSS button按钮自定义高度之后不居中

问题&#xff1a; 按钮设置高度后不居中 <view><button class"btn1" size"">Save</button> </view> page {font-size: 30rpx; }.btn1 {margin-top: 100rpx;height: 190rpx;background: linear-gradient(90deg, #FF8A06, #FF571…

c语言每日一练(8)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

微信小程序:模板使用

目录 模板的优点&#xff1a; 一、静态模板创建 二、静态模板使用 1.*.wxml引入模板 2.模板使用 3.*.wxss引入模板的样式 三、动态模板创建 四、动态模板使用 1.*.wxml引入模板 2.模板使用 3.*.js定义动态数据 五、结果展示 总结 模板的优点&#xff1a; 有利于保持网…

NVIDIA Omniverse与GPT-4结合生成3D内容

全球各行业对 3D 世界和虚拟环境的需求呈指数级增长。3D 工作流程是工业数字化的核心&#xff0c;开发实时模拟来测试和验证自动驾驶车辆和机器人&#xff0c;操作数字孪生来优化工业制造&#xff0c;并为科学发现铺平新的道路。 如今&#xff0c;3D 设计和世界构建仍然是高度…

HDFS原理剖析

一、概述 HDFS是Hadoop的分布式文件系统&#xff08;Hadoop Distributed File System&#xff09;&#xff0c;实现大规模数据可靠的分布式读写。HDFS针对的使用场景是数据读写具有“一次写&#xff0c;多次读”的特征&#xff0c;而数据“写”操作是顺序写&#xff0c;也就是…

免费开源服务器资源监控系统grafana+prometheus+node_exporter

有项目做测试的时候需要查询服务器资源利用情况&#xff0c;自己又没写相应的模块&#xff0c;此时就需要一套好用的资源监控系统&#xff0c;&#xff0c;咨询了运维人员给推荐了一套&#xff0c;装完后真的很好用。 就是grafanaprometheusnode_exporter&#xff08;linux&am…

DAY3,ARM(LED点灯实验)

1.汇编实现开发板三盏灯点亮熄灭&#xff1b; .text .global _start _start: /**********LED123点灯**************/RCC_INIT:1使能PE10 PF10 PE8RCC..寄存器,E[4]1 F[5]1 0x50000a28ldr r0,0x50000a28ldr r1,[r0]orr r1,r1,#(0x3 << 4)str r1,[r0]LED1_INET:2初始化LED…

Vue3实现图片懒加载及自定义懒加载指令

Vue3实现图片懒加载及自定义懒加载指令 前言1.使用vue3-lazyload插件2.自定义v-lazy懒加载指令2.1 使用VueUse2.2 使用IntersectionObserver 前言 图片懒加载是一种常见性能优化的方式&#xff0c;它只去加载可视区域图片&#xff0c;而不是在网页加载完毕后就立即加载所有图片…

安防监控视频云存储平台EasyNVR通道频繁离线的原因排查与解决

安防视频监控汇聚EasyNVR视频集中存储平台&#xff0c;是基于RTSP/Onvif协议的安防视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端分发&#xff0c;分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。为了满足用户的集成与二次开发需求&#xf…

H3C交换机如何配置本地端口镜像并在PC上使用Wireshake抓包

环境: H3C S6520-26Q-SI version 7.1.070, Release 6326 Win 10 专业版 Wireshake Version 4.0.3 问题描述: H3C交换机如何配置本地端口镜像并在PC上使用Wireshake抓包 解决方案: 配置交换机本地端口镜像 1.进入系统视图,并创建本地镜像组1 <H3C>system-vie…

酷开系统 | 酷开科技大数据,更好的与目标消费人群建立联系

众所周知&#xff0c;OTT的一大优势在于强曝光&#xff0c;能够给消费者带来强烈的视觉冲击&#xff0c;强化品牌认知。但是&#xff0c;要想达到提升品牌认知&#xff0c;首先要保证OTT的流量规模&#xff0c;实现对目标人群的有效覆盖。得年轻消费者得“天下”&#xff0c;年…

mac录屏工具,录屏没有声音的解决办法

mac录屏工具&#xff0c;录屏没有声音的解决办法 在使用macbook录制屏幕时&#xff0c;发现自带的录屏工具QuickTime Player没有声音&#xff0c;于是尝试了多款录屏工具&#xff0c;对其做一些经验总结&#xff08;省流&#xff1a;APP Store直接可以免费下载使用Omi录屏专家…

docker tomcat时间少8小时问题解决

docker容器与系统时间一致并且正确&#xff0c;但是java程序在运行中通过log日志发现发了8小时 解决方法 修改docker容器中tomcat/bin/catalina.sh文件&#xff0c;添加一下内容 JAVA_OPTS"$JAVA_OPTS -Dfile.encodingUTF8 -Duser.timezoneGMT08" 附 操作命令 一…

PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音

本示例使用的读卡器&#xff1a;RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) <?php mb_http_output(utf-8); $port88; $socket socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $bool socket_bind($socket, "0.0.0.0",…

每天一道leetcode:1926. 迷宫中离入口最近的出口(图论中等广度优先遍历)

今日份题目&#xff1a; 给你一个 m x n 的迷宫矩阵 maze &#xff08;下标从 0 开始&#xff09;&#xff0c;矩阵中有空格子&#xff08;用 . 表示&#xff09;和墙&#xff08;用 表示&#xff09;。同时给你迷宫的入口 entrance &#xff0c;用 entrance [entrancerow, …