实体运动·公式推导

0 发布于 2026-10-10, 22:18 No.8
预计阅读约 15.2 分钟

本帖转载整理自 《Minecraft 实体运动研究与应用 2025》,作者 lovexyn0827,供服内玩家参考。


书名:《Minecraft 实体运动研究与应用 2025》

作者:lovexyn0827

网址:https://lovexyn0827.space/mcdocs/docs/


实体自由运动相关公式推导

实体自由运动相关公式推导

符号定义及公式推导

首先,再次强调一下那个很让人迷惑的事实,Motion不是速度,至少不完全是。
同一维度中,对于任意有效实体,定义如下:
该实体的第n gt(下文未特殊说明时n为正整数)自该实体第n次更新开始时开始,第n+1次更新即将开始而未开
始时(如果期间实体被移除,则为该实体被移除前开始的最后一次运算结束时)结束。
在该实体的第1 gt即将开始而未开始时,实体在x、y、z轴上的坐标分别为
、
、
,在x、y、z轴的上
Motion分别为
、
、
。一游戏刻长度
在该实体的第n gt结束时,实体在x、y、z轴上的坐标与
、
、
的差分别为
、
、
,在x、y、z轴的上
Motion分别为
、
、
。
在该实体的的第n gt内,实体在x、y、z轴上的位移分别为
其值与
的比值分别为该实体在其第n gt中在x、y、z轴上的平均速度。
该实体每gt会受到加速度及阻力作用,当各轴上加速度及阻力作用都视为每gt仅进行一次且加速度和阻力系数均
不变时,实体在x、y、z轴上的Motion在加速度作用后的值与作用前的值的差值与
的比值(加速度)分别为
、
、
,实体在x、y、z轴上的的Motion在阻力作用后的值与作用前的值的比值(速度乘数)分别为
、
、
。
以上定义中各量在无需或无法指定具体坐标轴时用于指定坐标轴的角标可省略,位移符号中不是角标但用于指定
坐标轴的字符的以d替换。即
、
、
统一记作
,
、
、
统一记作
,
、
、
统一记作
,
、
、
统一记作
,
、
、
统一记作,
、
、
统一记作。
为实现速度乘数与wiki中阻力系数的转换,有
无论何时。
以MDA型实体为例:
对任意自然数
,有
令
,则可以得出
因为
Minecraft实体运动相关研究与应用20250119
No. 16 / 93

所以
令式(3.1.12)中
,
,代入式(3.1.10)中,得
由运算过程可知
将式(3.1.13)代入其中,有
易知
将式(3.1.15)带入其中,有
令式(3.1.12)中
,
,并将其代入式(3.1.17)中,有
解得
令式(3.1.15)中
,解得
可以证明,将求得下取整[4](取不大于​的最大整数),代入式(3.1.18)中,可求得运动折返点(若有)。若
直接将上式结果代入(3.1.18)当中,也可以给出运动折返点的一个近似值,误差通常不会太大:
令
,则有
(0<k<1)
则可得恒定加速度与阻力共同作用下
的最终稳定在
若此时
,位移
最终趋向于
Minecraft实体运动相关研究与应用20250119
No. 17 / 93

此时
的绝对值亦取得最大值。
若
而且
则有
易知实体第gt中位移俯仰角正切值
将式(3.1.25)、(3.1.26)、(3.1.27)代入式(3.1.31),得
由式(3.1.28)得
将式(3.1.33)与式(3.1.30)相乘,得
即运动轨迹始终在同一垂直
平面的一平面上;
由式(3.1.28)、(3.1.30)分别解得
分别代入式(3.1.29)中得
Minecraft实体运动相关研究与应用20250119
No. 18 / 93

可以证明,式(3.1.37)对应曲面与平面θ的交线=式(3.1.38)对应曲面与平面θ的交线=式(3.1.37)对应曲面与式
(3.1.38)对应曲面的交线,且运动轨迹点全部在该曲线上
设初速度仰俯仰角为,偏航角为,大小为
,则各轴分量
分别代入式(3.1.28)、(3.1.29)、(3.1.30)中,有
下面认为
其中
是合初始加速度(如爆炸推进加速度),
是加速前的y轴Motion,由此可得
可以证明
(3.1.42)、(3.1.44)两边平方并相加得
因为加速前认为
加速过程后
由此可得
即
代入开始处的方程有
Minecraft实体运动相关研究与应用20250119
No. 19 / 93

类别
公式
类别
公式
MDA
AMD
DMA
ADM
DAM
M
MAD
N
整理可得(3.1.47)
代入式(3.1.46)并解得
对所有有效实体,式(3.1.12)、(3.1.16)、(3.1.31)通用;若式(3.1.23)和(3.1.24)成立 (3.1.34) 、(3.1.39) 、(3.1.40)
、(3.1.41)、(3.1.45)式也通用。
对于DA型实体,式(3.1.13)通用
对于DF型实体,有
对于M(速度不变,仅移动),N(无法移动)型实体,有
所有其它运动形式对应的公式可由式(3.1.13),(3.1.49)或(3.1.50)与下表中各式结合推导出。
表2.1运动形式对应tick末位移与tick末Motion关系式
个人认为,此处式(3.1.13)、式(3.1.16)的推导大概就是一个数列求和题,或者说就是初中的证明规律的那种题,
后面的推导可以说很无脑,硬解就好了,有时候代入消元还是挺管用的。
当然也可以通过构造等比数列
推导(3.1.16)式,过程更清晰且严谨。
最后需要说明,完全准确的实体运动公式可不是这样就能推出来的,因为存在不可避免的浮点误差,但是这套公
式已经足够在几乎所有情况下使用了。
公式的直接及拓展应用

在上一节给出关于MDA实体的31个等式中,只有9套是最常用的:
(3.1.13)在某一刻末Motion和加速度已知的情况下,求任意刻实体运算结束时的Motion。这在一些TNT炮设计中
选择TNT数量的过程中是比较有用的,因为这个Motion直接参与了射出的初速的决定。
(3.1.15)在某一刻末Motion和加速度已知的情况下,求任意刻内的平均速度,比较重要。
(3.1.18)在某一刻末Motion和加速度已知的情况下,求任意刻末的位移,重要性可想而知。
(3.1.19)在某一刻末位移、加速度和运动时间已知的情况下求出初速度,重要性可想而知。
(3.1.20)在某一刻末Motion和加速度已知的情况下,求实体的折返时间,进而求出折返点(如最高点,向流体上
游抛出的物品的折返点等)。
(3.1.20.1)给出实体运动的折返点的近似值,以及折返点位置与速度的大致关系。
Minecraft实体运动相关研究与应用20250119
No. 20 / 93

(3.1.21)在时间不受限的情况下求出实体的理论最大速度,可以用于稳定的或周期性的加速过程中(如重力,行
走,划船等)实体最终速度的估计,非常重要。
(3.1.22)在时间不受限的情况下求出实体的理论最大位移。
(3.1.32)求出实体的合速度俯仰角,但实际应用不多,有时可用于碰撞判定相关计算
(3.1.34)、(3.1.37)、(3.1.38)给出了实体在空中平滑化的运动路径的解析式,可用于快速模拟实体运动轨迹,但
实际应用不多,推这个主要就是想知道实体运动轨迹的解析式究竟是什么。图3.2.1中可以看出,运动轨迹在开
始时接近为倾斜直线,而后发生较大转折,最后无限趋近于水平初速决定的一个竖直线。
图3.2.1 5m/gt初速37度斜向正东发射的TNT运动轨迹(平滑化)
(3.1.48)一个"万能方程",可以快捷地求出某种瞬时加速装置(如TNT炮)的最远落地位移等数据。
直接应用别的估计都好说,这里就只谈一下n的确定。n说简单了就是从自己选定的一个时间点(多数为实体创
建或开始自由运动时)以来经过的刻数,或者说就是实体开始的运算周期数。但是,因为实体的运算过程问题,
在计算位移时有时n会有1的偏差。例如,TNT实体的爆炸是在位置更新(移动)后才进行的,TNT的初始引信时
间为80gt,在引信时间为0时尝试爆炸会成功,从图中很容易想出它从创建到爆炸计算了80周期的运动,所以要
想求出TNT的爆炸点可以选取n为80;但是,如果是想知道一个末影珍珠在某一时刻触发了哪个拌线钩则需要将
经过的刻数减1作为n,因为它检查方块网格碰撞(触发绊线)是在位置更新前就进行了,此时它移动的次数会
比它开始的运算周期数少1。这一类问题较复杂,对每种实体详细的说明在这里就显得太多余了,不过第七章中
的介绍应该会解决多数常见的此类问题。
另外,如果可以保证实体的运动状态没有改变且实体一直存在,3.1节公式中n的值可以取任意整数,而不局限于
正整数。非整数值的n一般是没有意义的。
Minecraft实体运动相关研究与应用20250119
No. 21 / 93

图3.2.1 5m/gt初速37度斜向正东发射的TNT运动轨迹(平滑化)

图3.2.1 5m/gt初速37度斜向正东发射的TNT运动轨迹(平滑化)

图3.2.2 TNT和末影珍珠的运算流程简图
前面说的MDA、AMD等由三个步骤组成的运动只是理想情况,一般只适用于每gt只考虑至多一次加速、至多一
次阻力作用和至多一次移动的情况(尽管已经满足大部分需求了),很多时候,特别是在计算玩家运算的时候经
常会有实体在同一gt多次受到加速度、阻力甚至可能有多次移动的情况。一个典型的例子就是逆水行舟,根据源
码,可以得到其在水中时水平方向上运动运算流程如下:
(1) 受到水流推动
(2) 受到大小为
的流体阻力,即k值为0.9
(3) 受到沿视线的水平投影方向0.04或0.005m/
的动力
(4) 移动
也就是说,在它的运算过程中出现了两次加速,不能直接套用公式。
若要解决这个问题,我们不妨暂时忽略移动这一步骤,先将其下一刻的水平某轴上Motion用一个式子表示出
来,其中
为流体加速度在该轴上的分量,
为动力加速度在该轴上的分量,k为步骤三后与步骤三前该轴上
Motion的比值,
、
分别为原Motion与下一刻该轴上的Motion:
现在下一刻的Motion已经被表示成一个关于
的一次代数式,可以发现这与前面公式推导时DA(先阻力后加
速)型实体的相似。所以,我们将式
作为a,k作为k带入DA型式的Motion公式,也就是式(3.1.13)
中,有
易知这里
这与DAM和ADM型实体相同。因为上面的推导过程中我们假定
是由
先通过阻力作用,再经过加速得到的
(也就是先乘以k,再加上
),所以这里我们选择DAM型实体,此后余下的公式也可以类似地代入使用。
有时候,多个加速度或阻力都是连在一起的(中间有移动过程时也认为它们是连在一起的),这时我们甚至可以
不用求
的表达式,直接用加法合并加速度,用乘法合并阻力的值就可以了。例如,某个实体每gt运算顺序是
,这时可以将
过程中的加速度相加,将
中速度乘数(k值)相乘分别
得到和。可以发现这个实体的运动过程在化简后实际上就是MAD,将求得和带入对应公式中即可。
Minecraft实体运动相关研究与应用20250119
No. 22 / 93

图3.2.2 TNT和末影珍珠的运算流程简图

图3.2.2 TNT和末影珍珠的运算流程简图

实体的移动过程可能在多个加速或阻力作用过程中间,可能不能直接带入任何与位移相关的现有公式,这时就需
要对现有公式进行变形或直接推出一套新公式才能代入使用。再举一例,某实体的运动运算过程为
,我们想要从某个初速度求得任意时刻的位移,也就是要推导出(3.1.18)式的对应版本。利用
前面的方法我们可以很轻松的得到这种实体的加速度和阻力,以及
此时完全可以推导出对应公式。
有些时候阻力和加速度作用的周期并不一定是1gt,如计算玩家向正前方跑跳时的平均水平速度时周期是玩家从
跳起到再次落地的时间,此时可以对n的取值除以周期并向上取整代入导出的公式以求得周期末的数据,借此求
得具体时刻的数据。不过此时计算位移的意义已经不大,通常还是实验更有效。但如果是希望求解某个受到相对
于时间有周期性的加速度和阻力系数影响的实体的最终速度(平均的或是稳定后周期内的具体变化情况),可以
假设一个初始Motion为
并求出一个周期后的Motion关于
的表达式
,令
,解得
即为
运动稳定后的某个周期的初始Motion,进而可以求得运动稳定后的任意周期内的实体速度变化情况。
,
还是开头那个例子,先假设一个周期从玩家即将跳起时开始,到玩家第二次即将跳起时结束,长度为
。除
和初始水平Motion
外,还有下列几个量影响周期末水平Motion:

  1. 玩家在空中的加速度
    ,玩家疾跑时为0.026
    与前向加速的系数(一般为0.98)的乘积
  2. 玩家在地面的加速度
    ,玩家疾跑时数值为玩家的generic_movement_speed属性值与前向加速度系数的
    乘积加0.2
  3. 玩家在空中的速度乘数
    ,固定为0.91
  4. 玩家在地面的速度乘数
    ,等于判定所得滑度与0.91的乘积
    易知周期内玩家在空中的运动时长为
    ,地面上移动时长为1gt,结合玩家的运动运算顺序可以导出周
    期末水平Motion:
    令
    ,解得
    接下来,可以得出玩家在周期内的水平Motion变化情况。
    可以发现,
    似乎是一个有特殊意义的值。实际上,在一些实体运动的过程中,
    等于原来的一半的
    意义还是比较丰富的(不止这些):
    (1) 在加速度和阻力恒定的从无初速开始的加速运动中,这时Motion约是最大Motion的一半,合加速度约是最
    大合加速度的一半,由实际位移与相同时间以最大速度运动的位移之差是这个差值的最大值的一半。
    (2) 在没有加速度但有初速且阻力固定的运动中,这时阻力加速度约是最大阻力加速度的一半,移动的位移约是
    最大位移的一半,Motion约是初始Motion的一半。
    不敢说这个的实际用途有多大,但这确实有助于我们理解这些公式。
    Minecraft实体运动相关研究与应用20250119
    No. 23 / 93

喜欢这篇内容?点赞支持作者,获得更多创作动力

评论 (0)

还没有评论,来抢沙发吧~

请登录后发表评论