欢迎光临散文网 会员登陆 & 注册

为什么说Ninjabrain Bot的原理不是简单的两线一点?

2023-07-06 11:31 作者:wcnmm1376  | 我要投稿

要想清楚这个问题, 一个很简单的事情就是先明白所谓"两线一点"的定义. 在数学上, 两线一点的定义就是
"在一个平面中, 两条互不平行的直线能确定唯一的一个点. " 

在1.16.1版本的Minecraft主世界中, F3+C的语法为

/execute in minecraft:overworld run tp @s coord_X coord_Y coord_Z rotation_1 rotation_2

我们只关注坐标(coord_X, coord_Y, coord_Z)和方位角<rotation_1>. 

然而在复制下来的坐标中, rotation_1的精度极限是0.01°, 这意味着什么? 这意味着如果你和要塞连线的方位角的千分位接近5, 那么是不是就一定会有0.005°的误差? 这样的测量还能算是一条直线吗? 所以, 单颗末影之眼的测量范围是两条射线所夹的部分, 对于双眼, 则是如下图所示的范围



我前些天在discord上询问了Ninjabrain关于他的bot的一些问题, 下面是我和他的聊天记录: 

我的聊天记录
Ninjabrain的聊天记录

有人可能会怀疑, 0.01°的精度还不够吗? 所以: 

下面我做了一个测试, 测试如果仅凭F3+C的坐标和方位角rotation_1, 不考虑其他条件, 能否解出要塞坐标: 
根据Ninjabrain及其团队的测试, 玩家和要塞连线的方位角α满足下列正态分布: 

%CE%B1%20%5Csim%20N(rotation_1%2C%20diviation)

在不使用eyezoom的情况下, 标准偏差一般为0.008, 根据正态分布的规则, 位于[μ-3σ, μ+3σ]之间的概率为99.73%, 这里我们就取正负2.5个σ, 也就是

%5Clbrack%20rotation_1%20-0.02%C2%B0%2C%20rotation_1%20%2B0.02%C2%B0%20%5Crbrack

在一次测量中, 我得到了下述的数据 (测试种子: seed: [1475983533634471550], 所测试的要塞位于/execute in minecraft:overworld run tp @s 1348.50 37.00 1028.50 -90.00 0.00, 未使用eyezoom, 测试时扔出两个末影之眼之间的距离为30格, 要塞距离为1700格) 

测试数据

根据这个测试数据以及上述提到的%5Clbrack%20rotation_1%20-0.02%C2%B0%2C%20rotation_1%20%2B0.02%C2%B0%20%5Crbrack, 我在几何画板上进行了模拟, 如下: 

四条线的解析式

看起来只有两条线, 是因为角度0.04°在相交处差别非常小, 我们到要塞的坐标那边就能看得出来差距: 

这个图非常的长, 以至于我必须用两张图才能完全截下

如图所示, 四边形ABCD就是我一开始给的那张图的范围, 也就是说要塞可能落在这个范围内. 我们可以看到点P(1352, 1032) (为什么两个轴的坐标比测试数据都加了4? 因为我忘记把Ninjabrain bot改成显示在8,8了)就是要塞的坐标, 确实位于这个范围内. 但是这个范围有多大呢? 

我们先看左上方的小正方形, 它的边长在坐标系网格下是5, 所以它的面积是25平方格, 在此缩放尺寸下它的面积是3.00cm², 而几何画板显示要塞可能位于的区域是9.93cm², 我们可以通过简单的计算, 得出这个范围占据多少平方格: 

S%20%3D%20%5Cfrac%20%7B9.93%20%5Ctimes%2025%7D%7B3.00%7D%3D82.75%E5%B9%B3%E6%96%B9%E6%A0%BC

你要在82平方格的区域中确定一格要塞? 我觉得这是完全不现实的吧? 而Ninjabrain Bot却能给出100%的置信度, 这说明Ninjabrain Bot的算法完全不是基于两线一点的, 详细的原理可以看上文提到的我和Ninjabrain的聊天记录. 

至于我没有阅读的一大段部分 (论文的第二部分, 算出要塞是如何分布的), 这个要塞分布则是通过一段代码来实现, 这里不做展开, 这和处理玩家数据没有太大的关系. 

有任何疑问欢迎在评论区讨论. 

为什么说Ninjabrain Bot的原理不是简单的两线一点?的评论 (共 条)

分享到微博请遵守国家法律