【星穹铁道】[攻略] 罗盘的线性代数解法
2023/05/07963 浏览综合
原帖是大佬发布在NGA的攻略贴,个人在使用过程中受益颇多,申请搬运到taptap供大家使用。不做任何商业用途,如有侵权,我会立即删除本帖。
[攻略] 罗盘的线性代数解法
首先罗盘没有任何难度,纯卖弄学识!
而且不会打公式,所以应该会很难读,见谅。
首先,罗盘指针转动的最小角度是60度,因此将指针的状态按逆时针划分为1-6,6再转一下就是1
把罗盘转动的行为视作状态转移行为,例如指针逆时针转动120度视为状态+2,顺时针转动240度可以视作状态-4,但他与逆时针转动120度等价也可以看做状态+2
可以把罗盘转动求解的过程转换为求线性方程组Ax=b,其中b代表当前状态,x代表三种方式分别需要转几下,A代表转动引起的状态转移矩阵
现在用一个例子来说明怎么求解

假设罗盘状态如上图所示,内圈还差180度,中圈还差60度,外圈还差120度,可以获得当前的状态向量[3 1 2]'
内圈中圈同时转动,内圈逆时针转动180度,中圈顺时针转动60度,所以A的第一列为[3 5 0]'
中圈外圈同时转动,中圈顺时针转动60度,外圈顺时针转动120度,所以A的第二列为[0 5 4]'
内圈外圈同时转动, 内圈逆时针转动180度, 外圈顺时针转动120度 ,所以A的第三列为[3 0 4]'
于是我们得到了如下方程
[3 0 3] [x1]     [3]
[5 5 0] [x2]  = [1]
[0 4 4] [x3]     [2]
但是这样通常无法解得整数[本例也确实不是
注意到状态是模6循环的,也就是6再+1会变成1,因此改变方程
 [x1]                 [3+6*y1]
 [x2]  = A^-1 * [1+6*y2]
 [x3]                 [2+6*y3]
其中y1,y2,y3是任意整数,只需要求得一组能使x1,x2,x3都为整数的y1,y2,y3问题就解决了
本例中
x1=0.35+y1+0.6*y2-0.75*y3
x2=-0.15-y1+0.6*y2+0.75*y3
x3=0.65+y1-0.6*y2+0.75*y3
观察可得当y1=0,y2=-1,y3=1时x1=-1,x2=0,x3=2
负数的话也没关系,+6就行。
因此最后的结果是内圈中圈一起转5下,中圈外圈不一起转,内圈外圈一起转2下就解出来了
好麻烦啊还是穷举吧