manim边学边做--Matrix
在代数问题中,矩阵是必不可少的工具,manim
中提供了一套展示矩阵(Matrix
)的模块,
专门用于在动画中显示矩阵格式的数据。
关于矩阵的类主要有4个:
- Matrix:通用的矩阵
- IntegerMatrix:元素是整数的矩阵
- DecimalMatrix:元素包含小数的矩阵
- MobjectMatrix:元素可以是图形的矩阵
其实IntegerMatrix
,DecimalMatrix
,MobjectMatrix
都是继承自Matrix
的,
只要掌握了Matrix
即可,其他几个不过是Matrix
的特殊情况。Matrix
系列在manim
各个模块中的位置大致如上图中所示。
1. 主要参数
参数基本都是为了控制矩阵的显示样式。
参数名称 | 类型 | 说明 |
---|---|---|
matrix | str | 一个二维数组,也就是矩阵的数值 |
v_buff | float | 矩阵元素的行间距 |
h_buff | float | 矩阵元素的列间距 |
bracket_h_buff | float | 矩阵括弧和元素之间的距离 |
bracket_v_buff | float | 矩阵括弧的高度 |
add_background_rectangles_to_entries | bool | 是否给矩阵元素加一个矩形背景 |
include_background_rectangle | bool | 是否给整个矩阵加一个矩形背景 |
element_to_mobject | Mobject对象 | 用Mobject对象作为矩阵元素 |
element_to_mobject_config | dict | element_to_mobject的额外参数 |
element_alignment_corner | list[float] | 元素对齐的角 |
left_bracket | str | 左括弧的类型 |
right_bracket | str | 右括弧的类型 |
stretch_brackets | bool | 是否拉长括弧以适应矩阵元素 |
bracket_config | dict | 括弧的额外参数 |
总的来看,这些参数是对矩阵3个部分的设置,矩阵背景,矩阵元素和矩阵的括弧。
2. 主要方法
Matrix
提供了几个方法让我们可以动态的控制矩阵的展示效果。
名称 | 说明 |
---|---|
add_background_to_entries | 给矩阵添加背景 |
get_brackets | 获取括弧对象 |
get_rows | 获取矩阵行 |
get_columns | 获取矩阵列 |
set_column_colors | 设置矩阵 列的颜色 |
set_row_colors | 设置矩阵 行的颜色 |
get_entries | 获取矩阵元素 |
get_mob_matrix | 获取矩阵的Mobject元素 |
3. 使用示例
下面演示如何使用上面主要参数和主要方法。
3.1. 矩阵元素行列间隔
参数v_buff
和h_buff
可以调节矩阵元素的行间隔和列间隔。
m = Matrix(data, v_buff=2)
m = Matrix(data, h_buff=2)
3.2. 矩阵元素与括弧间隔
矩阵中的元素与括弧之间的设置使用参数bracket_h_buff
和bracket_v_buff
。
m = Matrix(data, bracket_h_buff=1.5)
m = Matrix(data, bracket_v_buff=1.5)
3.3. 括弧的类型
括弧的类型默认是中括号[]
,也可以调整为小括号和大括号,甚至左右使用不同的括号。
m = Matrix(
data,
left_bracket="(",
right_bracket="]",
)
m = Matrix(
data,
right_bracket=")",
left_bracket="\{",
)
m = Matrix(
data,
left_bracket="[",
right_bracket="\}",
)
3.4. 矩阵背景
矩阵和其中元素的背景是黑色的,如果动画的背景不是黑色的,
那么,我们可以通过参数include_background_rectangle
保留整个矩阵的黑色背景,
或者使用参数add_background_rectangles_to_entries
只保留矩阵元素的黑色背景。
Matrix(
data,
include_background_rectangle=True,
)
Matrix(
data,
add_background_rectangles_to_entries=True,
)
3.5. 定制矩阵元素
矩阵中的元素不只是数字,也可以用latex
公式,甚至是图形。
# 公式元素
data = [["y=x^2", 2], [3, "\\pi r^2"]]
m = Matrix(data)
# 图形元素
a11 = Triangle(color=GREEN)
a12 = RegularPolygon(n=10, color=YELLOW)
a21 = Circle()
a22 = Star(7, outer_radius=2, density=2)
data = [[a11, a12], [a21, a22]]
m = MobjectMatrix(data)
3.6. 行列操作
上面演示的是参数的使用,下面演示如何使用Matrix
提供的方法,动态的改变Matrix
的样式。
首先用get_rows
和get_columns
方法得到行列对象,再分别设置它们的颜色。
m = Matrix(data)
rows = m.get_rows()
rows[0].set_color(RED)
rows[1].set_color(GREEN)
m = Matrix(data)
columns = m.get_columns()
columns[0].set_color(BLUE)
columns[1].set_color(YELLOW)
3.7. 矩阵元素操作
除了行列,还有个方法get_entries
可以更细致的操作矩阵的每个元素。
# 每个元素设置不同的颜色
m = Matrix(data)
entries = m.get_entries()
entries[0].set_color(RED)
entries[1].set_color(GREEN)
entries[2].set_color(BLUE)
entries[3].set_color(YELLOW)
# 特定元素加上边框
m = Matrix(data)
entries = m.get_entries()
m.add(SurroundingRectangle(entries[0]))
m.add(SurroundingRectangle(entries[3]))
3.8. 括弧操作
最后,还可以使用方法get_brackets
获取矩阵的括弧对象,然后对其进行一些操作。
m = Matrix(data)
brackets = m.get_brackets()
brackets[0].set_color(RED)
brackets[1].set_color(GREEN)
m = Matrix(data)
brackets = m.get_brackets()
self.play(Indicate(brackets))
4. 附件
文中完整的代码放在网盘中了(matrix.py
),
下载地址: 完整代码 (访问密码: 6872)
manim边学边做--Matrix的更多相关文章
- 学EE做硬件找工作不如学CS做软件,为什么会这样?
学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...
- 牛腩学Kotlin做Android应用
牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...
- php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...
- html5-3 html5标签(热点地图如何实现)(边学边做)
html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl 自定义列表dt 自定义标题dd 自定义列表内容 2. ...
- 第一份开发工作,边学边做android
我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...
- 边学边做,简单的 GraphQL 实例
项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- LabVIEW Actor Framwork (2)________ 边学边做server&client
回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...
- 牛腩学ASP.NET CORE做博客(视频)
牛腩学习ASP.NET CORE做的项目,边学边做. 目录: 01-dotnetcore网站部署到centos7系统上(时长 2:03:16) 02-前期准备及项目搭建 (时长:0:23:35) 03 ...
- 牛腩学用MUI做手机APP
斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
随机推荐
- Java21 GA新特性-虚拟线程详解
本文转载至:虚拟线程 - VirtualThread源码透视 - throwable - 博客园 (cnblogs.com) 一. 前提 JDK19于2022-09-20发布GA版本,该版本提供了虚拟 ...
- gossh nohup部署退出解决方法
ssh 会话远程nohup ./node> node.out & 执行指令,会话退出以后也会导致服务并没有部署成功. 应该使用以下命令:nohup ./node > node.ou ...
- Docker环境如何配置?使用阿里云OOS一步搞定!
背景介绍 系统运维管理OOS及扩展程序 系统运维管理OOS(CloudOps Orchestration Service)针对在阿里云ECS实例上部署应用和驱动的复杂性,特别设计了扩展程序,旨在简化用 ...
- 京东web端h5st—4.7逆向分析
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...
- Dva.js 快速上手指南
先说些废话 最近在开发React技术栈的项目产品,对于数据状态的管理使用了Dva.js,作为一个资深的ow玩家,我看到这个名字第一反应就是----这不是ow里的一个女英雄吗?仔细阅读了官方文档之后,发 ...
- 算法学习笔记(30):Kruskal 重构树
Kruskal 重构树 这是一种用于处理与最大/最小边权相关的一个数据结构. 其与 kruskal 做最小生成树的过程是类似的,我们考虑其过程: 按边权排序,利用并查集维护连通性,进行合并. 如果我们 ...
- MySQL 存储函数及调用
1.mysql 存储函数及调用 在MySQL中,存储函数(Stored Function)是一种在数据库中定义的特殊类型的函数,它可以从一个或多个参数返回一个值.存储函数在数据库层面上封装了复杂的SQ ...
- WIN10 家庭版 罗技G hub 安装提示不兼容当前操作系统解决方法
WIN10 家庭版 罗技G hub 安装提示不兼容当前操作系统解决方法 解决方法: 下载Onboard Memory Manager就可以. --
- Java中创建对象的5种方式总结
引言 作为Java开发人员,我们每天都会代码中创建对象,但我们通常使用依赖管理系统,比如Spring框架,然后,这里有很多种创建对象的方式,本文就对Java创建对象的几种方式进行总结 五种创建方式 创 ...
- Java 对象转Map,Java Map转对象方法
Java 对象转Map,Java Map转对象方法 import com.alibaba.fastjson.JSON; import org.apache.commons.beanutils.Bean ...