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

主頁 > 知識庫 > 用Python簡陋模擬n階魔方

用Python簡陋模擬n階魔方

熱門標簽:電話外呼系統招商代理 京華圖書館地圖標注 佛山通用400電話申請 淮安呼叫中心外呼系統如何 看懂地圖標注方法 廣東旅游地圖標注 蘇州人工外呼系統軟件 電話機器人貸款詐騙 打印谷歌地圖標注

一、前言

終于整完了畢業論文,忙里偷閑半小時摸了個魔方模擬程序,支持模擬任意階魔方,自動打亂,輸入指令旋轉。顯示方面不會弄3D的,用opencv整了個展開圖。

二、效果

五階魔方打亂20步

震撼人心50階,打亂100步

三、代碼

import cv2
import numpy as np
from random import randint


class Cube:
    def __init__(self, order=3, size=50):  # 魔方階數、顯示尺寸
        self.img = np.zeros((4 * size * order, 3 * size * order, 3), dtype=np.uint8)
        self.order = order
        self.size = size
        self.len = size * order
        self.top = [['y'] * order for _ in range(order)]
        self.front = [['r'] * order for _ in range(order)]
        self.left = [['b'] * order for _ in range(order)]
        self.right = [['g'] * order for _ in range(order)]
        self.back = [['o'] * order for _ in range(order)]
        self.bottom = [['w'] * order for _ in range(order)]
        self.axis_rotate = (self.base_rotate_x, self.base_rotate_y, self.base_rotate_z)
        self.color = {'y': (0, 255, 255), 'r': (0, 0, 255), 'b': (255, 0, 0),
                      'g': (0, 255, 0), 'o': (0, 128, 255), 'w': (255, 255, 255)}

    def check(self):  # 檢測魔方是否還原
        for i in range(self.order):
            for j in range(self.order):
                if self.top[i][j] != self.top[0][0]:
                    return False
                if self.back[i][j] != self.back[0][0]:
                    return False
                if self.front[i][j] != self.front[0][0]:
                    return False
                if self.left[i][j] != self.left[0][0]:
                    return False
                if self.right[i][j] != self.right[0][0]:
                    return False
                if self.bottom[i][j] != self.bottom[0][0]:
                    return False
        return True

    def show(self, wait=0):  # 顯示魔方展開圖
        for i in range(self.order):
            for j in range(self.order):
                # back
                x, y = self.len + i * self.size, j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.back[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # left
                x, y = i * self.size, self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.left[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # top
                x, y = self.len + i * self.size, self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.top[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # right
                x, y = 2 * self.len + i * self.size, self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.right[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # front
                x, y = self.len + i * self.size, 2 * self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.front[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # bottom
                x, y = self.len + i * self.size, 3 * self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.bottom[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
        cv2.imshow('cube', self.img)
        cv2.waitKey(wait)

    def shuffle(self, times):  # 打亂魔方
        for _ in range(times):
            self.rotate(randint(0, 2), randint(0, self.order - 1), randint(0, 3))

    def rotate(self, axis, index, times):  # 旋轉魔方:axis軸,第index層,逆時針times次
        for _ in range(times):
            self.axis_rotate[axis](index)

    def count(self, color='y'):
        count = 0
        for i in range(self.order):
            for j in range(self.order):
                if self.top[i][j] == color:
                    count += 1
        return count

    @staticmethod
    def _column_trans(surface, index, col):
        for i, r in enumerate(surface):
            r[index] = col[i]

    def base_rotate_x(self, index):
        if index == 0:
            self.left = [list(c) for c in zip(*self.left)][::-1]
        elif index == self.order - 1:
            self.right = [list(c)[::-1] for c in zip(*self.right)]
        temp = [r[index] for r in self.top]
        self._column_trans(self.top, index, [r[index] for r in self.front])
        self._column_trans(self.front, index, [r[index] for r in self.bottom])
        self._column_trans(self.bottom, index, [r[index] for r in self.back])
        self._column_trans(self.back, index, temp)

    def base_rotate_y(self, index):
        if index == 0:
            self.back = [list(c)[::-1] for c in zip(*self.back)]
        elif index == self.order - 1:
            self.front = [list(c) for c in zip(*self.front)][::-1]
        temp = self.left[index][::-1]
        self.left[index] = self.top[index]
        self.top[index] = self.right[index]
        self.right[index] = self.bottom[self.order - index - 1][::-1]
        self.bottom[self.order - index - 1] = temp

    def base_rotate_z(self, index):
        if index == 0:
            self.top = [list(c) for c in zip(*self.top)][::-1]
        elif index == self.order - 1:
            self.bottom = [list(c)[::-1] for c in zip(*self.bottom)]
        temp = self.front[index][::-1]
        self.front[index] = [r[self.order - index - 1] for r in self.left]
        self._column_trans(self.left, self.order - index - 1, self.back[self.order - index - 1][::-1])
        self.back[self.order - index - 1] = [r[index] for r in self.right]
        self._column_trans(self.right, index, temp)


cube = Cube(3, 50)
cube.shuffle(100)
while True:
    cube.show(1)
    cube.rotate(*(int(c) for c in input('axis,index,times:').split()))
    if cube.check():
        break
print('Congratulations')
cube.show(0)

到此這篇關于用Python簡陋模擬n階魔方的文章就介紹到這了,更多相關pytho模擬魔方內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python實現三階魔方還原的示例代碼

標簽:畢節 中山 駐馬店 股票 江蘇 衡水 呼和浩特 湖州

巨人網絡通訊聲明:本文標題《用Python簡陋模擬n階魔方》,本文關鍵詞  用,Python,簡陋,模擬,階,魔方,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《用Python簡陋模擬n階魔方》相關的同類信息!
  • 本頁收集關于用Python簡陋模擬n階魔方的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91年精品国产| 精品入口麻豆88视频| 国产一区二区视频在线| 欧美一区二区三区四区高清| 一区二区三区免费观看| 色综合久久88色综合天天6 | 国产精品 日产精品 欧美精品| 91精品在线免费| 亚洲成人激情综合网| 欧洲av一区二区嗯嗯嗯啊| 亚洲日本一区二区三区| 欧美在线一区二区三区| 亚洲综合小说图片| 欧美狂野另类xxxxoooo| 国产一区二区三区四| 欧美韩日一区二区三区四区| 国产v日产∨综合v精品视频| 国产精品国产成人国产三级| 成人黄色片在线观看| 亚洲人午夜精品天堂一二香蕉| 日本高清免费不卡视频| 久久电影网电视剧免费观看| 中文字幕一区二区三| 欧美久久一二区| 久久 天天综合| 1024精品合集| 日韩三区在线观看| 99国产精品国产精品毛片| 日日夜夜免费精品视频| 久久综合久久鬼色中文字| 91在线小视频| 精品影院一区二区久久久| 中文字幕在线不卡国产视频| 欧美日韩精品一二三区| 风间由美一区二区av101| 亚洲国产精品欧美一二99| 久久亚洲精品国产精品紫薇| 欧美日韩一区中文字幕| 国产91精品在线观看| 日韩av在线发布| 中文字幕综合网| 精品成a人在线观看| 在线视频你懂得一区二区三区| 日本美女一区二区三区视频| 亚洲免费毛片网站| 久久婷婷综合激情| 欧美一区二区观看视频| 97超碰欧美中文字幕| 国产精品一二三四五| 五月天欧美精品| 亚洲综合色区另类av| 综合久久综合久久| 国产精品网站在线观看| 日韩丝袜情趣美女图片| 欧美视频中文一区二区三区在线观看| 国产精品一卡二| 国产精品影音先锋| 精品一区二区在线视频| 视频一区二区中文字幕| 一区二区三区欧美| 亚洲综合激情另类小说区| 亚洲人成网站精品片在线观看| 欧美激情一区二区三区蜜桃视频| 欧美成人综合网站| 精品裸体舞一区二区三区| 日韩欧美一区中文| 日韩美女一区二区三区| 欧美一区二区不卡视频| 欧美一级高清片| 91精品在线观看入口| 91麻豆精品国产91久久久更新时间| 欧洲一区在线观看| 欧美精品久久99久久在免费线| 欧美嫩在线观看| 日韩精品一区二区三区蜜臀| 精品88久久久久88久久久| 久久网这里都是精品| 国产精品看片你懂得| 亚洲精品视频一区二区| 亚洲线精品一区二区三区| 偷拍日韩校园综合在线| 国内久久精品视频| 成人h动漫精品一区二| 在线视频观看一区| 91精品国产品国语在线不卡| 精品少妇一区二区| 成人免费在线视频| 日本不卡123| 不卡av免费在线观看| 欧美日韩免费一区二区三区视频| 欧美一区二区三区白人| 国产欧美日韩不卡免费| 自拍偷自拍亚洲精品播放| 亚洲国产成人高清精品| 久久精品国产在热久久| 99久久婷婷国产| 久久精品999| av一二三不卡影片| 91精品国产综合久久福利软件| 久久久久久久久久久黄色| 一区在线播放视频| 青娱乐精品在线视频| 99精品视频一区| 3atv在线一区二区三区| 亚洲国产精品精华液ab| 天堂av在线一区| 99精品久久久久久| 久久精品夜色噜噜亚洲aⅴ| 亚洲一二三四区| 国产·精品毛片| 在线电影院国产精品| 中文字幕一区二区三区视频| 蜜桃av一区二区在线观看| 99精品久久只有精品| 久久午夜羞羞影院免费观看| 亚洲午夜一区二区三区| 风流少妇一区二区| 日韩欧美视频一区| 午夜欧美电影在线观看| 成人性视频免费网站| 欧美成人三级在线| 亚洲综合视频网| 不卡电影一区二区三区| 日韩欧美电影在线| 亚洲国产wwwccc36天堂| av在线不卡观看免费观看| 欧美xxxxxxxx| 蜜桃免费网站一区二区三区| 欧美一激情一区二区三区| 一区二区三区四区五区视频在线观看 | 精品久久久久久久久久久久久久久| 国产精品美女一区二区在线观看| 久久爱另类一区二区小说| 欧美精品黑人性xxxx| 亚洲最新视频在线观看| 91极品美女在线| 一区二区三区在线视频免费| jiyouzz国产精品久久| 国产精品美女久久久久久久久久久| 黄色日韩三级电影| 日韩精品影音先锋| 婷婷国产v国产偷v亚洲高清| 欧美调教femdomvk| 亚洲国产精品综合小说图片区| 欧美日韩一区二区在线观看视频| 国产精品免费久久久久| 丰满少妇在线播放bd日韩电影| 亚洲精品一区二区三区蜜桃下载 | av在线不卡观看免费观看| 中文字幕一区二区视频| 国产成人免费av在线| 国产精品卡一卡二| 在线观看91视频| 麻豆成人91精品二区三区| 欧美三级韩国三级日本一级| 午夜激情一区二区| 欧美大胆一级视频| 国产精品18久久久久久久久久久久| 久久久久久久久久久久久夜| 国产a视频精品免费观看| 国产精品免费观看视频| 91丨porny丨中文| 日本在线不卡视频| 亚洲国产精品99久久久久久久久| 色天天综合久久久久综合片| 日本不卡一二三| 久久久久99精品一区| 在线精品国精品国产尤物884a| 日韩vs国产vs欧美| 国产精品美女久久久久久2018| 色婷婷综合久久久| 视频一区欧美精品| 欧美疯狂性受xxxxx喷水图片| 日韩不卡一区二区| 欧美极品少妇xxxxⅹ高跟鞋 | 91精品国产91热久久久做人人| 亚洲免费观看高清| 在线免费观看不卡av| 亚洲免费观看高清完整版在线观看熊| 一本久久综合亚洲鲁鲁五月天| 国产精品水嫩水嫩| 日韩电影免费在线| 欧美精品一区二区三区很污很色的| 麻豆91精品视频| 欧美国产在线观看| 成人国产精品免费观看视频| 亚洲一区二区高清| 日韩视频不卡中文| 色婷婷av一区| 国产69精品久久久久毛片| 国产精品理论片在线观看| 欧美成人激情免费网| 粉嫩av一区二区三区| 亚洲愉拍自拍另类高清精品| 97久久超碰国产精品| 久久精品噜噜噜成人88aⅴ| √…a在线天堂一区| 4438成人网| 日本道色综合久久| 972aa.com艺术欧美|