【附源码】Python :正方体建模

news2024/11/17 0:30:45

系列文章目录

Python 建模入门:正方体建模


文章目录

  • 系列文章目录
  • 一、建模需求
  • 二、源代码
  • 三、代码分析
  • 四、效果展示
  • 总结


一、建模需求

使用matplotlib库和mpl_toolkits.mplot3d模块来绘制一个立方体的3D图形


二、源代码

代码如下:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection

def draw_cube():
    # 立方体的八个顶点
    vertices = [
        [0, 0, 0],  # 前下左
        [1, 0, 0],  # 前下右
        [1, 1, 0],  # 前上右
        [0, 1, 0],  # 前上左
        [0, 0, 1],  # 后下左
        [1, 0, 1],  # 后下右
        [1, 1, 1],  # 后上右
        [0, 1, 1]   # 后上左
    ]

    # 立方体的六个面(每个面由两个三角形组成)
    faces = [
        ((0, 1, 3, 2), (0, 2, 6, 5)),  # 前面
        ((1, 2, 6, 7), (2, 3, 7, 6)),  # 右面
        ((0, 3, 7, 4), (3, 1, 5, 7)),  # 后面
        ((0, 4, 5, 1), (0, 1, 5, 4)),  # 左面
        ((4, 5, 6, 7), (4, 7, 6, 2)),  # 上面
        ((0, 3, 1, 4), (1, 2, 6, 5))   # 下面
    ]

    # 创建3D图形
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')

    # 绘制立方体的面
    for face in faces:
        polygons = []
        for edge in face:
            polygon = [[vertices[vertex_index][0], vertices[vertex_index][1], vertices[vertex_index][2]]
                       for vertex_index in edge]
            polygons.append(polygon)
        face_collection = Poly3DCollection(polygons, facecolors='cyan', linewidths=1, edgecolors='r', alpha=.25)
        ax.add_collection3d(face_collection)

    # 设置坐标轴等比例
    ax.set_box_aspect([1,1,1])
    ax.set_xlim([0, 1])
    ax.set_ylim([0, 1])
    ax.set_zlim([0, 1])

    # 隐藏坐标轴
    plt.axis('off')

    # 显示图形
    plt.show()

# 调用函数绘制立方体
draw_cube()

三、代码分析

1-2行:导入matplotlib.pyplot模块,并给它起了个简短的别名plt。同时从mpl_toolkits.mplot3d.art3d导入Poly3DCollection,这个类用于绘制3D多边形集合。

4-11行:定义了一个名为draw_cube的函数,这个函数不接受任何参数,用于绘制立方体。

13-20行:在draw_cube函数内部,定义了一个名为vertices的列表,包含了立方体的8个顶点的坐标。这些顶点按照在空间中的相对位置被编号和列出。

22-27行:定义了一个名为faces的列表,包含了立方体的6个面。每个面由两组三角形组成,每组三角形由顶点的索引定义。

29-31行:创建一个新的matplotlib图形,并添加一个3D坐标轴。

33-41行:遍历faces列表中的每个面。对于每个面,提取构成该面的两个三角形的顶点索引,然后根据这些索引从vertices列表中获取顶点坐标。使用这些坐标创建多边形,并将其添加到Poly3DCollection中。

43-46行:设置3D坐标轴的比例为等比例(即所有轴的单位长度相同),并设置x、y、z轴的显示范围。

48-49行:隐藏坐标轴,使得图形看起来更干净。

51行:调用plt.show()来显示图形。

53-54行:调用draw_cube函数来绘制立方体。

代码中使用的Poly3DCollection对象face_collection设置了以下属性:
facecolors: 多边形面的颜色,这里是’cyan’,即青色。
linewidths: 多边形边缘的线宽。
edgecolors: 多边形边缘的颜色,这里是’r’,即红色。
alpha: 设置多边形的透明度。


四、效果展示

正方体

总结

以上就是今天要讲的内容,运行这段代码会弹出一个窗口,显示一个3D立方体,立方体的每个面都是半透明的青色,边缘是红色。坐标轴被隐藏,使得立方体是图中唯一的视觉焦点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0-1开发一个Vue3前端系统页面-10.导航栏菜单选中问题

注意:本项目已将前端源码同步上传至Gitee,项目已开源,仅供参考,不涉及商用,著作权归本人所有。 开源项目链接:Wandering-children-have-the-stars-as-companions: WCHTSAC (gitee.com)https://gitee.com/C…

TCP通信,HTTP协议

TCP通信 1.流式套接字与数据报套接字的区别: 1.数据报套接字:每一包数据传输的目的可能不同,所以每一包需要单独处理(MTU:1500) 2.流式套接字:数据以流的形式连续的传输,有可能产生数据粘连,解决方式(固定长度、数据包间设定间隔 2.TCP包头…

内网安全:跨域攻击

目录 获取域信息 利用域信任密钥获取目标域 利用krbtgt哈希值获取目标域 内网中的域林: 很多大型企业都拥有自己的内网,一般通过域林进行共享资源。根据不同职能区分的部门,从逻辑上以 主域和子域进行区分,以方便统一管理。在…

C++学习笔记----3、设计专业的C++程序(八)---- 设计国际象棋程序

今天我们就来介绍一个系统性的方法去设计一个C程序,一个简单的国际象棋程序。为了提供完整的案例,有些步骤的概念目前还没有讲到。现在学习该案例来获得一一些人设计过程的整体印象,当你学习了那些概念后也可以再回头重新阅读本篇。 1、需求…

《黑神话》主线时长约40小时 100%完成需90小时

《黑神话:悟空》即将正式发售,媒体评分也已解禁,M站均分为82分。在游戏发售之前,许多粉丝仍想了解关于该作的更多信息。游戏科学未确定《黑神话》游戏时长是多久,幸运的是有评测员透露其主线时长约为40小时&#xff0c…

亲测好用,吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【2024.08 更新】

废话不多说,直接分享正文~ 以下是小编为大家搜集到的最新的ChatGPT国内站,各有优缺点。 1、AI Plus(稳定使用) 推荐指数:⭐⭐⭐⭐⭐ yixiaai.com 该网站已经稳定运营了1年多了。2023年3月份第一批上线的网…

如何在Python中正确使用浅拷贝和深拷贝?

更多资料获取 📚 个人网站:ipengtao.com 在Python编程中,拷贝对象是一个常见的操作,尤其是在处理复杂数据结构时。Python提供了两种拷贝方式:浅拷贝(shallow copy)和深拷贝(deep co…

day35-四层负载

01.四层负载概念 02.四层实现对端口转发 1.克隆一台10.0.0.4 2.安装部署nginx服务 [rootlb:~]# scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/[rootlb:~]#yum -y install nginx3.配置nginx四层负载 [rootlb:~]#rm -rf /etc/nginx/conf.d/default.conf # 删除默认…

【重磅发布】2025华清远见新品发布会亮点、新品抢先看!

匠心服务 智启新程 大咖云集 • 行业分析 • 预见趋势 新品首发 • 课程升级 • 育人交流 - 2025华清远见新品发布会 将于2024年8月23日在北京隆重举行 诚邀您的到来! 大会背景 本次新品发布会以 “匠心服务 智启新程”为主题, 邀请多家业内知名…

顶刊中的水刊!中科院1区TOP和“平替”双打组合,3天初审,25天可录用!

高分“水刊” 前面小编解析了一本MDPI旗下能源电力类期刊《Energies》 (👉详情参考:MDPI旗下Energies“平替”:这本SCI又“水”又稳,不卡背景,25天录用吊打同行) 本期解析一本顶刊&#xff0c…

【Python零基础学习】字典

文章目录 前言一、简单字典示例二、使用字典三、字典遍历四、嵌套总结 前言 Python 字典 是一种非常强大且灵活的数据结构,它允许你通过键(key)来存储和检索值(value)。想象一下,字典就像一个巨大的电话簿…

免费分享一套SpringBoot+Vue员工管理(职工管理,考勤管理,奖惩管理,合同管理)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue员工管理(职工管理,考勤管理,奖惩管理,合同管理)管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue员工管理(职工管理,考勤…

Redis远程字典服务器(6) —— list类型详解

目录 一,基本情况 二,list常用命令 2.1 lpush,lrange 2.2 对于“下标越界”的思考 2.3 lpushx,rpush,rpushx 2.4 lpop,rpop 2.5 lindex,linsert,llen 2.6 lrem 2.7 ltrim…

基于B站的热门视频数据分析与情感分析【关联性、主题、情感分析】

目录 2 研究内容 2.1 主要研究内容 2.2 拟解决的关键问题 2.2.1热门视频特征的识别和提取 2.2.2情感分析与用户反馈 2.3技术路线 2.3.1数据收集 2.3.2数据预处理 2.3.3数据挖掘 2.3.4 数据可视化 2.4可行性分析 2.4.1技术可行性 2.4.2数据可行性 2.4.3经济可行性 2.5数据库设计…

vba发送邮件功能实现方法:如何调试测试?

vba发送邮件的配置步骤流程?vba发送邮件的安全指南? VBA是一种常用于自动化Office应用程序的编程语言。利用VBA发送邮件功能,用户可以实现自动化发送邮件的任务,无需手动操作。AokSend将详细探讨如何通过调试与测试来确保VBA发送…

ThreadLoad如何防止内存溢出

优质博文:IT-BLOG-CN 从 ThreadLocalMap看 ThreadLocal使用不当的内存泄漏问题 【1】基础概念 : 首先我们先看看ThreadLocalMap的类图,我们知道 ThreadLocal只是一个工具类,他为用户提供get、set、remove接口操作实际存放本地变…

MT7621+MT7915(MT7905)+MT7975 (W7621A6G-SDK)编译固件与升级固件方法

一、搭建开发环境,编译固件。 1、安装在Ubuntu 14.04.5 x86_64系统后,然后安装下面命令行。 $ sudo apt-get install git g make libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip wget python xz-utils vim zlibc zlib1g zlib1g…

XSS---DOM破坏靶场复现

目录 一、OK,Boomer 一、网址: 二、源码分析: 三、 解决思路: 1.页面中的元素可以通过id和name直接取出来 2.覆盖 3.覆盖方法 四、ToString 五、setTimeout函数 六、使用框架白名单 七、成功绕过 ​编辑 二、案例分析…

才来鱼厂实习 1 个月,就转正了!

大家好,我是程序员鱼皮。昨天,我给才来我们公司 实习一个月 的前端开发同学转正了,直接发了正式 Offer!这个转正速度,放眼到所有公司中,我相信也是炸裂的。 看小伙子那么激动,让我回想到了 19 年…

认识 bufferbloat

很多人并不理解 bufferbloat 的本质,我引用《计算机网络-自顶向下方法(第 8 版)》第四章的一个解释: 很形象的比喻,buffer 就像盐,不可或缺,适量增味,过量食物就不能吃了。高血压患者更有所感受&#xff…