火炮的惯性制导
首先声明,本教程里的数据都是亲手算出来的,绝对真实可信,如果你在应用中发现有不符之处可以与我讨论,我也甘愿因为数据上的问题而被指责不足,并会诚恳道歉但如果是自己计算错误别来找我
当我们和好友用火炮中门对狙时,经常容易打偏,这时制导就很有必要了。本期干货较多,对部分人来说可能会过于枯燥,请酌情查阅。
从两个方面看,我们需要控制仰角和偏离角,仰角又需要知道炮弹的抛物线与与目标的直线距离,这时候我们可以将射程与距离的关系转化为一个二次函数。下面一部分是推导过程,不想看的同志可以移步到最后的结论部分
推导
碍于技术有限,没法直接扒代码。
我只能在游戏中通过控制角度观察距离来反推表达式,我还是用经典的满配下届钢火炮作为例子(满配的意思就是达到火炮最大火药装载量,满配下届钢火炮则代表这种下届钢火炮装载了八节即最多火药),通过取特殊值,得到了下面的表格
在这副图中展示了角度对炮弹距离的影响,另外,由于此种火炮的仰角限制在60度,所有以下所有关于角度的实验都在0-60度间研究
可编程齿轮箱中设置的旋转角度与改变火炮的仰角不同。举个例子,可编程齿轮箱中设置的是正向一倍旋转九十度,但火炮只旋转了大约11度。而经过计算,火炮仰角与编程齿轮箱的设置角度之比大约为为1:0.13(有误差,±0.1)。在可编程齿轮箱中转速对火炮的仰角没有影响,只与设置的旋转度数与旋转方向有关。
我的想法是每一度都开一炮,计算每次增加的距离取平均值,但直到我试到二十度,每一度之间的距离都十分不稳定,再加上每次开炮都需要长时间的装填,火炮还容易卡壳,因此研究举步维艰。
总之在枯燥得研究后,我得出了下表
如图,为角度与射程的关系图(大部分的误差来自于火炮角度除以0.13后的四舍五入,因为可编程齿轮箱只能设置整数)然后得出它的二次函数表达式即为
y = -0.406x2 + 26.57x + 97.043
在该表达式中,R2=0.9873,可以看出该函数表达式已经很接近实际了大嘘r方得值越接近1说明函数表达式越接近实际数据,其得值在±1之间
至于我在上文提到度数改变后距离变化十分不稳定,从下表就可以看出
因此,应用到游戏当中,实际距离会在得出的y值的±4格之间摆动(不过用爆炸范围广的炮弹可以弥补这一误差)
那么下来就要探究火药数量对射程的影响,炮弹对射程的影响,以及不同材质的火炮的射程。
火药数量对火炮射程的影响
我们还用下届钢举例,从满配,依次减少火药数量,再取几个角度,观察在相同角度下射程不同的现象。
实验后数据如下所示
首先,根据火药量的不同,对炮腔和炮管进行修改,并得出数据(红框部分),纵列为数量,横列为角度; 由于火炮位置固定,而炮管因火药减少而变短,所以炮弹的实际射程在增加,我将这段距离弥补后, 得出第二部分数据(黄框部分),之后计算每两个数据 之间 的差,得到第三部分数据(蓝框部分),在蓝框部分数据最后一行,就是二十度,三十度与四度下,每减少一个火药减少的距离 的平均数,将这三个数再取平均,得到最终我们需要的数据(蓝框部分数据最后一行最右边的数据)
但事情到这里并没有结束,我们还需要知道材质与火药数量的关系,我又用了钢,铸铁和青铜火炮,进行了测试得到以下数据
每减少或增加一节火药变化的距离
下届钢 | 77.66667 |
钢 | 71.22222 |
青铜 | 60.66667 |
铸铁 | 36.33333 |
到现在,我们可以正式做出结论了:
1.火炮射程随着火药的量的增大而增大。
2.不同材料的火炮受影响程度不同,材料越好受影响越大。
这个结论的作用我们过会儿会解释,先进行下一个实验。
炮弹种类对火炮射程的影响
游戏中目前一共有五种炮弹,分别是榴散弹,硬头弹,葡萄弹,高爆弹和穿甲弹。
我的计划是榴散弹,硬头弹,葡萄弹和穿甲弹四种作为实验组,分别装载在下届钢,钢,青铜与铸铁的满配火炮上,并同样在火炮仰角为20,30,40度进行发射,比较距离与对照组(高爆弹)的差距。(之所以用高爆弹作为对照组,是因为在上文中提到的种种实验都是以高爆弹为主的,因此我有现成的数据,只要将其它炮弹的射程与其进行对比,就可以达到本次实验的目的)
实验的过程就省略了,和其它实验差不多,我们直接说结论:
炮弹的种类对火炮的射程没有影响
那么我们进行下一个实验
不同材质的火炮对射程的影响
前面我们已经对下届钢火炮进行了细致入微的研究,现在只需将这一套实验方法与模式应用到其它材质的火炮上,就可以很快的得出数据了。
直接上数据:
我们可以明显观察到 青铜与铸铁火炮的 散点与趋势线 的距离十分不稳定,尤其是青铜,点几乎就没压到线上,这是因为青铜火炮射出的炮弹会非人为的偏离正确弹道,(说人话就是打不准)
这里的R方的值不等于1是因为存在误差,而误差只能减小而不能避免,所以严格意义上来讲,R方值的偏差对计算没有太大影响。
结论
这个教程中的所有实验都没有涉及铁与木制火炮,是因为它们射程太短以至于不需要精确制导。
四种材料的火炮射程公式如下:
下届钢:y = -0.406x2 + 26.57x + 97.043
钢:y = -0.2057x2 + 14.87x + 78.873
青铜:y = -0.0956x2 + 7.288x + 49.23
铸铁:y = -0.0259x2 + 2.0306x + 20.836
这些是满配火炮的公式,火炮没有满配也没有关系,下面会讲。(满配的意思就是达到火炮最大火药装载量,满配下界钢火炮则代表这种下届钢火炮装载了八节 即最多火药)
而它的应用分两种:知道角度算距离与知道距离算角度
知道角度算距离
第一步,知道你需要的火炮的角度
第二步,将你的火炮底座接入一个可编程齿轮箱,转速无所谓,将你需要的火炮的角度除以0.13,得出要在可编程齿轮箱中输入的角度(火炮的角度不等于可编程齿轮箱的角度,他们之间存在一个比例关系,前者是后者的0.13倍)
第三步,从上方的四个公式中选择对应的公式,将火炮的角度带入到x值中,得出y值。如果你的火药量少于 同材质的 火炮的 最高火药承载量的话,还需要用下面的公式进行第二次计算(下届钢最多可以承载八节火药,如果你的下届钢火炮的火药量是七或者更少,那就需要第二个公式)
s=y-(m0-m)*S
m0=对应材质可承载的最大火药量,m=你的火炮可承载的火药量,S=每节火药改变的距离,y=第一个公式的结果,最后得出的s才是真正的距离。
每节火药改变的距离S如下表所示,选择合适的带入到上方的S当中(公式里的s,S是两个量,看清楚大小写再代入)
下届钢 | 77.66667 |
钢 | 71.22222 |
青铜 | 60.66667 |
铸铁 | 36.33333 |
知道距离算角度
我相信这种情况比第一种情况更多,那么废话不多说,直接上教程。
第一步,知道目标距离你火炮的距离
第二步,利用公式算出实际射程
S= ms
m=你的火炮可承载的火药量,s=每节火药改变的距离,S=实际射程;
第三步,判断第二步计算出的S值是否能够达到目标距离
第四步, 将S带入到下面公示的y中,反推出x的值
下届钢:y = -0.406x2+ 26.57x + 97.043
钢:y = -0.2057x2+ 14.87x + 78.873
青铜:y = -0.0956x2 + 7.288x + 49.23
铸铁:y = -0.0259x2 + 2.0306x + 20.836
(“x2”代表的是x的二次方,不是2x或者乘以二的意思)
第五步,得到的解就是火炮需要的仰角,我在前面说过,可编程齿轮箱中的角度与火炮的实际仰角是不同的,在这里我们得出的解值需要再除以0.13,这样得到的角度才是需要在可编程齿轮箱中输入的角度(通常我们会得到两个解,那是因为二次函数通常在任意平行于x轴的直线上出现与直线的两个交点。 而两个都是可以的。)
两种基础的教程到这里就结束了,应用时 要注意这两种方法都是在正方向上才起作用。而下面是扩展部分。
非正方向的目标的精准制导
有些目标可能会位于斜方向上,而这个应用就相对来说比较麻烦,需要我们用到初中的勾股定理与三角函数来解决。
如图,我们假设目标位于点B,火炮位置位于点A,两者的直线距离为c。
首先,我们打开F3,记住A坐标,然后到B那里记下距离,将两次的xy坐标值 进行相减后 取绝对值,得到两个数据。而x的相减值可以看作边b的长度,y的相减值可以看作边a的长度。则有勾股定理:
c²= a²+b²
将x的相减值与y的相减值带入到a,b中。得到c方的值,将它开平方后我们得到的值就是与目标的实际距离,再用上方的 “知道距离求角度“方法,得出仰角。
那么关于仰角的研究就到这里,接下来是关于火炮的偏离角计算的教程。
控制火炮偏离角
我们还用这张图,假设火炮位于A点,目标位于B点,我们只需要求出tanA,公式如下
tanA=a/b
得到的值利用反函数(这个反函数的算法可以百度搜索,不过一般来说初中就会教怎么利用计算器算反函数,所以我没有细讲),求出∠A,得到火炮的偏离角,但是这里说的是火炮的偏离角。我们类比火炮的仰角,在可编程齿轮箱中 输入的角度 也应该 不等于 火炮的偏离角。那么根据我的测试得出的结论,的确如此,火炮的偏离角与可编程齿轮箱中设置的角度之比和仰角的比例同样是0.13(误差±0.1)
那么我们只需要将∠A除以0.13,得出需要在可编程齿轮箱中设置的角度
另外,在实验中我发现,虽然转速不影响火炮的偏离角,但当接入可编程齿轮箱的转速过大而齿轮箱中设置的旋转角度过小,火炮就不会转了。
那么这期制导的教程就结束了,干货较多,比较晦涩难懂,我也是在尽自己最大能力表达清楚要讲的东西。总之,还是要感谢大家阅览本教程,也希望你们可以留下宝贵的推荐。
最后我再次声明,本教程里的数据都是亲手算出来的,绝对真实可信,要是数据不准我吞了它,满意了吧(郝哥音)