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

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

用Python簡陋模擬n階魔方

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

一、前言

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

二、效果

五階魔方打亂20步

震撼人心50階,打亂100步

三、代碼

import cv2
import numpy as np
from random import randint


class Cube:
    def __init__(self, order=3, size=50):  # 魔方階數(shù)、顯示尺寸
        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):  # 旋轉(zhuǎn)魔方: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)

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

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

標(biāo)簽:畢節(jié) 中山 駐馬店 股票 江蘇 衡水 呼和浩特 湖州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用Python簡陋模擬n階魔方》,本文關(guān)鍵詞  用,Python,簡陋,模擬,階,魔方,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用Python簡陋模擬n階魔方》相關(guān)的同類信息!
  • 本頁收集關(guān)于用Python簡陋模擬n階魔方的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩精品一区二区| 亚洲乱码中文字幕综合| 91在线丨porny丨国产| 日韩av在线发布| 中日韩免费视频中文字幕| 91在线看国产| 国产一区二区三区四区五区入口| 亚洲天天做日日做天天谢日日欢| 精品盗摄一区二区三区| 欧美色图天堂网| 9l国产精品久久久久麻豆| 美女视频第一区二区三区免费观看网站 | www国产精品av| 欧美体内she精视频| 福利一区二区在线观看| 麻豆一区二区99久久久久| 夜夜夜精品看看| 国产精品久久久久四虎| 2023国产精品自拍| 日韩欧美一区二区三区在线| 欧美性淫爽ww久久久久无| 99re8在线精品视频免费播放| 极品少妇一区二区| 日韩av一级片| 无吗不卡中文字幕| 亚洲一区二区三区免费视频| 成人欧美一区二区三区1314| 中文字幕av在线一区二区三区| www激情久久| 精品美女一区二区| 欧美大白屁股肥臀xxxxxx| 69p69国产精品| 欧美狂野另类xxxxoooo| 欧美日韩一区二区在线观看视频 | 亚洲午夜在线观看视频在线| 亚洲婷婷综合色高清在线| 国产精品乱码人人做人人爱| 久久久高清一区二区三区| 久久这里只精品最新地址| 欧美成人伊人久久综合网| 欧美一级艳片视频免费观看| 日韩一级大片在线观看| 日韩丝袜情趣美女图片| 3d动漫精品啪啪一区二区竹菊| 欧美喷水一区二区| 日韩一区二区在线观看视频播放| 91精品欧美久久久久久动漫| 欧美一区二区网站| 欧美大肚乱孕交hd孕妇| 国产偷国产偷亚洲高清人白洁| 国产亚洲精品超碰| 国产精品久久久久久亚洲伦| 日韩理论片一区二区| 亚洲一区中文在线| 日韩精品免费专区| 精品一区二区免费在线观看| 国产成人在线网站| 91在线精品一区二区| 欧美午夜精品电影| 日韩欧美第一区| 久久精品视频在线看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 国产成人亚洲精品狼色在线| 丁香六月久久综合狠狠色| 9i在线看片成人免费| 欧美三级日韩三级国产三级| 日韩一区二区高清| 欧美国产日韩在线观看| 一区二区三区在线视频免费观看| 午夜精品久久久久久久久久久 | 国产成人免费高清| 色av综合在线| 欧美xxxx在线观看| 中文字幕亚洲精品在线观看| 偷拍亚洲欧洲综合| 国产乱人伦精品一区二区在线观看| 成人黄色免费短视频| 欧美优质美女网站| 精品国产sm最大网站免费看| 国产精品久久久久久久久免费相片 | 国产日韩亚洲欧美综合| 一区二区在线看| 久热成人在线视频| 91丝袜国产在线播放| 日韩欧美一区二区免费| 亚洲色图视频免费播放| 麻豆极品一区二区三区| 91亚洲大成网污www| 精品美女一区二区| 亚洲午夜电影在线| 成人午夜免费电影| 日韩一区二区三区在线| 亚洲欧美日韩一区二区三区在线观看| 奇米精品一区二区三区四区| 色域天天综合网| 久久久亚洲高清| 日韩精品一二三四| 91污在线观看| 国产无一区二区| 欧美a级理论片| 91福利视频网站| 国产精品毛片大码女人| 国产一区二区三区在线观看免费视频 | 国产一区二区电影| 欧美日韩中文另类| 国产精品乱码人人做人人爱| 美女视频第一区二区三区免费观看网站| 色综合一个色综合亚洲| 国产日产欧美精品一区二区三区| 日韩av一区二区在线影视| 欧美性大战久久久久久久蜜臀| 国产精品黄色在线观看| 国产精品自拍一区| 日韩欧美国产综合| 亚洲va欧美va天堂v国产综合| 国产成人午夜精品5599| 久久精子c满五个校花| 精品国产制服丝袜高跟| 成人精品视频一区| 欧美激情综合五月色丁香| 国产精品伊人色| 亚洲伊人色欲综合网| 欧美国产亚洲另类动漫| 在线观看日韩电影| 免费xxxx性欧美18vr| 欧美精品色综合| 99精品1区2区| 亚洲免费观看高清完整版在线| 国产精品色婷婷久久58| 国产91精品精华液一区二区三区| 亚洲国产精品久久人人爱蜜臀| 欧亚一区二区三区| 天天av天天翘天天综合网| 欧美日韩视频在线一区二区| 日本美女一区二区| 亚洲一区免费观看| 国产精品色婷婷久久58| 欧美一区二区黄色| 日本韩国欧美一区| 成人免费毛片app| 国产麻豆精品theporn| 老司机精品视频导航| 日韩电影在线一区二区三区| 亚洲国产精品久久不卡毛片| 亚洲一区二区三区在线看| 欧美国产视频在线| 亚洲成人资源网| 色婷婷综合激情| 久久久久久影视| 五月激情六月综合| 在线免费观看成人短视频| 精品国精品国产| 蜜桃av一区二区在线观看| 99久免费精品视频在线观看| 精品欧美一区二区久久| 91麻豆精品国产91久久久久久 | 99精品久久只有精品| 亚洲第一电影网| 一区二区成人在线| 欧美激情艳妇裸体舞| 亚洲女爱视频在线| 日韩成人午夜电影| 亚洲免费av网站| 麻豆精品在线看| 成人精品视频一区二区三区| 欧美aa在线视频| www.在线成人| 亚洲自拍欧美精品| 欧美本精品男人aⅴ天堂| 国产91清纯白嫩初高中在线观看| 亚洲欧美日韩一区二区| 欧美一区二区在线不卡| 高清在线不卡av| 亚洲五码中文字幕| 欧美精品一区二区在线播放| 91在线免费视频观看| 美日韩一区二区| 亚洲欧美一区二区久久| 欧美一区二区三区免费观看视频| 粉嫩一区二区三区在线看| 亚洲www啪成人一区二区麻豆 | 欧美变态tickling挠脚心| caoporn国产一区二区| 日韩国产高清在线| 国产精品二三区| 日韩女优毛片在线| 色天天综合久久久久综合片| 精品一区二区三区蜜桃| 亚洲国产va精品久久久不卡综合| 久久久久久97三级| 欧美日韩一本到| 成人av动漫网站| 精品在线免费视频| 亚洲国产一区二区视频| 国产日韩欧美精品在线| 欧美一区二区三区视频在线| 色婷婷一区二区| 国产91综合网| 久久99精品一区二区三区| 亚洲国产人成综合网站|