zoukankan      html  css  js  c++  java
  • 程设大作业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√

  • 相关阅读:
    Redis&PHP的使用安装-windows版
    【JAVA】使用Eclipse依赖生成jar包时,避免最外层同时生成资源文件的配置。
    【ActiveMQ】重写监听
    【ActiveMQ】设置自动重连
    【ActiveMQ】持久化消息队列的三种方式
    【Spring】手动获取spring容器对象时,报no qualifying bean of type is defined
    【监控】使用probe对tomcat服务进行监控
    【前端】使用weinre对手机、微信浏览器页面调试
    【前端】一句命令快速合并压缩 JS、CSS
    【前端】CSS雪碧
  • 原文地址:https://www.cnblogs.com/rausen/p/6073484.html
Copyright © 2011-2022 走看看