婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python實現三階魔方還原的示例代碼

python實現三階魔方還原的示例代碼

熱門標簽:荊州云電銷機器人供應商 悟空智電銷機器人6 幫人做地圖標注收費算詐騙嗎 外呼不封號系統 遼寧400電話辦理多少錢 溫州旅游地圖標注 江蘇房產電銷機器人廠家 電信營業廳400電話申請 蘇州電銷機器人十大排行榜

思路

復原魔方困難問題的分解:

​ 1、用合適的數據結構表示出三階魔方的六個面以及每一面的顏色

​ 2、每一次不同旋轉操作的實現

​ 3、復原時如何判斷當前魔方應該使用哪一種公式

本次實驗實現了前兩個操作,具體思路是:

用numpy庫中的矩陣將六個面分別表示出來,按上下左右前后的順序放入列表中。再依據流行公式里的方法編寫對每一個面進行旋轉操作的函數,調用函數實現魔方的旋轉。最后輸入指令可得到旋轉之后的魔方,以及執行逆序指令后驗證魔方還原。

預備知識

矩陣:使用numpy庫中的矩陣結構

函數說明:

U: 上面順時針旋轉 90°

D: 底面順時針旋轉 90°

L: 左面順時針旋轉 90°

R: 右面順時針旋轉 90°

F: 正面順時針旋轉 90°

B: 背面順時針旋轉 90°

**注:**字母前加上下劃線 ‘_' 表示逆時針

代碼詳解

本次實驗將【上、下、左、右、前、后】六個面用數字【0、1、2、3、4、5】表示原本每個面的顏色,并依次存入列表faces【】里(即:faces[0]中存放的是最上面的數字全為0的三階矩陣)

注:魔方視角始終固定,即在整個過程中正(左…)面始終是正(左…)面

# 創建六個面,放在faces列表里,順序為上(0),下(1),左(2),右(3),前(4),后(5)
faces = [np.zeros((3, 3))]

for i in range(1, 6):
    faces.append(np.ones((3, 3)) + faces[i - 1])

每一個面的 順時針逆時針 旋轉由函數 clockwise()antiClockwise() 實現

t = np.array([[0, 0, 1],
              [0, 1, 0],
              [1, 0, 0]])

# 該面順時針旋轉 90 度
def clockwise(face):
    face = face.transpose().dot(t)
    return face

# 該面逆時針旋轉 90 度
def antiClockwise(face):
    face = face.dot(t).transpose()
    return face

A.transpose() 方法是實現 A 矩陣的轉置

A.dot(B) 方法是實現 A乘以矩陣B

通過計算,上述方法可以實現矩陣順時針或者逆時針旋轉的效果

在這里以左面的順時針旋轉 90°為例,其它旋轉方式可以類比

def L(FACES):
    FACES[2] = clockwise(FACES[2])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = clockwise(FACES_new[4]), clockwise(FACES_new[1]), antiClockwise(FACES_new[5]), clockwise(FACES_new[0])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    e[0], f[0], g[0], h[0] = d[0], a[0], b[0], c[0]
    FACES[4], FACES[1], FACES[5], FACES[0] = antiClockwise(e), antiClockwise(f), clockwise(g), antiClockwise(h)

1、直接調用函數將左面(第2面)順時針旋轉 90°

FACES[2] = clockwise(FACES[2])

2、這里采用深度復制,使用 cp.deepcopy() 的方法,避免直接使用等號 ‘=' 導致不同的變量指向同一個值。這時,【e、f、g、h】和【a、b、c、d】代表魔方的

【正面、底面順時針旋轉90°、背面逆時針旋轉90°、上面順時針旋轉90°】

a, b, c, d = clockwise(FACES_new[4]), clockwise(FACES_new[1]), antiClockwise(FACES_new[5]), clockwise(FACES_new[0])

旋轉的目的是:

在左面旋轉的過程中,左面會影響到其它四個面,但對其它四個面的影響是不同的。例如正面、底面和上面被影響的是第一列,而背面被影響的是第三列。我們為了使各面統一起來,方便數值的改變,我們選擇將正、底、上面順時針旋轉90°,將背面逆時針旋轉90°。這時,我們只需按順序交換每一面的第一行,最后再逆時針或順時針轉回來即可。

3、按順序交換:正面第一行傳遞到底面第一行

​ 上面第一行傳遞到正面第一行

​ 背面第一行傳遞到上面第一行

​ 底面第一行傳遞到背面第一行

e[0], f[0], g[0], h[0] = d[0], a[0], b[0], c[0]

最后再依次根據上述操作逆旋轉回去:

FACES[4], FACES[1], FACES[5], FACES[0] = antiClockwise(e), antiClockwise(f), clockwise(g), antiClockwise(h)

代碼

import numpy as np
import copy as cp

# 創建六個面,放在faces列表里,順序為上(0),下(1),左(2),右(3),前(4),后(5)
faces = [np.zeros((3, 3))]

for i in range(1, 6):
    faces.append(np.ones((3, 3)) + faces[i - 1])

t = np.array([[0, 0, 1],
              [0, 1, 0],
              [1, 0, 0]])

# 該面順時針旋轉 90 度
def clockwise(face):
    face = face.transpose().dot(t)
    return face

# 該面逆時針旋轉 90 度
def antiClockwise(face):
    face = face.dot(t).transpose()
    return face


def U(FACES):
    FACES[0] = clockwise(FACES[0])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]
    FACES[4][0], FACES[2][0], FACES[5][0], FACES[3][0] = d[0], a[0], b[0], c[0]


def _U(FACES):
    FACES[0] = antiClockwise(FACES[0])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]
    FACES[4][0], FACES[2][0], FACES[5][0], FACES[3][0] = b[0], c[0], d[0], a[0]


def U2(FACES):
    for i in range(2):
        U(FACES)
    '''
    FACES[0] = clockwise(clockwise(FACES[0]))
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]
    FACES[4][0], FACES[2][0], FACES[5][0], FACES[3][0] = c[0], d[0], a[0], b[0]
    '''


def D(FACES):
    FACES[1] = clockwise(FACES[1])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]
    FACES[4][2], FACES[2][2], FACES[5][2], FACES[3][2] = b[2], c[2], d[2], a[2]


def _D(FACES):
    FACES[1] = antiClockwise(FACES[1])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]
    FACES[4][2], FACES[2][2], FACES[5][2], FACES[3][2] = d[2], a[2], b[2], c[2]


def D2(FACES):
    for i in range(2):
        D(FACES)
    '''
    FACES[1] = clockwise(clockwise(FACES[1]))
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]
    FACES[4][2], FACES[2][2], FACES[5][2], FACES[3][2] = c[2], d[2], a[2], b[2]
    '''


def L(FACES):
    FACES[2] = clockwise(FACES[2])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = clockwise(FACES_new[4]), clockwise(FACES_new[1]), antiClockwise(FACES_new[5]), clockwise(FACES_new[0])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    e[0], f[0], g[0], h[0] = d[0], a[0], b[0], c[0]
    FACES[4], FACES[1], FACES[5], FACES[0] = antiClockwise(e), antiClockwise(f), clockwise(g), antiClockwise(h)


def _L(FACES):
    FACES[2] = antiClockwise(FACES[2])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = clockwise(FACES_new[4]), clockwise(FACES_new[1]), antiClockwise(FACES_new[5]), clockwise(FACES_new[0])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    e[0], f[0], g[0], h[0] = b[0], c[0], d[0], a[0]
    FACES[4], FACES[1], FACES[5], FACES[0] = antiClockwise(e), antiClockwise(f), clockwise(g), antiClockwise(h)


def L2(FACES):
    for i in range(2):
        L(FACES)


# 上(0),下(1),左(2),右(3),前(4),后(5)
def R(FACES):
    FACES[3] = clockwise(FACES[3])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = antiClockwise(FACES_new[4]), antiClockwise(FACES_new[1]), clockwise(FACES_new[5]), antiClockwise(
        FACES_new[0])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    g[0], f[0], e[0], h[0] = d[0], c[0], b[0], a[0]
    FACES[4], FACES[1], FACES[5], FACES[0] = clockwise(e), clockwise(f), antiClockwise(g), clockwise(h)


def _R(FACES):
    FACES[3] = antiClockwise(FACES[3])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = antiClockwise(FACES_new[4]), antiClockwise(FACES_new[1]), clockwise(FACES_new[5]), antiClockwise(
        FACES_new[0])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    f[0], g[0], h[0], e[0] = a[0], b[0], c[0], d[0]
    FACES[4], FACES[1], FACES[5], FACES[0] = clockwise(e), clockwise(f), antiClockwise(g), clockwise(h)


def R2(FACES):
    for i in range(2):
        R(FACES)


def F(FACES):
    FACES[4] = clockwise(FACES[4])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = clockwise(clockwise(FACES_new[0])), FACES_new[1], antiClockwise(FACES_new[2]), clockwise(FACES_new[3])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    e[0], g[0], f[0], h[0] = c[0], b[0], d[0], a[0]
    FACES[0], FACES[1], FACES[2], FACES[3] = clockwise(clockwise(e)), f, clockwise(g), antiClockwise(h)


def _F(FACES):
    FACES[4] = antiClockwise(FACES[4])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = clockwise(clockwise(FACES_new[0])), FACES_new[1], antiClockwise(FACES_new[2]), clockwise(FACES_new[3])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    g[0], f[0], h[0], e[0] = a[0], c[0], b[0], d[0]
    FACES[0], FACES[1], FACES[2], FACES[3] = clockwise(clockwise(e)), f, clockwise(g), antiClockwise(h)


def F2(FACES):
    for _ in range(2):
        F(FACES)


# 上(0),下(1),左(2),右(3),前(4),后(5)
def B(FACES):
    FACES[5] = clockwise(FACES[5])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = FACES_new[0], clockwise(clockwise(FACES_new[1])), clockwise(FACES_new[2]), antiClockwise(FACES_new[3])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    g[0], f[0], h[0], e[0] = a[0], c[0], b[0], d[0]
    FACES[0], FACES[1], FACES[2], FACES[3] = e, clockwise(clockwise(f)), antiClockwise(g), clockwise(h)


def _B(FACES):
    FACES[5] = antiClockwise(FACES[5])
    FACES_new = cp.deepcopy(FACES)
    a, b, c, d = FACES_new[0], clockwise(clockwise(FACES_new[1])), clockwise(FACES_new[2]), antiClockwise(FACES_new[3])
    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)
    e[0], g[0], f[0], h[0] = c[0], b[0], d[0], a[0]
    FACES[0], FACES[1], FACES[2], FACES[3] = e, clockwise(clockwise(f)), antiClockwise(g), clockwise(h)


def B2(FACES):
    for i in range(2):
        B(FACES)


'''
                          |************|
                          |*U1**U2**U3*|
                          |************|
                          |*U4**U5**U6*|
                          |************|
                          |*U7**U8**U9*|
                          |************|
              ************|************|************|************|
              *L1**L2**L3*|*F1**F2**F3*|*R1**R2**R3*|*B1**B2**B3*|
              ************|************|************|************|
              *L4**L5**L6*|*F4**F5**F6*|*R4**R5**R6*|*B4**B5**B6*|
              ************|************|************|************|
              *L7**L8**L9*|*F7**F8**F9*|*R7**R8**R9*|*B7**B8**B9*|
              ************|************|************|************|
                          |************|
                          |*D1**D2**D3*|
                          |************|
                          |*D4**D5**D6*|
                          |************|
                          |*D7**D8**D9*|
                          |************|
'''


def toString(FACES):
    print()
    for i in range(3):
        print("     ", int(FACES[0][i][0]), int(FACES[0][i][1]), int(FACES[0][i][2]))
    for i in range(3):
        print(int(FACES[2][i][0]), int(FACES[2][i][1]), int(FACES[2][i][2]), end=" ")
        print(int(FACES[4][i][0]), int(FACES[4][i][1]), int(FACES[4][i][2]), end=" ")
        print(int(FACES[3][i][0]), int(FACES[3][i][1]), int(FACES[3][i][2]), end=" ")
        print(int(FACES[5][i][0]), int(FACES[5][i][1]), int(FACES[5][i][2]))
    for i in range(3):
        print("     ", int(FACES[1][i][0]), int(FACES[1][i][1]), int(FACES[1][i][2]))
    print()


def moves(FACES, lst):
    for x in lst:
        if x == 'U':
            U(faces)
        elif x == 'u':
            _U(faces)
        elif x == 'D':
            D(faces)
        elif x == 'd':
            _D(faces)
        elif x == 'L':
            L(faces)
        elif x == 'l':
            _L(faces)
        elif x == 'R':
            R(faces)
        elif x == 'r':
            _R(faces)
        elif x == 'F':
            F(faces)
        elif x == 'f':
            _F(faces)
        elif x == 'B':
            B(faces)
        elif x == 'b':
            _B(faces)


lst = input("請輸入步驟:")
moves(faces, lst)
print("執行后的魔方為")
toString(faces)
reverse = ''.join(map(chr, map(lambda x: ord(x) ^ 32, lst)))[::-1]
moves(faces, reverse)
print("魔方恢復步驟:", reverse)
toString(faces)

示例

請輸入步驟:UBLDFRULFDRULBGBVFDRLLBFLLDSSDBVDJFRUDLRFBDLFBbdj
執行后的魔方為

      2 5 3
      5 0 2
      5 0 5
5 2 3 1 2 1 2 4 0 4 0 0
1 2 3 1 4 5 1 3 1 4 5 2
2 5 2 4 4 3 1 0 5 3 4 4
      1 0 4
      3 1 3
      0 3 0

魔方恢復步驟: JDBbfldbfrldurfjdvbdssdllfbllrdfvbgblurdflurfdlbu

      0 0 0
      0 0 0
      0 0 0
2 2 2 4 4 4 3 3 3 5 5 5
2 2 2 4 4 4 3 3 3 5 5 5
2 2 2 4 4 4 3 3 3 5 5 5
      1 1 1
      1 1 1
      1 1 1


Process finished with exit code 0

注:大寫為順時針,小寫為逆時針

到此這篇關于python實現三階魔方還原的示例代碼的文章就介紹到這了,更多相關python 三階魔方還原內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 用Python簡陋模擬n階魔方

標簽:宿遷 濟南 黃山 欽州 三沙 臺灣 喀什 景德鎮

巨人網絡通訊聲明:本文標題《python實現三階魔方還原的示例代碼》,本文關鍵詞  python,實現,三階,魔方,還原,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python實現三階魔方還原的示例代碼》相關的同類信息!
  • 本頁收集關于python實現三階魔方還原的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    色综合色综合色综合| 亚洲第四色夜色| 国产嫩草影院久久久久| 亚洲自拍偷拍图区| 日韩精品一级中文字幕精品视频免费观看| 麻豆精品视频在线| 久久免费精品国产久精品久久久久| 精品久久久久久久久久久院品网| 亚洲三级电影网站| 欧美在线一区二区| 亚洲私人影院在线观看| 99久久99久久精品免费看蜜桃| 国产三级久久久| 成人免费视频网站在线观看| 欧美日韩的一区二区| 精品国产91九色蝌蚪| 青青草国产成人av片免费| 日韩色视频在线观看| 久久99久久久久久久久久久| 制服丝袜亚洲色图| 国产精品香蕉一区二区三区| 国产视频一区二区在线| 99免费精品在线| 午夜久久电影网| 亚洲色图欧洲色图婷婷| 成人精品免费网站| 亚洲一区影音先锋| 在线观看区一区二| 久久国产尿小便嘘嘘| 久久一区二区三区四区| 在线免费观看日本欧美| 久久精品国产免费| 国产精品日日摸夜夜摸av| 欧美日韩中文字幕一区二区| 午夜亚洲福利老司机| 成人免费在线视频| 欧美视频一区二区三区四区| 美女任你摸久久| 一区二区三区在线免费观看| 久久婷婷成人综合色| 欧美福利一区二区| 国产成人av一区二区三区在线观看| 亚洲一区在线电影| 国产欧美精品一区二区色综合| 欧美一区永久视频免费观看| 欧美美女网站色| 欧美日韩一区成人| 精品三级在线看| 成人欧美一区二区三区黑人麻豆| 国产午夜三级一区二区三| 欧美区一区二区三区| 欧美色图12p| 欧美精品一区二区三区蜜桃| 国产老女人精品毛片久久| 亚洲制服丝袜av| 一区二区三区欧美激情| 久久国产精品色| 97成人超碰视| 精品视频123区在线观看| 91精品免费在线观看| 1024亚洲合集| 成人在线综合网站| 欧美一三区三区四区免费在线看| 久久毛片高清国产| 五月天一区二区| 精品中文字幕一区二区| 欧美精品久久久久久久久老牛影院| 91精品国产色综合久久ai换脸| 国产精品丝袜黑色高跟| 日韩av中文在线观看| 精品一区在线看| 欧美精品丝袜久久久中文字幕| 国产精品免费网站在线观看| 久久精品国产亚洲a| 欧美伊人久久大香线蕉综合69| 日韩视频免费观看高清完整版在线观看 | 亚洲综合图片区| 久久99热这里只有精品| 91精品国产一区二区三区香蕉| 亚洲精品亚洲人成人网 | 亚洲女同一区二区| 一本大道久久精品懂色aⅴ| 国产精品久久久久久久午夜片 | 欧美日韩高清影院| 国产精品灌醉下药二区| 色吊一区二区三区 | 91福利在线观看| 五月婷婷另类国产| 久久伊99综合婷婷久久伊| 五月婷婷综合在线| 精品国产一区二区精华| 国产高清不卡一区二区| 亚洲一区二区五区| 欧美xfplay| 色成年激情久久综合| 麻豆精品一区二区三区| 国产精品青草综合久久久久99| 555夜色666亚洲国产免| 精品综合免费视频观看| 亚洲精品成人少妇| 精品三级在线看| 在线免费观看日本一区| 成人精品gif动图一区| 日韩激情中文字幕| 一区二区三区中文在线| 精品国产三级电影在线观看| 欧美日韩综合在线免费观看| 国产美女主播视频一区| 久久国产综合精品| 午夜精品爽啪视频| 国产精品视频yy9299一区| 久久综合久久综合九色| 精品毛片乱码1区2区3区| 91精品国产手机| 日韩欧美aaaaaa| 欧美日韩国产不卡| 6080日韩午夜伦伦午夜伦| 久久精品亚洲国产奇米99| 日韩欧美自拍偷拍| 久久先锋资源网| 国产丝袜在线精品| 中文字幕在线观看不卡| 欧美激情中文不卡| 日本一区二区三区在线观看| 精品久久久久久久久久久久包黑料| 日韩精品一区二区三区四区| 欧美日韩黄色一区二区| 欧洲精品一区二区三区在线观看| 国产在线播放一区| 久久国产视频网| 成人在线一区二区三区| 欧美一区二区三区婷婷月色| 91精品国产手机| 亚洲女同ⅹxx女同tv| 男人的j进女人的j一区| 亚洲高清免费观看高清完整版在线观看| 亚洲一二三四在线| 成人深夜在线观看| 色哟哟一区二区| 国产亚洲人成网站| 亚洲一区二区三区国产| 国产99精品国产| 精品电影一区二区三区| 日韩精品一二三| 69久久99精品久久久久婷婷| 国产精品伦理一区二区| 日韩精品国产欧美| 欧美亚洲动漫精品| 国产欧美视频在线观看| 日韩精彩视频在线观看| 3751色影院一区二区三区| 亚洲一区二区三区免费视频| 色综合久久天天| 亚洲色欲色欲www| 色综合久久久久综合体| 久久久99久久| 国产永久精品大片wwwapp| 一区在线观看免费| 99re8在线精品视频免费播放| 久久久精品免费免费| 国产精品一二二区| 一区二区高清在线| 欧美一区二区三区在线视频| 国产一区视频导航| 亚洲欧美偷拍三级| 欧美一二三区精品| 97精品国产97久久久久久久久久久久| 亚洲色图视频免费播放| 欧美乱熟臀69xxxxxx| 欧美日韩在线一区二区| 日韩va亚洲va欧美va久久| 欧美精品一区二区三区很污很色的| 免费在线一区观看| 欧美国产精品一区| 91精品啪在线观看国产60岁| 国产精品一区在线观看乱码 | 欧美va亚洲va在线观看蝴蝶网| 免费在线看成人av| 亚洲人成在线播放网站岛国| 精品视频1区2区| 色94色欧美sute亚洲线路二| 亚洲欧洲www| xnxx国产精品| 亚洲精品一区二区三区蜜桃下载 | 成人丝袜18视频在线观看| 日韩和欧美的一区| 日韩精品免费专区| 亚洲国产一区二区a毛片| 成人免费在线观看入口| 国产精品国产自产拍高清av| 日韩欧美一级二级三级久久久| 欧美日韩极品在线观看一区| 欧美视频一区在线| k8久久久一区二区三区| 一本久久综合亚洲鲁鲁五月天 | 国产成人在线影院| 黄网站免费久久| 韩国一区二区在线观看| 懂色av一区二区在线播放| 91香蕉视频在线|