这是大佬和我一起(大佬发不了帖就只好我来了)基于三角函数和抛物线算法作出的机械火控计算器。这个东西曾经用过类似产物,但缺乏有效的扫描装置,而现在可以通过检测器来完成这一点。
首先先放上大佬写的文档,里面阐述了原理和最初的设计方案。
图片貌似不清楚,转成文字了(图片会在最后放出)
Besiege中自动瞄准和抛物线机械计
算的实现原理和细节
在Besiege1.0版本发布之际,我们研究了Besiege中加农炮的自动瞄准和抛物线计算如何通过机械结构
实现。通过在游戏中试验测量,理论推导,以及最终搭建和调试试验结构,成功实现了基于纯机
械结构的手动瞄准和自动抛物线计算,在加上新版本中的探测器和逻辑块之后能够实现结构的小型
化,模块化和自动瞄准的功能。
I. 引言
在Besiege经过漫长的抢先体验环节后终于迎来了第一个正式版。在策划庆祝更新的PVP的时候,KABONG向我提出了做自动火炮瞄准的想法。之后在共同的努力下我们成功实现了通过机械结构自动瞄准和计算抛物线的装置。简易版本的装置无需Mod 就可以实现,但Mod可以进一步缩小装置的体积和增加精度。
II. 正文
i. 火炮数据测量
众所周知,Besiege拥有非常真实的物理引擎,所以在开始研究自动瞄准和抛物线之前我们要充分了解火炮在游戏中的物理属性。其中对抛物线影响最大的部分就是炮弹是否受到空气阻力的影响。为此,我做了小车来验证空气阻力: 根据牛顿定律,如果没有空气阻力,在车匀速直线运动的时候炮弹竖直打上去,一段时间后会掉回车上。但如
果存在空气阻力,炮弹会掉到车的后方。试验证明炮弹确实受到空气阻力影响,如图所示。
Figure 2: 小车静止时炮弹会落回到车上
Figure 3: 小车匀速直线运动的时候炮弹会落到后方
因此我们能够得到结论,火炮炮弹会受到空气阻力的影响。但如果是这样,抛物线的公式会变得非常复杂,因此我进一步试验了阻力对抛物线影响的大小。火炮初速度不同,射程就不同,受到的阻力影响也不同,如果阻力对炮弹影响较大的话火炮初速度和射程应该不成线性关系。如图所示,阻力对抛物线的影响并不大,即便是在滞空时间较长的情况下仍然保持了射程和初速度的线性关系。得到这个结论之后我们就可以开始推导发射角和射程的关系了。
Figure 4: 用来测试的炮车,从左到右火炮功率为0.3,0.6,0.9,1.2,1.5,1.8
Figure 5: 火炮的射程
理论推导
最常见的视觉测距方法是通过两个瞄准镜之间的夹角和瞄准镜间的距离来推导出目标距离。因为这个结构比较简单,我们决定使用类似的方法实现测距。如图,假设点C是我们想要测距的目标,点A和点B分别是看向C的两个摄像头。如果三角形的角度固定,那么线段AB和线段BC是成正比的,我们可以借此来测距。
接下来我们开始推导抛物线射程和发射的关系。在推导的时候我们假设初速度不变,忽略空气阻力,并且发射点在地面上。如图,F为发射点,G为落点,I为最高点。
这样我们能够得到公式:
iii. 简单的机械实现
具体的实现结构利用了角平分线的特性:如图,这个装置基本实现了我们的目的,然而有更多的方式也可以实现,可以视不同情况安装在不同位置。
Figure 9: 角平分线装置
至此,我们已经能够线性的控制火炮抛物线的落点,只要把这些装置和之前提到的测距装置结合就能够实现手
Figure 11: 更适合做炮台的装置
动测距并且自动调整抛物线。下图是我的实验性瞄准装置: 图中两个木杆用来当做视线
Figure 12: 瞄准装置
瞄准的射线,左边的木杆可以用旋转块调整角度来做校准,弹簧和绳子用来测量距离。
校准的过程会比较麻烦,我的操作方法是这样的:
1. 在初始状态,射程最远的时候打一炮,用旋转木杆瞄准落点
2. 之后将炮的射程调小,此时斜向的木杆应该同时移动,使两木杆的交点变近
3. 再打一炮,观察炮弹落点和实际木杆交叉位置的差异,并且以此调节火炮绳子速度和瞄准器绳子速度的比例,多次调节后达到同步,实现最终效果。
III. 结论
由于besiege中各种零件都很有弹性,尤其是绳子,这个结构的精度并不完美,而且结构越小精度越差,为此KABONG制作了利用铰链代替绳子的结构,虽然铰链不是完美的线性关系,但还是有效的提升了精度。至
此,基本的目标已经实现,如果结合新版本的探测器和逻辑块可以实现更高级的功能,例如自动瞄准。同时在制作过程中发现现有结构的实用性不强,需要进一步优化才能真正应用在PVP战场上。
最后祝大家游戏愉快!欢迎各位大佬改进!