鞘翅动力学-1.航空安全&末速度的理论公式 [minecraft]

在上一期,我们通过实验得出了一些关于鞘翅的简单结论,但是这显然不够精细。为了获得更精确的答案,我们还需要从基本的动力学原理上分析,对于mc来说就是翻源码。当然也可以继续通过实验和猜想得出结论,但事实证明结论过于复杂导致我不太能猜出来……
以下原理是根据Java Edition 1.12.2的(伪)源代码翻译的(没有找到反混淆的1.13源码orz),上一期的实验是在Java Edition 1.13.2进行的。这两个版本对于鞘翅和烟花火箭本身似乎没有特别大的改动,因此这些原理是可以解释实验的。
本节主要应用内容是根据以下原理验证上一期的实验结论,并不提出过多的新内容。
如果有错误,请在评论区指出。
本文末尾提到了鞘翅的安全问题:包含对于“感受动能”与“坠毁”的简要解释。这是我认为本章最重要的内容,如果太长,请直接看结尾。
本期主要内容:
鞘翅滑翔的动力学方程
稳态速度的理论预期
飞行安全注意事项

铺垫知识1 - 时间的离散性
在Minecraft中,时间是不连续的,对于实体的运动来说是以gametick(简称gt)为最小单位,正常情况下 1gt 等于(1/20)秒。又因为一些“力”是正比于速度的(例如流体(空气、水、岩浆)阻力以及与鞘翅有关的很多力),这种力的作用效果相当于等比例地将速度缩小(或放大),所以力的作用顺序会对速度和位移变化的结果产生影响。
(这次图清楚一些了吗emmm)


以上关于速度、位移的类似过程可用类似以下(伪)代码表示(以java为例):

铺垫知识2 - 视线方向的描述
“实体螺旋坐标”:玩家的视线方向在调试界面(F3)中显示为pitch = α,yaw = β。其中pitch是俯仰角,取值范围是[-90°, 90°],向下为正;yaw是水平旋转角,取值范围是[-180°, 180°],正南方向的值为0,以此为基准,向西为正,向东为负。
“世界坐标”:右手系空间直角坐标系,东 = +x,上 = +y,南 = +z。
为了方便描述视线方向,在本文中规定了一些参量(主要是视线矢量)。注意:这些只是我临时规定的,具有强烈的主观性。

鞘翅的动力规则
本节只讨论鞘翅在空气中自由作用时的原理,即暂不考虑烟花火箭和三叉戟的作用。

“时间量子化”相关段落已经介绍了分析速度变化过程的方法,根据类似的方法,可以得出在不同情况下鞘翅的动力学方程。

根据以上原理,就可以计算出鞘翅滑翔的理论终末速度,详细解释上一期的实验结果。

实验结果 - 纯鞘翅
根据常识可知,终末速度必须是向下的,因此我们只需要求出俯视下降、仰视下降这两种情况的终末速度。当运动趋于稳定时,可以认为达到匀速运动状态,即速度的变化率为零,联立二元一次方程组求解即可(但是这个方程组比较复杂233)。

根据上述公式还可以得出一些结论,但不一定正确:
*以俯角53.4°滑翔时,水平速度最大,67.776m/s;
*以俯角5.716°滑翔时,飞行方向与视线平行;
滑翔终末速度的变化率在俯仰角为0°的点附近发生突变;
当仰角57.9° ~ 俯角38.6°之间时,下降速度小于10m/s;
*以仰角12.8°滑翔时,下降速率最小,1.517m/s;
以0°滑翔时,下降率最小(0.099):每下降1m,水平方向飞行10.102m;
……
将上述公式绘制成图像和表格,与实验数据对照:


从图像上看着差不多(

仔细对比数据就会发现,虽然总体上差不多,但还是有一定的误差。在俯视时误差很小,仰视时误差偏大一些。总体来说,此结论几乎完全适用于俯视的情形,但对于仰视的情形不一定完全适用。
对于以上情况,我暂时没有想到比较好的解释或修改方法(咕咕咕)。

鞘翅飞行的安全问题
这实际上是本章重点内容,读者或许是空降过来的。
由于伤害判定的代码在动力规则附近,因此在查找后者时自然看到了前者。这是很有意义的内容,因此也在这里简述一遍。
鞘翅飞行中,玩家可能受到的伤害分为两种:摔落伤害、冲撞伤害。前者就是传统意义上的摔落伤害,后者即为我们所熟知的“xxx感受到了动能”。前者完全不能用“碰撞”来解释,非常反直觉;后者可以认为是“水平碰撞”,它的算法比较符合物理学常识。
1. 摔落伤害
用鞘翅飞行时,摔落伤害也是可能出现的,这其实就是按照高度计算的传统的摔落伤害。1gt中,在整个加速过程之前,会先检测竖直速度 v(以向上为正方向,单位为m/s)。
如果 v < -10(向上运动或下降速度不足10 m/s),就会将摔落高度重置为1 m,因此以这样的速度撞击地面不会受到摔落伤害。
如果 v > -10(以大于或等于10 m/s的竖直速度下降),就会开始记录下落的相对高度,并按照相应的规则计算摔落伤害。一般情况下,落地时,伤害为 { 高度 - 3 }。
因此,使用鞘翅飞行时,撞击地面时受到的伤害与速度并无必然联系,而只取决于在撞击之前以10 m/s或更大的竖直速度下降的竖直距离。玩家下落时的速度是有限的,但可能受到的摔落伤害却是无限的。以看起来不是很大的速度落地,也有可能发生坠毁事故。
在“自动驾驶(不驾驶,挂机)”的过程中,为了保证安全,最好应保证以不足10 m/s的竖直速度下落;为了保证效率,水平速度可以比较大。视俯角的一个临界取值是38.6°,此时的竖直速度(绝对值)为9.991 m/s,水平速度是59.089 m/s,可能受到的最大水平碰撞伤害是26.5445。
2.“动能”
当使用鞘翅飞行的玩家在水平方向高速撞击方块时,会受到相应的伤害,如果因此致死,则会显示“<玩家>感受到了动能(experienced kinetic energy)”。这种伤害实际上是根据水平动量的变化判定的,当某1gt内水平速度大幅减小时,玩家会受到撞击伤害。这种伤害不受护甲本身影响,但会受保护附魔影响,具体的减伤机制在Minecraft Wiki上已经写得很详细,这里不再赘述,请自行查看。
这种伤害(u)大体上与水平方向碰撞前后gt的动量(速度)变化量(Δv)正相关,具体关系大致为:u = 10*Δv - 3 (v 取游戏单位(方块/gt))。
在不使用三叉戟的情况下,玩家用鞘翅飞行能够达到的最大水平速度约为67.776 m/s,即3.3888 bl/gt,以此速度水平撞击方块,受到的伤害应为30.888。以这个速度飞行时,一定不会处在火箭生效的状态,因此撞一次就停下了。
在使用平视火箭的情况下,玩家的水平速度大致为33.695 m/s,即1.68475 bl/gt,在这时撞墙受到的伤害为13.8475。但要注意火箭有重置速度的功能,撞击后还会恢复到较大的速度,因此使用火箭时撞击很可能是连环多次的,最终导致感受动能。在天花板凹凸不平的通道(例如某些服务器里精心装饰的地狱交通)里,这一点尤其危险。
重要结论:
坠落伤害由高度直接决定,上限不可观(至少10万是可以有的);
水平碰撞伤害由速度(动量)决定,上限可观;
由1,2可知,鞘翅滑翔时的主要伤害是坠落,而不是“感受动能”;
但是,在使用火箭时,“感受动能”的风险很大;
最大安全滑翔俯角约为38.6°。