python如何画立方体
发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,小编给大家分享一下python如何画立方体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!立方体每列颜色不同:# Impor
千家信息网最后更新 2024年10月09日python如何画立方体
小编给大家分享一下python如何画立方体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
立方体每列颜色不同:
# Import librariesimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport numpy as np # Create axisaxes = [5,5,5] # Create Datadata = np.ones(axes, dtype=np.bool) # Controll Tranperencyalpha = 0.9 # Control colourcolors = np.empty(axes + [4], dtype=np.float32) colors[0] = [1, 0, 0, alpha] # redcolors[1] = [0, 1, 0, alpha] # greencolors[2] = [0, 0, 1, alpha] # bluecolors[3] = [1, 1, 0, alpha] # yellowcolors[4] = [1, 1, 1, alpha] # grey # Plot figurefig = plt.figure()ax = fig.add_subplot(111, projection='3d') # Voxels is used to customizations of# the sizes, positions and colors.ax.voxels(data, facecolors=colors, edgecolors='grey')
立方体各面颜色不同:
import matplotlib.pyplot as pltimport 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是精髓,把索引范围从[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(4, 4, 4)
彩色透视立方体:
from __future__ import divisionimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfrom mpl_toolkits.mplot3d.art3d import Poly3DCollectionfrom matplotlib.pyplot import figure, showdef quad(plane='xy', origin=None, width=1, height=1, depth=0): u, v = (0, 0) if origin is None else origin plane = plane.lower() if plane == 'xy': vertices = ((u, v, depth), (u + width, v, depth), (u + width, v + height, depth), (u, v + height, depth)) elif plane == 'xz': vertices = ((u, depth, v), (u + width, depth, v), (u + width, depth, v + height), (u, depth, v + height)) elif plane == 'yz': vertices = ((depth, u, v), (depth, u + width, v), (depth, u + width, v + height), (depth, u, v + height)) else: raise ValueError('"{0}" is not a supported plane!'.format(plane)) return np.array(vertices)def grid(plane='xy', origin=None, width=1, height=1, depth=0, width_segments=1, height_segments=1): u, v = (0, 0) if origin is None else origin w_x, h_y = width / width_segments, height / height_segments quads = [] for i in range(width_segments): for j in range(height_segments): quads.append( quad(plane, (i * w_x + u, j * h_y + v), w_x, h_y, depth)) return np.array(quads)def cube(plane=None, origin=None, width=1, height=1, depth=1, width_segments=1, height_segments=1, depth_segments=1): plane = (('+x', '-x', '+y', '-y', '+z', '-z') if plane is None else [p.lower() for p in plane]) u, v, w = (0, 0, 0) if origin is None else origin w_s, h_s, d_s = width_segments, height_segments, depth_segments grids = [] if '-z' in plane: grids.extend(grid('xy', (u, w), width, depth, v, w_s, d_s)) if '+z' in plane: grids.extend(grid('xy', (u, w), width, depth, v + height, w_s, d_s)) if '-y' in plane: grids.extend(grid('xz', (u, v), width, height, w, w_s, h_s)) if '+y' in plane: grids.extend(grid('xz', (u, v), width, height, w + depth, w_s, h_s)) if '-x' in plane: grids.extend(grid('yz', (w, v), depth, height, u, d_s, h_s)) if '+x' in plane: grids.extend(grid('yz', (w, v), depth, height, u + width, d_s, h_s)) return np.array(grids)canvas = figure()axes = Axes3D(canvas)quads = cube(width_segments=4, height_segments=4, depth_segments=4)# You can replace the following line by whatever suits you. Here, we compute# each quad colour by averaging its vertices positions.RGB = np.average(quads, axis=-2)# Setting +xz and -xz plane faces to black.RGB[RGB[..., 1] == 0] = 0RGB[RGB[..., 1] == 1] = 0# Adding an alpha value to the colour array.RGBA = np.hstack((RGB, np.full((RGB.shape[0], 1), .85)))collection = Poly3DCollection(quads)collection.set_color(RGBA)axes.add_collection3d(collection)show()
以上是"python如何画立方体"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
立方体
不同
篇文章
顶点
颜色
内容
方块
网格
范围
间隙
魔方
生成
不怎么
坐标
基调
大部分
尺寸
彩色
更多
灰色
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机三级考试网络技术题库app
服务器的游戏电脑
串口服务器是什么电压
高考信息技术数据库基础
网络安全技术模拟题
网络安全测试 黑盒 白盒
哇扑网络技术有限公司
一个表的数据库
pc软件开发环境
风险社会与网络技术
卡巴斯基网络安全实时
服务器有4个硬盘是raid几
转发域名服务器宝塔
富士通服务器怎么设置启动项
软件开发有哪些大学
魅族root无法访问服务器
手机提示无法获取数据库文件
知晓系统软件开发
软件开发找哪些单位
正定标准软件开发服务诚信推荐
广州销售软件开发热线
数控和网络技术哪个好
肌少症公共数据库
江苏工业网络技术参考价格
unity 本地数据库
互联网科技创业小说
电脑服务器损失多少钱
数据库技术的的发展
公司有数据库吗
access数据库的表以行