魔方的原理是什么?( 三 )


同理 。我们可以将 其它魔方操作 定义为 轮换 的复合 。
注意:为了方便 。我们也可以用 1- 48 的 正整数 。来替代上面 S 中 对小面 的编码 。
T 上的所有 置换函数 。在函数复合下 。组成 置换群 S?? 。但是 。因为 角块的面永远置换不到棱块的面 。所以 G 仅仅是 S?? 的子群 。
用离散的小面来记录魔方的状态过于粗犷 。重新审视魔方 。我们会得到如下结果:
每个立方块都是一个整体 。在任何魔方的操作下 。组成它的小面不会分离;
每个立方块 。有两种状态信息:位置 和 方向;
角块 和 棱块 在 魔法操作下 相互独立 。即 。角块 永远不可能 转到 棱块 上 。反之亦然 。
基于 。以上分析 。我们首先 。分别 对 角块 和 棱块 进行定位(location):
角块:ufl = 1, urf = 2, ubr = 3, ulb = 4; dbl = 5, dlf = 6, dfr = 7, drb = 8;
棱块:ub = 1, ur = 2, uf = 3, ul = 4; bl = 5, br = 6, fr = 7, fl = 8; db = 9, dr = 10, df = 11, dl = 12;

魔方的原理是什么?

文章插图
令 C = {1, 2,3,4,5,6, 7, 8} 。这里包含 所有 角块的位置信息 。可以很容易将 基本操作 对 角块位置的 改变写成轮换形式:
U = (1 2 3 4),
D = (5 8 7 6),
F = (1 6 7 2),
B = (3 8 5 4),
L = (1 4 5 6),
R = (2 7 8 3)
显然 。G 作用在 C 上 是 置换群 S? 的子群 。
同理 。令 E = {1, 2,3,4,5,6, 7, 8, 9, 10, 11, 12} 。基本操作对于 棱块 位置的改变写成轮换形式为:
U = (1 43 2),
D = (9 10 11 12),
F = (3 8 11 7),
B = (1 6 9 5),
L = (4 5 12 8),
R = (2 7 10 6)
同样 。G 作用在 E 上 是 置换群 S?? 的子群 。
然后 。我们分别对 角块 和 棱块 进行定向(orientation):
角块:u/d 为定向面 。xyz = 012;
棱块:u/d/f/b 为定向面 。xy = 01;
魔方的原理是什么?

文章插图
对于保持 定向 信息 。我们只需要定义 。定位位置当前 立方块 的 定向面 对应 的 编号就可以了 。而对于 基本操作 。对 定向的 改变 。我们也只需要 记录 。原始状态下 。经过 基本操作后 。各个 定位位置 。的 定向面 对应 的 编号就可以了 。如果 。原始状态下 。即 。定向面的编号为 0 。经过某操作 。到新位置后 。定向面编号为 n 。则 原来 定向面的编号为 m 。经同样操作 。到新位置后 。定向面编号就是 (n + m) mod k 。对于角块 k = 3 。对于 棱块 k = 2 。0- 不旋转 。1-逆时针旋转 。2-顺时针旋转 。
令 。V = (0, 0, 0, 0, 0, 0, 0, 0)表示 角块的所有定向 。则 基本操作为对角块定向的改变为:
U = (0, 0, 0, 0, 0, 0, 0, 0),
D = (0, 0, 0, 0, 0, 0, 0, 0),
F = (1, 2, 0, 0, 0, 2, 1, 0),
B = (0, 0, 1, 2, 1, 0, 0, 2),
L = (2, 0, 0, 1, 2, 1, 0, 0),
R = (0, 1, 2, 0, 0, 0, 2, 1)
对于每一位来说都是 Z?。总共 8 个 Z? 就是 Z??。但是 考虑 在 到 7 个 角块固定的情况下 。我们无法 单独 旋转 剩下的那个 。因此 G 在 V 上的作用 实际上 是 Z?? 。
令 。W = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)表示 棱块的所有定向 。则 基本操作为对棱块定向的改变为:
U = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
D =(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
F = (0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0),
B = (1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0),
L = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
R =(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
同理 。G 在 W 上的作用 是 Z?11 。
当以上编号混合在一起使用时 。为了区分 。分别用 c、e、v、w 作为 角块定位、棱块定位、角块定向、棱块定向 编号的前缀 。并将编号写成下标 。例如:
F = (c? c? c? c?) (e? e? e?? e?)(v?,v?,v?,v?,v?,v?, v?,v?)(w?, w?, w?, w?, w?, w?, w?, w?, w?, w?, w?, w?)
辅助工具
在进行下一步分析之前 。我们先编写一点 JavaScript 代码 。以帮助我们 。对 G 中的 操作进行复合 。
魔方状态(state)的 格式为:
state:[[角块定位], [棱块定位], [角块定向], 棱块定向]
声明 魔方初始状态 s? 如下:
魔方的原理是什么?

文章插图
魔方操作(operation)的 格式为:
[[[角块轮换], ...], [[棱块轮换], ...], [角块旋转], [棱块旋转]]
基本操作声明如下:
魔方的原理是什么?

文章插图
声明 。在给定状态上执行魔方操作的函数:
魔方的原理是什么?

文章插图
声明 。从给定状态中分析出魔方操作的函数:

推荐阅读