自动追踪算法,在我们制作射击类游戏时经常会用到。这个听起来很高大上的东西,其实并不是军事学的专利,从数学上来说就是解微分方程。
这个没有点数学基础是很难算出来的。但是我们有了计算机就不一样了,依靠计算机极快速的运算速度,我们利用微分的思想,加上一点简单的三角学知识,就可以实现它。
好,话不多说,我们来看看它的算法原理,看图:
“我自己是一名从事了6年python开发的老程序员,收几个徒弟,从零基础开始带,今年年初我花了一个月整理了一份最适合2022年自学的python全套培训教程(视频+源码+笔记+项目实战),打包给每一位前端小伙伴,这里是python学习者聚集地,欢迎初学和进阶中的小伙伴(所有python教程关注我的微信公众号:python教程营,关注后回复“python教程”即可领取
由于待会要用pygame
演示,它的坐标系是y轴向下,所以这里我们也用y向下的坐标系。
算法总的思想就是根据上图,把时间t分割成足够小的片段(比如1/1000,这个时间片越小越精确),每一个片段分别构造如上三角形,计算出导弹下一个时间片走的方向(即∠a)和走的路程(即vt=|AC|
),这时候目标再在第二个时间片移动了位置,这时刚才计算的C点又变成了第二个时间片的初始点,这时再在第二个时间片上在C点和新的目标点构造三角形计算新的vt,然后进入第三个时间片,如此反复即可。
假定导弹和目标的初始状态下坐标分别是(x1,y1),(x,y)
,构造出直角三角形ABE,这个三角形用来求∠a的正弦和余弦值,因为vt是自己设置的,我们需要计算A到C点x和y坐标分别移动了多少,移动的值就是AD
和CD
的长度,这两个分别用vt
乘cos(a)
和sin(a)
即可。
计算sin(a)和cos(a),正弦对比斜,余弦邻比斜,斜边可以利用两点距离公式计算出,即:
于是