当前位置: 首页 > news >正文

python动画:manim实现多面体的创建

一,介绍

内容 多面体(discusses polyhedra),主要集中在一种称为多面体的几何形状类别,并突出介绍了五种柏拉图体(Platonic solids),这些是具有特殊性质的多面体类型。

多面体

  • 定义:多面体是一个三维几何体,具有平面多边形面、直边和顶点。面可以有不同的形状和大小,从而形成各种类型的多面体。

二,多面体的分类

1.十二面体(Dodecahedron)

  • 一个有12个面的多面体,每个面都是规则的五边形。它是五个柏拉图体之一。
  • Dodecahedron(edge_length=1, **kwargs)

    Dodecahedron(edge_length=1, **kwargs) 是一个表示十二面体(Dodecahedron)几何形状的函数,它通常是Python库(如matplotlibnumpy)中的一种创建三维几何形状的方法。以下是对这个函数及其参数的解释:

    函数说明

  • Dodecahedron:此函数用于创建一个十二面体对象,其面由正五边形构成。

  • 参数

    • edge_length:这是一个关键字参数,用于定义十二面体的边长。在这个例子中,默认值是 1。这意味着每条边的长度为 1 单位。
    • **kwargs:(http://t.csdnimg.cn/HjZwV)这是一个可变关键词参数,允许用户传入其他可选参数,例如颜色、透明度、旋转角度、尺寸等。这些参数的具体取决于使用的库声明的功能。

示例1:

from manim import *class DodecahedronScene(ThreeDScene):def construct(self):self.set_camera_orientation(edge_length=1,phi=75 * DEGREES, theta=30 * DEGREES,fill_color=RED)obj = Dodecahedron()self.add(obj)

示例2:

from manim import *  class DodecahedronScene01(ThreeDScene):  def construct(self):  # 设置初始相机角度  self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)  # 创建十二面体对象  obj = Dodecahedron()  # 定义每个面不同的颜色  colors = [  BLUE, GREEN, RED, YELLOW, ORANGE,  PURPLE, PINK, TEAL, GOLD, MAROON,  LIGHT_GRAY, DARK_GRAY  ]  # 给每个面上色并添加序号  for i, face in enumerate(obj.faces):  face.set_fill(colors[i % len(colors)], opacity=0.75)  # 设定颜色和透明度  # 为每个面添加序号  center = face.get_center()  # 获取面中心  number = Tex(str(i + 1)).move_to(center).set_color(WHITE)  self.add(number)  # 将对象添加到场景中并旋转  self.add(obj)  self.play(Rotate(obj, angle=TAU, run_time=10, rate_func=linear))  # 360度旋转  # 停顿使得我们可以看到最后的结果  self.wait()  

2.二十面体(Icosahedron)

  • 一个有20个面的多面体,每个面都是等边三角形。它也是五个柏拉图体之一。

Icosahedron(edge_length=1, **kwargs) 是 Manim 库中用于创建一个二十面体(Icosahedron)对象的构造函数。

Icosahedron(edge_length=1, **kwargs)

以下是其参数的解释:

参数解释:

  • edge_length: 这是一个数值,代表二十面体每条边的长度。默认值为 1。
  • kwargs: 这是可选的关键字参数,用于进一步自定义二十面体的属性,例如颜色、透明度等。例如,可以设置填充颜色、线条颜色和其他图形选项。

实现代码:

可以根据您的需求,以绿色填充表面,黑色填充顶点,红色填充边条如下:

from manim import *  class IcosahedronScene011(ThreeDScene):  def construct(self):  # 创建一个二十面体对象  icosahedron = Icosahedron(edge_length=1)  # 设置表面颜色为绿色  icosahedron.set_fill(GREEN, opacity=0.75)  # 设置边条颜色为红色  icosahedron.set_stroke(RED, width=1)  #icosahedron.set_color(WHITE)# 添加二十面体到场景中  self.add(icosahedron)  # 设置相机与视角  self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)  # 进行旋转动画  #self.play(Rotate(icosahedron, angle=TAU, run_time=10, rate_func=linear))   

3.八面体(Octahedron)

  • 一个有8个面的多面体,每个面都是等边三角形。它是五个柏拉图体之一。

示例1:

from manim import *class OctahedronScene(ThreeDScene):def construct(self):self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)obj = Octahedron(edge_length=2.5)self.add(obj)

4.给定坐标创建多面体

Polyhedron 是 Manim 中的一个类,用于创建多面体。它需要一些参数来定义其形状和外观。以下是参数的详细解释:

参数说明

  1. vertex_coords:

    • 类型:list of tuples
    • 描述:一个列表,包含多面体的每个顶点的坐标。例如,[(1, 1, 1), (1, -1, 1), ...]
  2. faces_list:

    • 类型:list of lists
    • 描述:一个列表,定义多面体的面。每个面由顶点的索引组成,表示该面是由哪些顶点构成。例如,[[0, 1, 2], [0, 2, 3], ...]
  3. faces_config:

    • 类型:dict(可选)
    • 描述:用于配置面外观的字典,例如颜色、透明度等。默认为空字典。
  4. graph_config:

    • 类型:dict(可选)
    • 描述:用于配置边和顶点的外观的字典,例如颜色、线宽等。默认为空字典。

示例1:

from manim import *  class SquarePyramidScene(ThreeDScene):  def construct(self):  # 设置摄像机视角  self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)  # 定义顶点坐标  vertex_coords = [  [1, 1, 0],   # 底面顶点1  [1, -1, 0],  # 底面顶点2  [-1, -1, 0], # 底面顶点3  [-1, 1, 0],  # 底面顶点4  [0, 0, 3],   # 顶点  [0, 0, -3]   # 底部顶点  ]  # 定义面,使用顶点索引  faces_list = [  [0, 1, 4],   # 面1  [1, 2, 4],   # 面2  [2, 3, 4],   # 面3  [3, 0, 4],   # 面4  [0, 1, 2, 3, 5]  # 底面  ]  # 创建多面体  pyramid = Polyhedron(vertex_coords, faces_list)  # 添加多面体到场景  self.add(pyramid)  

示例2:

下面的示例代码展示了如何使用 Polyhedron 创建一个简单的三角形面体,同时对面、边和顶点进行着色:

from manim import *  class SquarePyramidScene01 (ThreeDScene):  def construct(self):  self.set_camera_orientation(phi=65 * DEGREES, theta=30 * DEGREES)  # 定义顶点坐标  vertex_coords = [  (1, 1, 1),  (1, -1, 1),  (-1, -1, 1),  (-1, 1, 1),  (0, 0, -3),  ]  # 定义面,使用顶点索引  faces_list = [  [0, 1, 4],  [1, 2, 4],  [2, 3, 4],  [3, 0, 4],  [0, 1, 2, 3],  # 顶面  ]  # 创建多面体  polyhedron = Polyhedron(vertex_coords, faces_list) polyhedron.set_fill(RED, opacity=0.5)  polyhedron.set_stroke(YELLOW, width=1)# 添加多面体到场景  self.add(polyhedron)  

 5.四面体(正四面体)

Tetrahedron 是一个用于创建四面体(正四面体)对象的类。它可以在 3D 动画库 Manim 中使用,以便可视化和动画展示。以下是有关 Tetrahedron 类及其参数的详细解释:

函数及参数解释
Tetrahedron(edge_length=1, **kwargs) 
1. edge_length
  • 类型:浮点数(float
  • 默认值:1
  • 说明:这是四面体每条边的长度。如果你希望生成一个不同大小的四面体,只需设置该参数为所需的边长。例如,edge_length=2 将创建一个边长为 2 的四面体。
2. **kwargs
  • 类型:关键字参数(dict
  • 说明:这些是可选的额外参数,用于自定义四面体对象的属性。kwargs 可以包括各种属性,具体取决于 Manim 版本和 Tetrahedron 类的实现。有些常见的参数包括:
    • fill_color: 用于设置面填充的颜色。
    • stroke_color: 用于设置边的颜色。
    • opacity: 用于设置面颜色的透明度。
    • stroke_width: 用于设置边的宽度。
例子:

这是一个示例,展示如何使用 Tetrahedron 类创建一个四面体并设置一些关键字参数:

from manim import *  class TetrahedronScene01(ThreeDScene):  def construct(self):self.set_camera_orientation(phi=-125 * DEGREES, theta=30 * DEGREES)  # 创建一个边长为 2 的四面体,面为绿色,边为白色  tetrahedron = Tetrahedron(edge_length=2)tetrahedron.set_fill=GREENtetrahedron.set_stroke(WHITE, opacity=1)tetrahedron.set_stroke_width=2  # 添加到场景  self.add(tetrahedron)  

 

相关文章:

python动画:manim实现多面体的创建

一,介绍 内容 多面体(discusses polyhedra),主要集中在一种称为多面体的几何形状类别,并突出介绍了五种柏拉图体(Platonic solids),这些是具有特殊性质的多面体类型。 多面体 定义…...

数值计算引擎:搭建远程容器开发环境

Build VS Code Remote Docker Development Environment 大型CAE软件开发技术栈通常依赖多个第三方库,因此从零开始配置开发、编译、运行等环境通常较为繁琐。但随着公司的发展壮大,却经常需要为新加入的成员配备相应的开发环境;另外&#xf…...

二叉搜索树(Binary Search Tree)

1.二叉搜索树概念 二叉搜索树又称二叉排序树、二叉查找树,它或者是一棵空树,或者是具有以下性质的二叉树: 1. 非空左子树的所有键值小于其根节点的键值 2. 非空右子树的所有键值大于其根节点的键值 3. 左右子树也分别为二叉搜索树 二叉搜索树一般不支持…...

Yii2框架的初始化及执行流程

当 Yii2 框架执行 index.php 入口脚本后,内部执行逻辑和顺序可以概括如下: 1、加载相关配置文件和关键组件: 加载 Composer 自动加载器: require DIR . ‘/…/vendor/autoload.php’; 加载 Yii 框架文件: require D…...

2024.1-2024.2pycharm无法打开terminal命令行

2024版的idea或pycharm打开terminal时会发生如下问题: Cannot open Windows PowerShell Failed to start [C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe,或 Cannot open Command Prompt Failed to start [C:\Windows\system32\cmd.exe] 需要点击标…...

50ETF期权移仓是什么?50ETF期权移仓要注意什么?

今天带你了解50ETF期权移仓是什么?50ETF期权移仓要注意什么?当前火热的期权交易市场,“移仓”同样是一门非常重要的技术。上证50ETF期权投资的过程中,我们可以进行一定的移仓操作的,如果移仓操作得好,可以很…...

软件工程概述(上)

1、软件的概念、特点和分类 要了解软件工程,首先让我们重新认识一下软件。如今可以说是一个软件定义一切的时代,虽然人工智能发展的如火如荼,但究其本质,核心还是软件。那么,如何给软件下一个定义呢?软件又…...

阿里云ubuntu系统安装mysql8.0

一、安装mysql8.0 1.已安装其他版本的mysql,需要删除 若没有不需要此操作 1 #卸载MySQL5.7版本 2 apt remove -y mysql-client5.7* mysql-community-server5.7* 4 # 卸载5.7的仓库信息 5 dpkg-l | grep mysql | awk iprint $2} | xargs dpkg -P2.更新仓库 apt u…...

自己搭建远程桌面服务器-RustDesk 极简版

linux搭建RustDesk保姆间教程_rustdesk linux-CSDN博客https://blog.csdn.net/yzs2022/article/details/135136491 背景 在某公司工作,向日葵等远程办公软件均已屏蔽,无法使用(也没有明文规定不允许使用远程控制软件)&#xff0c…...

数字资产是什么?怎么产生?怎么增长?

数字资产是什么? 数字资产是指企业或个人拥有或控制的,以电子数据形式存在的,在日常活动中持有以备出售或处于生产过程中的非货币性资产。它涵盖了广泛的范围,包括但不限于数字货币、数字证券、数字艺术品、虚拟土地等。这些资产…...

Centos7升级gitlab(17)

在 CentOS 7 中将 GitLab 从版本 17.1.1 升级到 17.2.2,涉及以下步骤。请务必在升级前备份数据,以防止升级过程中出现问题导致数据丢失。 升级步骤 1. 备份 GitLab 数据 在升级之前,确保已经备份了 GitLab 的数据,包括数据库、…...

Zookeeper详解以及常见的高可用关联组件

一、ZooKeeper 详解 Apache ZooKeeper 是一个开源的分布式协调服务,用于分布式应用程序之间的协调和管理。ZooKeeper 提供了一个高效、可靠的服务来帮助管理分布式系统中的共享配置信息、命名、同步和组服务等。 二、主要特性 1. 高可用性 ZooKeeper 集群通过选…...

Docker Containerd初体验

Docker Containerd概述 ​ Containerd是一个开源的容器运行时,它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由Docker开发团队创建的,并在后来成为了一个独立的项目,被纳入了Cloud Native Computing Foundation(C…...

开始使用 AWS SAM CLI

了解如何使用 AWS SAM CLI 在本地调试 lambda 函数 欢迎来到雲闪世界。我们将学习 AWS SAM CLI 的概念。SAM 是无服务器 应用程序 模型的缩写,是 Amazon Web Services 提供的一个框架,可以利用它在本地机器上构建应用程序并将其直接部署到 AWS Lambdas。…...

RK3588 RTL8125BG调试

RTL8125B是一款PCIE转RJ45的网卡控制器芯片,在底层调试时只需配置PCIE即可 diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi index 798359eaf061..d8a7a43cdfa0 100755 --- a/arch/arm64/bo…...

Python自省(机制与函数)

Python 自省(Introspection)是一种强大的特性,它允许程序在运行时检查对象的类型、属性以及它们如何相互关联。这种能力让 Python 非常适合于快速开发、调试以及编写需要高度动态交互的代码。Python 的自省机制主要通过内置的函数和类型来实现…...

【JavaEE】JVM 内存区域划分,以及 Java 垃圾回收机制引用计数器,可达性分析等

目录 1. JVM执行流程 2. JVM运行时数据区 2.1 堆 2.2 Java虚拟机栈(线程私有) 2.3本地方法栈(线程私有) 2.4 程序计数器 2.5 元数据区 3. JVM的类加载机制 1) 加载 2) 验证 3) 准备 4) 解析 5) 初始化 双亲委派模型 4. java垃圾回收 4.1 死亡对象判断方法 a) …...

Web开发:C# MVC + Session机制实现授权免登录demo

token基础demo 【需求】 Home/Index 登录界面,校验成功后可以登录到Main/Index ,用户登录3分钟内关闭网站,再次访问Home/Index时可以免密登录Main/Index 【配置文件-Program.cs】 var builder WebApplication.CreateBuilder(args);// Add services t…...

【Qt】QWidget的font属性

QWidget的font属性 API说明 font() 获取当前 widget 的字体信息. 返回 QFont 对象. setFont(const QFont& font) 设置当前 widget 的字体信息. 关于Qfont 属性说明 family 字体家族. ⽐如 "楷体", "宋体", "微软雅⿊" 等. pointSiz…...

每天一个数据分析题(四百八十五)- 统计推断

假设检验中,关于p值说法正确的是? A. p值是在原假设成立时,样本观察结果发生的概率。 B. p值是接受原假设的概率 C. p值是相对样本统计量而言的 D. 用p值做决策比用域值做决策更准确 数据分析认证考试介绍:点击进入 题目来源…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

网站指纹识别

网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...