首页 > 其他分享 >manim边学边做--立方体和棱柱体

manim边学边做--立方体和棱柱体

时间:2024-11-12 11:43:11浏览次数:1  
标签:Cube -- prism Prism cube 棱柱体 立方体 长方体 边学边

本篇介绍Manim中创建三维立体的两个常用对象:CubePrism

Cube在制作动画时,可以用于展示立体几何中的立方体概念,或者通过旋转、缩放等动画效果来帮助理解三维空间中的几何变换。

Prism是长方体,继承自Cube,与Cube相比,它可以更进一步设置不同的边长。

1. 主要参数

Cube的主要参数有:

参数名称 类型 说明
side_length float 立方体的边长
fill_opacity float 立方体的透明度
fill_color Color 立方体的颜色
stroke_width float 设置立方体边框的宽度

PrismCube的区别在于它没有side_length参数,取而代之是dimensions参数。

参数名称 类型 说明
dimensions tuple[float, float, float] 长方体的长,宽和高

Prismdimensions参数长宽高定义为同样的值时,就是Cube

2. 主要方法

CubePrism的没有特有的方法,对于通用的方法都支持,

比如shift(平移),rotate(旋转)和scale(缩放)等。

3. 使用示例

这个对象的使用比较简单,下面的示例演示其基本的使用和操作。

3.1. 默认显示

这个示例展示了如何在Manim中创建并显示一个立方体(Cube)和一个长方体(Prism)。

# 创建一个立方体
cube = Cube()
# 创建一个棱柱
prism = Prism()

3.2. 变换颜色

在这个示例中,首先创建了一个红色的立方体和一个蓝色的长方体。

接着,立方体逐渐变化为绿色,而长方体逐渐变化为黄色。

实际动画中,通过颜色的变换可以更好地演示形状属性的动态变化。

# 创建一个立方体
cube = Cube()
cube2 = Cube(fill_color=RED)

# 创建一个棱柱
prism = Prism()
prism2 = Prism(fill_color=GREEN)

3.3. 移动和旋转

此示例首先展示了一个立方体和一个长方体。

接下来,让立方体向右移动,而长方体向左移动,然后立方体顺时针旋转45度,而长方体则逆时针旋转45度。

这种移动和旋转的效果可以生动地展示三维空间中的几何变换。

# 创建一个立方体
cube = Cube(fill_color=RED)
# 创建一个棱柱
prism = Prism(fill_color=GREEN)

# 移动
self.play(
    cube.animate.shift(RIGHT),
    prism.animate.shift(LEFT),
)
# 旋转
self.play(
    cube.animate.rotate(PI / 4),
    prism.animate.rotate(-PI / 4),
)

3.4. 组合使用

在这个示例中,同样先创建一个立方体和一个长方体。

然后将这两个形状组合成一个整体,再整体向上移动,并旋转一个小角度。

这种组合使用的方式可以展示如何在Manim中处理和组织多个形状,以及如何对它们进行整体的动画效果。

# 创建一个立方体
cube = Cube(fill_color=RED)
# 创建一个棱柱
prism = Prism(fill_color=GREEN)
# 将立方体放在棱柱的右边
cube.next_to(prism, RIGHT)

# 组合使用
vg = VGroup(cube, prism)

# 整体移动组合
self.play(vg.animate.shift(UP))
# 整体旋转组合
self.play(vg.animate.rotate(PI / 2, axis=UP))

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(cube_prism.py),

下载地址: 完整代码 (访问密码: 6872)

标签:Cube,--,prism,Prism,cube,棱柱体,立方体,长方体,边学边
From: https://www.cnblogs.com/wang_yb/p/18541513

相关文章

  • 做题笔记(三)
    CF280D-k-MaximumSubsequenceSum\(\text{diff:}2800\)经典问题:求解区间\(k\)个不交子段的和的最大值。对于没有修改的版本,我们采用P6821[PA2012]Tanielinie的做法,首先将原序列连续的正(负)数缩成一个数,然后用加入正数,不断减少连续段(加入负数和删除正数),用堆维护即可......
  • Lombok
    Lombok使用:1、添加依赖<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> <scope>provided</scope></dependency>2、安装插件--lombok3、常用注解@S......
  • Maven打包项目的精准指定——流程管理
    作用    Maven不仅可以进行依赖管理的自动化,还可以自动化实现编译,打包,发布,等,也被成为构建流程生命周期(lifecycle)构成    Maven生命周期本身可以看做一个集合,在这个集合中包含了一系列阶段(phase)。也就是说Maven的生命周期由一系列阶段(phase)构成    但......
  • 如何正确导入mapstruct,同时避免编译时mapstruct与lombok冲突
    本文介绍编译时产生的冲突,导包时期产生的冲突请劳驾查找其他解决方法一般情况下只需要按照官网的导入即可,但如果同时使用了lombok,则需要小心。详细信息可以查看官网文档:MapStruct1.5.5.Final集成lombok注意:在编译测试的时候,一定先清理再编译。这样可以解决80%的报错问题......
  • 施耐德UNITY下使用ST编程计算最近一小时的均值
    昨晚学习练习了ST语言做最近60秒的分钟均值,今天继续做最近一小时的均值,1秒采集一次数据。在昨晚程序上增加功能,新建一个导出的功能块类型Average_Hour,定义下面的变量:旗下新建一个程序段Average_Hour,使用ST编程Minute1:=BCD_TO_INT(%SW51);Minute:=mod_int(Minute1,100);Second1......
  • flink job 提交到yarn 需要哪些配置文件 flink submit new job
    flinkjob提交到yarn需要哪些配置文件flinksubmitnewjob文章目录前言Standalone模式yarn模式前言本文介绍flink的任务提交模式。Standalone模式WebUI提交job打开flink的WebUI,在WebUI的SubmitNewJob提交jar包。Job参数:EntryClass:程序的入口,指定入口类(类的全限制名......
  • android sonar 库扫描 sonarlint扫描的问题
    androidsonar库扫描sonarlint扫描的问题今天要进行代码检查,所以我就装了一个插件SonarLint,先自己看看有啥问题,进行优化一下,并对遇到的问题做一个汇总SonarLint安装我用的是SonarLint,安装很好安装,我用的idea,找到setting里边的我这是安装完的,你选择下载就行,下载完了需要重启一下......
  • 多项式板子
    一、数组版本数组版本和poly版本都只涵盖目录中第\(4\sim10\)部分。namespacePoly{intp[maxn],q[maxn],r[maxn],w[maxn];intinum[maxn];intqpow(inta,intk){intres=1;for(;k;a=1ll*a*a%mod,k>>=1)if(k&1)res=1ll*res*a%......
  • 前端日期格式转换
    1.获取当前年月日时分秒constdate=newDate();constyear=date.getFullYear();constmonth=(date.getMonth()+1).toString().padStart(2,'0');//JavaScript的月份是从0开始的,所以需要加1constday=date.getDate();consthours=date.getH......
  • flink Uploaded Jars 路径 flink提交jar包
    flinkUploadedJars路径flink提交jar包漏洞描述:2019年11月11号,安全工程师HenryChen披露了一个ApacheFlink未授权上传jar包导致远程代码执行的漏洞。由于ApacheFlinkDashboard默认无需认证即可访问,通过上传恶意jar包并触发恶意代码执行,从而获取shell。影响范围<=1......