最近,儿子一直缠着让我把之前给他编写的游戏重做一下,要加一些功能.但是因为之前写代码的时候刚学会python,当时的想法就是能跑就行,现在回头看来,代码的可维护性几乎为零.所以没办法只能冲头再来,重构了几乎所有代码.在编写的时候遇到了一个有意思的问题,儿子让我给游戏添加一种带追踪能力的导弹.导弹不仅要能追踪目标不断修正轨迹向着目标前进,同时导弹的弹头要一直朝向目标,我一听,这不就是弹道导弹嘛,有意思,整!
当时我想,这还不简单,在追踪的时候顺手把本体和目标之间连线的斜率计算出来不久完了吗?于是说干就干,但是当我到了真正编写的时候还是发现了一些问题.今天就来和大家分享一下.
首先呢,路径追踪很简单,我之前写过一篇相关的文章可以参考这个http://t.csdnimg.cn/soVGy,所以路径这里咱们就跳过.
这篇文章主要就聊聊如何实现导弹通过旋转始终指向目标.
先来看一张示意图
如图,当A点向B移动时是沿着AB移动,所以只要计算出AB的斜率时就会得到第一个旋转角度,当A移动到A`点时追踪目标变为了C,这时算出A`C的斜率就能得到第二个旋转角度,如此循环往复,无论被追踪的目标如何变化,我们只要算出当前目标和本身的斜率就能得出要旋转的角度了.明白了实现旋转的方法以后,我们就开始写代码.这里多说一句,其实一开始我在这里思考了很长时间,主要的问题是我的一个闪念,既然正切函数能够得到斜率,