Angles/zh

本文是鼠标运动的延续，着重介绍三角函数在 Minecraft 中的工作原理.

玩家的偏航角是一个浮点数，用于跟踪玩家的水平旋转（以度为单位）. 它是无限的.

玩家的朝向是将偏航角限制在 [-180°, 180°]，如 F3 所示.

有效角，或者简单地说，角度是一个整数（从 $0$ 到 $2^{16}-1$ ）.

有效角
Minecraft 的三角函数依赖于有效角，即玩家的偏航角必须转换为一个角度.

这种转换导致角度的不精确：一个有效角跨越 ~$$0.0055°$$.

Sin 与 Cos 源代码（来自MathHelper）： 注意：  给出除以 65536 的（正）余数（$$2^{16}$$）

为了将玩家的偏航转换为弧度（当调用 sin 和 cos 时），游戏会使用这两个公式： 它们的目的是一样的，但对于较大的值，结果可能不同.

在这种情况下，疾跑跳跃会使玩家稍微向一侧移动，这对于创造无转向跳法可能很有用.

半角
和  应该相隔 16384 个单位（90°），但由于浮点不精确，某些值可能会进一步相差 1 个或多个单位，导致与预期计算出现轻微偏差.

半角就是这样的值，可以在连续角的“中间”找到（因此得名）.

半角的存在完全是由于括号内的“+ 16384”.

半角在工具辅助跑酷之外没有太大用处：它们对跳跃距离的影响很小，并且它们几乎无法用于原速下的鼠标移动.

每个半角都有一个相关的乘数，代表其效益.

它对应于从 cos(f) 和 sin(f) 获得的单位向量的范数.

从数学上讲，它应该始终等于 1，但在这种情况下并不成立.


 * “增益”半角的范数大于 1：它们会提高移动速度.
 * “减益”半角的范数小于 1：它们会降低移动速度.

$\left \|\vec{v}\right \|=\sqrt{\cos(f)^{2}+\sin(f)^{2}}$

当与给定的跳跃距离相乘时，它给出其所对应的半角增益后的跳跃距离上限.

有益的半角列表

大半角
2021 年 7 月 27 日，kemytz 发现，在使用 Optifine 的快速运算（一种将有效角数量减少到4096个的功能）时，某些偏航角可以提供更高的速度. 实际上，这并非快速运算所特有的，而且很快就发现了原版的“大半角”.

由于在该范围内可以使用的精度浮点数较少，因此大半角更有效：角度最多可以移动 64 个单位，而不是移动一个单位.

例如，偏航角为 5898195° 时的乘数为 1.003，这与小半角（135.0055° 的乘数为 1.00005）相比是巨大的. 这个半角是目前最有效的存在，并使 2.125bm 4+0.5 之类的跳跃成为可能.

要达到如此高的数值可能需要使用宏或模组，因为手动旋转会耗费大量时间.

通过快速运算，半角被进一步放大，玩家可以在偏航角小于 $$360 \times 2^{19}$$ 运动，而在原版中只能在 $$360 \times 2^{15}$$ 内运动.

例如，偏航角 121000000° 的乘数是 1.09，这是如此荒谬，它使平地连跳五远成为可能. 这个机制不应被视为官方机制，因为它依赖于 Mod，并且在服务器上使用这个漏洞可能是未经许可的（即使是 Optifine）.

新版本的 Optifine 改变了快速运算的效果，消除了大量快速运算半角（自 2019 年 12 月发布的 U L5 版本以来）.

特征
减益半角在 -90° 和 0° 之间很常见，因为负浮点数向上截断，而正浮点数向下截断.

在 0° 和 90° 之间几乎不存在减益半角.

增益半角很少出现在 90° 和 180° 之间.

大半角的形式为 $$360 \times 2^n - \theta$$，其中 $$\theta \in [0,90]$$ 以及 $$n \in \{0, ... ,14\}$$. 它们都为增益直到 $$n \geq 8$$，此时它们既可能是增益又可能是减益.