日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:58日期:2022-06-20 18:02:24
思路

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

​ 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])

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

每一個面的 順時針 和 逆時針 旋轉由函數 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°。這時,我們只需按順序交換每一面的第一行,最后再逆時針或順時針轉回來即可。

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

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 npimport 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 facedef 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 55 2 3 1 2 1 2 4 0 4 0 01 2 3 1 4 5 1 3 1 4 5 22 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 02 2 2 4 4 4 3 3 3 5 5 52 2 2 4 4 4 3 3 3 5 5 52 2 2 4 4 4 3 3 3 5 5 5 1 1 1 1 1 1 1 1 1Process finished with exit code 0

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

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

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩免费av| 成人在线视频区| 日韩一区欧美| 91久久在线| 国产伦乱精品| 美女视频免费精品| 日本91福利区| 麻豆视频在线观看免费网站黄| 亚洲精品在线观看91| 蜜桃一区二区三区在线| 亚洲午夜精品久久久久久app| 日韩中文字幕av电影| 7777精品| 五月综合激情| 国产中文欧美日韩在线| 国产精品精品国产一区二区| 中文字幕一区二区三区四区久久| 免费视频一区二区三区在线观看| 欧美jjzz| 色婷婷综合网| 免费日韩av片| 国产美女视频一区二区| 亚洲精华国产欧美| 久久精品国产99国产精品| 亚洲少妇一区| 亚洲一级少妇| 亚洲一二av| 偷拍欧美精品| 精品日本视频| 免费在线视频一区| 久久国产毛片| 欧美黄色精品| 蜜桃视频第一区免费观看| 99久久九九| 国产精品黄色| 亚洲人www| 久久五月天小说| 你懂的网址国产 欧美| 日本一区二区三区视频在线看| 色综合www| 久久激情五月激情| 国产麻豆综合| 亚洲天堂成人| 日本不卡视频一二三区| 中日韩男男gay无套| 成年男女免费视频网站不卡| 精品日韩在线| 精品美女在线视频| 中文在线а√天堂| 国产精品日韩精品中文字幕| 亚洲一二三区视频| 99久久婷婷这里只有精品| 国产成人免费| 久久99精品久久久野外观看| 美女网站一区| 欧美日韩一二三四| 特黄特色欧美大片| 亚洲精品国产嫩草在线观看 | 久久不见久久见免费视频7 | 亚洲综合图色| 蜜桃久久久久久| 精品一区免费| 国产综合视频| aa国产精品| 国产精品免费99久久久| 午夜一区在线| 麻豆精品91| 亚洲伊人精品酒店| 涩涩涩久久久成人精品| 日韩有吗在线观看| 欧美伊人久久| 婷婷亚洲五月| 日韩精品免费一区二区夜夜嗨| 亚洲久久一区| 国产精品久久久免费| 老色鬼精品视频在线观看播放| 欧美中文字幕| 色综合视频一区二区三区日韩 | 水蜜桃久久夜色精品一区| 麻豆精品久久久| 97精品中文字幕| 国产丝袜一区| 久久亚洲国产| 亚洲精品一二| 国产极品一区| 日韩大片在线| 欧美日韩高清| 日韩精品亚洲专区| 蜜臀久久99精品久久一区二区| 91九色精品| 日韩激情网站| 久久精品系列| 黄色日韩精品| 欧美日韩一区自拍| аⅴ资源天堂资源库在线| 在线国产一区| 日本成人在线视频网站| 日韩精品成人在线观看| 精品一区视频| 国产精品白丝av嫩草影院| 国产女人18毛片水真多18精品| 日韩欧美四区| 91精品国产福利在线观看麻豆| 国产99精品| 久久午夜影院| 免费日本视频一区| 私拍精品福利视频在线一区| 亚洲色图综合| 亚洲一级黄色| 国产一区二区三区久久| 蜜桃传媒麻豆第一区在线观看| 亚洲www啪成人一区二区| 亚洲欧美日韩一区在线观看| 日韩免费一区| 国产在线一区不卡| 国产区精品区| 日本三级亚洲精品| 免费看日韩精品| 欧美在线资源| 99视频精品全部免费在线视频| 精品久久在线| 精品淫伦v久久水蜜桃| 欧美另类中文字幕 | 国产精选在线| 欧美极品中文字幕| 国产日产高清欧美一区二区三区 | 在线天堂中文资源最新版| 久久精品国产成人一区二区三区| 日韩不卡一区二区三区| 综合激情视频| 日韩激情精品| 麻豆久久一区| 欧美成人a交片免费看| 久久影视三级福利片| 精品亚洲成人| 日韩欧美网址| 久久亚洲精品中文字幕蜜潮电影| 激情欧美丁香| 亚洲毛片在线免费| 国产精品亚洲一区二区在线观看| 欧美精品97| sm久久捆绑调教精品一区| 精品一区欧美| 亚洲欧美网站在线观看| 国产欧美久久一区二区三区| 久久只有精品| 99久久99视频只有精品| 另类av一区二区| 涩涩涩久久久成人精品| 国产精品www994| 午夜av成人| 日韩精品免费一区二区夜夜嗨 | 亚洲精品亚洲人成在线观看| 国产欧美日韩| 色爱av综合网| 亚洲精品中文字幕99999| 久久亚洲黄色| 免费欧美在线视频| 国产粉嫩在线观看| 亚洲18在线| 精品三级久久| 国产欧美精品| 国产高清不卡| 欧美午夜三级| 欧美日韩国产高清| 日韩成人午夜精品| 日韩精品欧美| 7777精品| 美女被久久久| 精品久久精品| 青青草精品视频| 亚洲黄页一区| 中文字幕系列一区| 欧美黄页在线免费观看| 久久www成人_看片免费不卡| 日韩欧美在线中字| 精品一区二区三区在线观看视频| 国产精品97| 91精品一区国产高清在线gif| 欧美aaaaaa午夜精品| 欧美视频一区| 日韩精品视频在线看| 久久国产高清| 欧美日韩三区| 国产在线成人| 欧美日中文字幕| 99久久亚洲精品蜜臀| 亚洲国产福利| 成人va天堂| 欧美午夜精彩| 国产亚洲毛片在线| 野花国产精品入口| 黑人精品一区| 久久久精品日韩| 99久久久久国产精品| 美女亚洲一区| 免费视频一区二区| 日本国产亚洲| 免费在线亚洲欧美| 国产美女高潮在线|