Numpy用不熟?結合Matplotlib 來畫一個魔方玩玩兒吧!
# -*- coding: utf-8 -*-
# @Time : DATE:2021/8/29
# @Author : yan
# @Email : 1792659158@qq.com
# @File : blogDemo.py
import matplotlib.pyplot as plt
import numpy as np
def generate_rubik_cube(nx, ny, nz):
"""
根據輸入生成指定尺寸的魔方
:param nx:
:param ny:
:param nz:
:return:
"""
# 準備一些座標
n_voxels = np.ones((nx + 2, ny + 2, nz + 2), dtype=bool)
# 生成間隙
size = np.array(n_voxels.shape) * 2
filled_2 = np.zeros(size - 1, dtype=n_voxels.dtype)
filled_2[::2, ::2, ::2] = n_voxels
# 縮小間隙
# 構建 voxels 頂點控制網格
# x, y, z 均為 6x6x8 的矩陣,為 voxels 的網格, 3x3x4 個小方塊,共有 6x6x8 個頂點。
# 這裡 //2 是精髓,外匯跟單gendan5.com把索引範圍從 [0 1 2 3 4 5] 轉換為 [0 0 1 1 2 2], 這樣就可以單獨設立每個方塊的頂點範圍
x, y, z = np.indices(np.array(filled_2.shape) + 1).astype(float) // 2 # 3x6x6x8 ,其中 x,y,z 均為 6x6x8
x[1::2, :, :] += 0.95
y[:, 1::2, :] += 0.95
z[:, :, 1::2] += 0.95
# 修改最外面的面
x[0, :, :] += 0.94
y[:, 0, :] += 0.94
z[:, :, 0] += 0.94
x[-1, :, :] -= 0.94
y[:, -1, :] -= 0.94
z[:, :, -1] -= 0.94
# 去除邊角料
filled_2[0, 0, :] = 0
filled_2[0, -1, :] = 0
filled_2[-1, 0, :] = 0
filled_2[-1, -1, :] = 0
filled_2[:, 0, 0] = 0
filled_2[:, 0, -1] = 0
filled_2[:, -1, 0] = 0
filled_2[:, -1, -1] = 0
filled_2[0, :, 0] = 0
filled_2[0, :, -1] = 0
filled_2[-1, :, 0] = 0
filled_2[-1, :, -1] = 0
# 給魔方六個面賦予不同的顏色
colors = np.array(['#ffd400', "#fffffb", "#f47920", "#d71345", "#145b7d", "#45b97c"])
facecolors = np.full(filled_2.shape, '#77787b') # 設一個灰色的基調
# facecolors = np.zeros(filled_2.shape, dtype='U7')
facecolors[:, :, -1] = colors[0] # 上黃
facecolors[:, :, 0] = colors[1] # 下白
facecolors[:, 0, :] = colors[2] # 左橙
facecolors[:, -1, :] = colors[3] # 右紅
facecolors[0, :, :] = colors[4] # 前藍
facecolors[-1, :, :] = colors[5] # 後綠
ax = plt.figure().add_subplot(projection='3d')
ax.voxels(x, y, z, filled_2, facecolors=facecolors)
plt.show()
if __name__ == '__main__':
generate_rubik_cube(3, 3, 3)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2789523/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 來開發一個wanandroid快應用吧NaNAndroid
- Python中Numpy及Matplotlib使用Python
- Numpy的Matplotlib視覺化視覺化
- 閒來無事,做個風扇玩玩
- 【matplotlib基礎】--結合地圖地圖
- Flutter動畫:用Flutter來實現一個拍手動畫Flutter動畫
- 第一個mpvue小程式開發完了,來總結下吧Vue
- 來,用ES6寫個Promise吧Promise
- 我也來扔一個Promise吧……Promise
- 想知道HBC到底怎麼回事兒?來看這個視訊吧!
- 用SolidWorks畫一個鑽頭,新手學起來Solid
- 來一起寫一個跳錶吧
- 圖片展示 [ Numpy 處理, Matplotlib 展示 ]
- 一行HTML也能畫畫?來一個!HTML
- Python 影像處理 OpenCV (2):畫素處理與 Numpy 操作以及 Matplotlib 顯示影像PythonOpenCV
- “帶不熟”的VR,誰來買單?VR
- 面試官說:你來設計一個短連結生成系統吧面試
- 【matplotlib基礎】--動畫動畫
- 智簡魔方結合運維需求推出新一代DCIM 系統運維
- 怎麼用matplotlib畫出漂亮的分析圖表
- 一起來作畫吧「GitHub 熱點速覽 v.22.14」Github
- 發個小遊戲,大家玩玩。遊戲
- 簡述 Python 的 Numpy、SciPy、Pandas、Matplotlib 的區別Python
- 快來為你的 .NET 應用加個監控吧!
- OA系統價格太昂貴?來用開源專案搭建一個吧!
- 用一個智慧魔方,轉動IP網路的時代變局
- 點點動畫~畫出懂你的3D魔方動畫3D
- JavaScript牛刀小試,結合CSS3動畫屬性來做一個系統時間同步的時鐘JavaScriptCSSS3動畫
- 立一個Flag吧
- AndroidUtilCode 網紅庫終於釋出 1.26.0 啦(用過的都來贊一個吧)!!!Android
- matplotlib畫圖未顯示,以及PyCharm中 %matplotlib inline報錯PyCharminline
- 你可能不熟悉的JS總結JS
- matplotlib 畫圖直接寫入excelExcel
- ?前端腳手架辣麼多,那我也要寫一個玩玩前端
- 用excel表畫一個樂高Excel
- 用canvas畫一個七竅板Canvas
- 用 Canvas + WASM 畫一個迷宮CanvasASM
- 用canvas畫一個進度盤Canvas