下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第用Python简陋模拟n阶魔方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']*orderfor_inrange(order)]
self.front=[['r']*orderfor_inrange(order)]
self.left=[['b']*orderfor_inrange(order)]
self.right=[['g']*orderfor_inrange(order)]
self.back=[['o']*orderfor_inrange(order)]
self.bottom=[['w']*orderfor_inrange(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)}
defcheck(self):#检测魔方是否还原
foriinrange(self.order):
forjinrange(self.order):
ifself.top[i][j]!=self.top[0][0]:
returnFalse
ifself.back[i][j]!=self.back[0][0]:
returnFalse
ifself.front[i][j]!=self.front[0][0]:
returnFalse
ifself.left[i][j]!=self.left[0][0]:
returnFalse
ifself.right[i][j]!=self.right[0][0]:
returnFalse
ifself.bottom[i][j]!=self.bottom[0][0]:
returnFalse
returnTrue
defshow(self,wait=0):#显示魔方展开图
foriinrange(self.order):
forjinrange(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)
defshuffle(self,times):#打乱魔方
for_inrange(times):
self.rotate(randint(0,2),randint(0,self.order-1),randint(0,3))
defrotate(self,axis,index,times):#旋转魔方:axis轴,第index层,逆时针times次
for_inrange(times):
self.axis_rotate[axis](index)
defcount(self,color='y'):
count=0
foriinrange(self.order):
forjinrange(self.order):
ifself.top[i][j]==color:
count+=1
returncount
@staticmethod
def_column_trans(surface,index,col):
fori,rinenumerate(surface):
r[index]=col[i]
defbase_rotate_x(self,index):
ifindex==0:
self.left=[list(c)forcinzip(*self.left)][::-1]
elifindex==self.order-1:
self.right=[list(c)[::-1]forcinzip(*self.right)]
temp=[r[index]forrinself.top]
self._column_trans(self.top,index,[r[index]forrinself.front])
self._column_trans(self.front,index,[r[index]forrinself.bottom])
self._column_trans(self.bottom,index,[r[index]forrinself.back])
self._column_trans(self.back,index,temp)
defbase_rotate_y(self,index):
ifindex==0:
self.back=[list(c)[::-1]forcinzip(*self.back)]
elifindex==self.order-1:
self.front=[list(c)forcinzip(*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
defbase_rotate_z(self,index):
ifindex==0:
self.top=[list(c)forcinzip(*self.top)][::-1]
elifindex==self.order-1:
self.bottom=[list(c)[::-1]forcinzip(*self.bottom)]
temp=self.front[index][::-1]
self.front[index]=[r[self.order-i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新店汽车美容营销方案(3篇)
- 春季篮球活动策划方案(3篇)
- 河床整平施工方案(3篇)
- 深基坑抢险施工方案(3篇)
- 焦化常规检修施工方案(3篇)
- 石灰破碎的施工方案(3篇)
- 编制专项施工方案流程(3篇)
- 节日活动营销方案案例(3篇)
- 蒸球安装施工方案(3篇)
- 资金预算活动策划方案(3篇)
- 2026年广西真龙彩印包装有限公司笔试题及答案
- 河南资本集团笔试题库
- 2026湖北神农架林区公安局招聘辅警22人笔试备考试题及答案解析
- 2026菏泽特殊教育职业学校公开招聘人员(2人)考试模拟试题及答案解析
- 全国数据资源调查报告(2025年)
- 20S515 钢筋混凝土及砖砌排水检查井
- 中医养生中心加盟商务手册
- 变配电运行值班员(二级)技术师资格考试复习题库大全-上(单选题部分)
- 2023版思想道德与法治专题4 继承优良传统 弘扬中国精神 第2讲 做新时代的忠诚爱国者
- ESD标本病理检查规范处理流程
- 水污染控制工程 第四章 城镇雨水沟道的设计
评论
0/150
提交评论