优草派 > Python

python之用Numpy和matplotlib画一个魔方

王志强         优草派

魔方是一种极受欢迎的玩具,它在全世界范围内都有很多玩家,因为挑战简单而又极具挑战性,它的颜色构成很有美感。本文将会介绍用Python中的Numpy和matplotlib库来画一下魔方的过程。

python之用Numpy和matplotlib画一个魔方

第一步:代码编写

首先,我们需要安装好依赖库numpy和matplotlib。然后,我们来看看如何编写代码。

首先,我们要定义一个3x3x3的numpy数组(由于魔方是三维的),将其填充成六个不同的面。可以将每面的颜色定义为一个数字,例如:

import numpy as np

# define a 3x3x3 numpy array

cube = np.zeros((3,3,3))

cube[...,0] = 1 # red

cube[...,1] = 2 # green

cube[...,2] = 3 # blue

cube[...,3] = 4 # orange

cube[...,4] = 5 # yellow

cube[...,5] = 6 # white

接下来,我们需要定义一些函数来旋转魔方。这里我们定义的是以x轴顺时针、逆时针旋转,以y轴顺时针、逆时针旋转,以及z轴顺时针、逆时针旋转三个函数。具体实现方法可以参考以下代码:

def rotate_x_clockwise(cube):

"""Rotate the cube along the x-axis clockwise"""

new_cube = np.zeros_like(cube)

new_cube[0,:,:] = cube[0,:,:].T

new_cube[1,:,:] = cube[2,:,:]

new_cube[2,:,:] = cube[1,:,:].T

return new_cube

def rotate_x_anticlockwise(cube):

"""Rotate the cube along the x-axis anticlockwise"""

new_cube = np.zeros_like(cube)

new_cube[0,:,:] = cube[0,:,:].T[::-1]

new_cube[1,:,:] = cube[2,:,:][::-1]

new_cube[2,:,:] = cube[1,:,:].T[::-1]

return new_cube

def rotate_y_clockwise(cube):

"""Rotate the cube along the y-axis clockwise"""

new_cube = np.zeros_like(cube)

new_cube[:,2,:] = cube[:,:,0]

new_cube[:,1,:] = cube[:,:,2]

new_cube[:,0,:] = cube[:,:,1]

return new_cube

def rotate_y_anticlockwise(cube):

"""Rotate the cube along the y-axis anticlockwise"""

new_cube = np.zeros_like(cube)

new_cube[:,0,:] = cube[:,:,2][::-1]

new_cube[:,1,:] = cube[:,:,0][::-1]

new_cube[:,2,:] = cube[:,:,1][::-1]

return new_cube

def rotate_z_clockwise(cube):

"""Rotate the cube along the z-axis clockwise"""

new_cube = np.zeros_like(cube)

new_cube[:,:,2] = cube[:,0,:].T[::-1]

new_cube[:,:,1] = cube[:,::-1,2]

new_cube[:,:,0] = cube[:,2,:].T

return new_cube

def rotate_z_anticlockwise(cube):

"""Rotate the cube along the z-axis anticlockwise"""

new_cube = np.zeros_like(cube)

new_cube[:,:,0] = cube[:,0,:][::-1]

new_cube[:,:,1] = cube[:,::-1,0]

new_cube[:,:,2] = cube[:,2,:][::-1]

return new_cube

接下来我们就可以画魔方啦!由于是三维的,所以我们需要切分出每个面,然后用matplotlib中的imshow来展示每个面。可以参照以下代码来实现:

import matplotlib.pyplot as plt

fig = plt.figure()

cube1 = cube[0,:,:]

plt.imshow(cube1)

cube2 = cube[1,:,:]

plt.imshow(cube2)

cube3 = cube[2,:,:]

plt.imshow(cube3)

cube4 = np.rot90(cube[3,:,:], -1)

plt.imshow(cube4)

cube5 = np.rot90(cube[4,:,:], 1)

plt.imshow(cube5)

cube6 = np.rot90(cube[5,:,:], -1)

plt.imshow(cube6)

plt.axis('off')

plt.show()

第二步:效果展示

最后,我们来看看实际效果如何:

[效果图](https://www.jianshu.com/p/fa53aafaa2de)

摘自[简书](https://www.jianshu.com/p/fa53aafaa2de)

  • 微信好友

  • 朋友圈

  • 新浪微博

  • QQ空间

  • 复制链接

取消
5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024