前言
本文内容包含大量数学与物理公式,需要具备一定的数理基础阅读。
因为一些客观因素博客中的部分公式并不完全,建议下载 PDF 版本(见附件)食用更佳。
实体基本运动公式
一些必要参数及定义
- 速度:$v_H$、$v_Y$,表示实体在水平、垂直上的速度。
- 初始垂直速度:$v_{Y, 1}$,取决于跳跃速度或服务器垂直击退参数。
- 方块滑度系数:$f_S$。
- 移动乘数:$k_M$。
- 效果乘数:$k_E$。
- 速度阈值:$v_{th} = 0.005 \text{ m/tick}$,当实体在某条轴上的速度经衰减后小于该值时,对应轴上的速度归零,仅保留加速度(1.9 及以上版本阈值变为 $0.003 \text{ m/tick}$)。
水平运动递推公式
- 水平地面速度公式:$$v_{H, t} = \underbrace{v_{H, t-1} \times f_{s, t-1} \times 0.91} _ \text{动量保留} + \underbrace{0.1 \times \left( \frac{0.6}{f_{s, t}}\right)^3 \times k_M \times k_E} _ \text{加速度}\tag{1.2.1}$$
- 水平空中速度公式:$$v_{H, t} = \underbrace{v_{H, t-1} \times 0.91} _ \text{动量保留} + \underbrace{0.02 \times k_M} _\text{加速度} \tag{1.2.2}$$
- 水平空中飞行公式:$$v_{H, t} = \underbrace{v_{H, t-1} \times 0.91} _ \text{动量保留} + \underbrace{0.05 \times k_{M-fly}}_\text{加速度} \tag{1.2.3}$$
垂直运动递推公式
- 垂直速度公式:$$v_{Y, t} = \left( v_{Y, t-1} - \mathop{0.08} \limits_\text{重力} \right) \times \mathop{0.98}\limits_\text{阻力} \tag{1.3.1}$$
为了方便表示,后文中设公式 (1.2.1)、公式 (.2.2)、公式 (1.2.3) 中所有动量保留项的系数为 $\alpha$,加速度项为 $\beta$。公式 (1.3.1) 展开后同理。
稳态(渐进)速度推导
经典力学下的运动
$$\frac{dv}{dt} = a - fv \tag{2.1.1}$$
$$v = v_0 e^{-ft} + \frac{a}{f} (1 - e^{-ft})\tag{2.1.2}$$
$$\frac{v}{v_0} = \lim\limits_{t_0 \to 0} (1 - f t_0)^{\frac{t}{t_0}}, a = \tag{2.1.3}$$
其余见 『低版本 pvp 中玩家最优 kb 的点击频率下限分析』 中 『经典力学下的运动』小结,这里不过多阐述。
水平稳态(渐进)速度
假设实体在运动过程中所有状态不变($f_S$ 为常数),原递推式为一阶线性差分方程:$$v_t = \alpha , v_{t-1} + \beta \tag{2.2.1}$$
齐次方程 $v_t^{(h)} = \alpha v_{t-1}^{(h)}$ 的解为 $v_t^{(h)} = C \alpha^t$。由于非齐次项 $\beta$ 为常数,设其特解为 $K$,代入原方程 (2.2.1) 得:$$K = \alpha K + \beta$$
即 $K = \frac{\beta}{1 - \alpha}, \ \alpha \neq 1$,特解为:$$v_t^{(p)} = \frac{\beta}{1 - \alpha}$$
方程 (2.2.1) 的通解为齐次解与特解之和:$$v_t = C \alpha^t + \frac{\beta}{1 - \alpha}$$
当 $t = 0$:$$v_0 = C + \frac{\beta}{1 - \alpha}$$
将 $C = v_0 - \frac{\beta}{1 - \alpha}$ 代入通解得:$$v_t = \left( v_0 - \frac{\beta}{1 - \alpha} \right) \alpha^t + \frac{\beta}{1 - \alpha} = v_0 \alpha^t + \beta \frac{1 - \alpha^t}{1 - \alpha} \tag{2.2.2}$$
由于 $|\alpha| < 1$ 恒成立,该方程收敛。当 $t \to \infty$,稳态速度:$$v_{\infty} = \frac{\beta}{1 - \alpha}$$
代入 $\alpha = 0.91 f_s$ 和 $\beta = 0.1 \left( \frac{0.6}{f_s} \right)^3 k_M k_E$ 得:$$\boxed{v_{\infty} = \frac{0.1 \left( \frac{0.6}{f_s} \right)^3 k_M k_E}{1 - 0.91 f_s}} \tag{2.2.3}$$
水平飞行稳态(渐进)速度
这里提供另一种的推导方法。
已知每刻(tick)的时间长度 $\Delta t = 0.05s$,对于连续的时间 $t$ 与刻数 $n$:$$t = n \Delta t, \ v(t) \approx v_n$$
将原递推方程移项得到:$$v_n - v_{n - 1} = (\alpha - 1) v_{n - 1} + \beta$$
同时除以 $\Delta t$:$$\frac{v_n - v_{n - 1}}{\Delta t} = \frac{(\alpha - 1) v_{n - 1}}{\Delta t} + \frac{\beta}{\Delta t}$$
令:$$f = \frac{1 - \alpha}{\Delta t}, \ a = \frac{\beta}{\Delta t}$$
得到微分方程 (2.1.2),其积分因子 $\mu(t) = e^{ft}$。两边同时乘以 $\mu(t)$:
$$e^{ft} \frac{dv}{dt} + f e^{ft} v = a e^{ft}$$
$$\frac{d}{dt} \left( e^{ft} v \right) = a e^{ft}$$
对 $t$ 积分:$$e^{ft} v = \int a e^{ft} , dt = \frac{a}{f} e^{ft} + C$$
两边除以 $e^{ft}$,得到:$$v = \frac{a}{f} + C e^{-ft}$$
初始时 $v(0) = v_0$,则将常数 $C = v_0 - \frac{a}{f}$ 代入通解得到公式 (2.1.2)。当 $t \to \infty$,稳态速度:$$v_{\infty} = \frac{a}{f} = \frac{\beta}{1 - \alpha}$$
代入 $\alpha = 0.91$ 和 $\beta = 0.05 k_{M-fly}$ 得:$$\boxed{v_{\infty} = \frac{0.05 k_{M-fly}}{0.09}} \tag{2.2.4}$$
部分状态下的稳态速度
| 状态 | $k_M$ | $k_{M-fly}$ | $k_E$ | $f_S$ | $v_{\infty} \ (\text{m/s})$ |
|---|---|---|---|---|---|
| 地面正常移动 | $1.0 \times 0.98$ | / | $1.0 \times 1.0$ | $0.6$ | $4.317$ |
| 地面正常疾跑 | $1.3 \times 0.98$ | / | $1.0 \times 1.0$ | $0.6$ | $5.612$ |
| 地面斜 $45°$ 疾跑 | $1.3 \times 1.0$ | / | $1.0 \times 1.0$ | $0.6$ | $5.727$ |
| 地面正常疾跑(速度 II) | $1.3 \times 0.98$ | / | $1.4 \times 1.0$ | $0.6$ | $7.857$ |
| 地面斜 $45°$ 疾跑(速度 II) | $1.3 \times 1.0$ | / | $1.4 \times 1.0$ | $0.6$ | $8.018$ |
| 空中正常移动飞行 | / | $1$ | / | / | $10.889$ |
| 空中正常疾跑飞行 | / | $2$ | / | / | $21.778$ |
垂直稳态(渐进)速度
自由落体终端速度
前文的推导过程已经很详细了,因此这部分只给出结论。
根据公式 (1.3.1) 得到终端速度:$$\boxed{v_{\infty} = -3.920 \text{ m/tick} = -78.400 \text{ m/s}}\tag{2.4.1}$$
位移相关公式推导
单一方向位移与时间关系推导
位移 $s(t)$ 为前 $t$ 个速度之和:$$s(t) = \sum_{i=0}^{t-1} v_i$$
根据位移与速度关系式 (2.2.2),代入 $v_i$:$$s(t) = \sum_{i = 0}^{t - 1} \left( \alpha^i v_0 + \beta \frac{1 - \alpha^i}{1 - \alpha} \right) = v_0 \sum_{i = 0}^{t - 1} \alpha^i + \frac{\beta}{1 - \alpha} \sum_{i = 0}^{t-1} (1 - \alpha^i)$$
分别计算两个求和:
$$\sum_{i = 0}^{t-1} \alpha^i = \frac{1 - \alpha^t}{1 - \alpha}$$
$$\sum_{i = 0}^{t - 1} (1 - \alpha^i) =\sum_{i = 0}^{t - 1} 1 - \sum_{i = 0}^{t - 1} \alpha^i = t - \frac{1 - \alpha^t}{1 - \alpha}$$
即:$$s(t) = v_0 \frac{1 - \alpha^t}{1 - \alpha} + \frac{\beta}{1 - \alpha} \left( t - \frac{1 - \alpha^t}{1 - \alpha} \right)$$
整理并化简:$$\boxed{s(t) = \left( \frac{v_0}{1 - \alpha} - \frac{\beta}{(1 - \alpha)^2} \right) (1 - \alpha^t) + \frac{\beta}{1 - \alpha} t}\tag{3.1.1}$$
跳跃过程中水平与垂直位移关系函数推导
疾跑跳跃时水平速度会增加 0.2,但在这里不讨论初速度的问题。
将公式 (1.3.1) 中对应的 $\alpha$ 和 $\beta$ 代入公式 (3.1.1) 中:$$y(t) = \left( \frac{v_0}{1 - 0.98} - \frac{0.0784}{(1 - 0.98) ^ 2}\right) (1 - 0.98^t) + \frac{0.0784}{1 - 0.98} t$$
化简后得到:$$y(t) = \left( \frac{v_0}{0.98} + 4 \right) 0.98^t - 3.92$$
令 $K = \frac{v_0}{0.98} + 4,\ i = 0.98^t$:
$$y = K i - 3.92$$
则:$$i = \frac{y + 3.92}{K}$$
$$t = \log_{0.98} i = \frac{\ln i}{\ln 0.98}$$
若公式 (3.1.1) 表示水平移动的速度与时间关系,令:$$\gamma =\frac{v_0}{1 - \alpha} - \frac{\beta}{(1 - \alpha)^2},\ \delta = \frac{\beta}{1 - \alpha}$$
则:$$x(t) = \gamma (1 - \alpha^t) + \delta t \tag{3.2.1}$$
将 $\alpha^t$ 用 $i$ 表示:$$\alpha^t = e^{t \ln \alpha} = e^{\frac{\ln i \ln \alpha}{\ln 0.98}} = i^{\frac{\ln \alpha}{\ln 0.98}}$$
将 $\alpha^t$ 代入公式 (3.2.1) 得:$$x = \gamma (1 - i^{\frac{\ln \alpha}{\ln 0.98}}) + \delta \frac{\ln i}{\ln 0.98}$$
再代入 $i$:$$x = \gamma\left( 1 - \left( \frac{y + 3.92}{K} \right)^{\frac{\ln \alpha}{\ln 0.98}}\right) + \delta \frac{\ln \left(\frac{y + 3.92}{K} \right)}{\ln 0.98} \tag{3.2.2}$$
将 $\gamma = \frac{v_0}{1 - \alpha} - \frac{\beta}{(1 - \alpha)^2},\ \delta = \frac{\beta}{1 - \alpha}, \ \alpha = 0.91, \ \beta = 0.02 k_M, \ K = \frac{v_0}{0.98} + 4 $ 代入公式 (3.2.2) 得:$$x = \left( \frac{v_0}{0.09} - \frac{0.02 k_M}{0.0081} \right) \left[ 1 - \left( \frac{y + 3.92}{\frac{v_0}{0.98} + 4}\right) ^ {\frac{\ln 0.91}{\ln 0.98}} \right] + \frac{0.02 k_M}{0.09 \ln 0.98} \ln \left( \frac{y + 3.92}{\frac{v_0}{0.98} + 4} \right) $$
再略微化简一下:$$\boxed{x = \frac{100}{81}(9v_0 - 2k_M) \left[ 1 - 0.91 \left( \frac{y + 3.92}{v_0 + 3.92} \right)^ {\frac{\ln 0.91}{\ln 0.98}} \right] + \frac{2k_M}{9} \left( 1 + \log_{0.98} \left( \frac{y + 3.92}{v_0 + 3.92} \right) \right) } \tag{3.2.3}$$
附件
更新日志
25.12.14 $\LaTeX$ 写完 PDF 附件
25.12.21 抽空复制粘贴稍微改了一下文章同步到博客
持续更新