• 程设大作业xjb写——魔方复原


    鸽了那么久总算期中过【爆】去【炸】了。。。该是时候写写大作业了

    【总不能丢给他们不会写的来做吧

    一、三阶魔方的几个基本定义

    ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B

    UD之间的叫E,LR之间的叫S,FB之间的叫M

    这样子棱就可以定义为UF啊UR啊之类的【咦?UR?

    角就是用三个面定义:UFR、URB、DBR【按照逆时针来写三个面

    然后就是各种旋转,对于一个面有三种旋转方式(以U为例):U,U',U2分别表示上面顺时针旋转90°,逆时针旋转90°,旋转180°

    所以各种公式就是一串UDLRFB和'和2组成的一系列xjb转

    二、正式复原

    为了让本宝宝的作业表现的高端大气上档次,找到了个鬼畜做法【喵喵喵?

    叫降群法(Thistlethwaite algorithm)

    前人之述备矣:【五行篇】降群法简易教程,尝试下电脑还原魔方的感觉

    总结一下,就是一共四个STEP:

    1. 棱方向调正 (G0 -> G1)

    2. E层集中,上下面颜色只有两种 (G1 -> G2)

    3. 角块归位,S层集中,M层集中 (G2 -> G3)

    4. XJB转 (G3 -> FINISH!)

    三、计算机方法解决问题

    首先每个棱块和角块都具有位置和方向两个属性

    对于棱块有方向0/1,角块有方向0/1/2【这就是为什么角块要按照逆时针写三个面

    然后对于每个STEP都搜出来从这个群到下一个群的旋转公式即可

    而每次只调整一部分,只需要把这一部分的特征值记录下来,进行搜索即可(因为公式并不长)

    各STEP的特征值:

    1. 棱的方向

    2. 棱的位置(是否在E层)以及角的方向

    3. 棱的位置(是否在S/M层)以及角的位置

    4. 全部信息

    四、对于魔方的旋转

    其实吧。。。不管是什么复原方式,魔方的旋转是最复杂的部分

    还是按照之前的编号方式把棱和角按照1~20编好号

    这样子每次转的时候就知道转了些啥,恩,这十分的trivial

    然后L = L, L2 = LL, L' = LLL这样子只要做一种旋转就行了恩,这也十分trivial

    然后这样子18个步骤就分为了6大类,每一类只要记录下每次棱和角在一次旋转以后的置换即可

    每个棱和角的方向,可能会有改变,进行讨论

    1. 对于棱:FB会改变方向,其他均不改变

    2. 对于角:UD不改变方向,其他的需要讨论,正好每个角在LRFB四个操作中方向一次改变1一次改变2

    恩所以只要把上面的步骤全部完成就好啦!魔方复原get√

  • 相关阅读:
    【有感】向香港雷锋学什么
    After NeuSoft’s Interview
    【SHELL学习】if语句
    《我是一只IT小小鸟》【1】
    MSDN微软社区 大连线下聚会 即将举行
    【毕业设计】修改用户信息
    SQL Connection
    EasyPR中文开源车牌识别系统 开发详解(1)
    EasyPR开发详解(2)车牌定位
    EasyPR开发详解(4)形态学操作、尺寸验证、旋转等操作
  • 原文地址:https://www.cnblogs.com/rausen/p/6073484.html
Copyright © 2020-2023  润新知