manim边做边学--复数平面
所谓复数平面,就是一种二维坐标系统,用于几何表示复数的场景,其中横轴代表实部,纵轴代表虚部。
每个点对应一个唯一的复数,反之亦然,这种表示方法使得复数的加法、乘法等运算可以通过直观的图形变换来理解。
ComplexPlane是Manim库中用于处理复数平面的类。
它不仅提供了标准的笛卡尔坐标系,还特别针对复数操作进行了优化,使得复数及其变换的可视化变得更加直观。
通过 ComplexPlane,我们可以轻松地绘制出复数点、向量以及执行复数变换,如旋转、缩放等。
本篇将介绍Manim中的ComplexPlane对象以及一些常用的使用示例。
1. 主要参数
ComplexPlane继承自上一篇介绍的NumberPlane,
ComplexPlane没有自己特有的参数,和NumberPlane的参数是一样的。
| 参数名称 | 类型 | 说明 |
|---|---|---|
| x_range | Sequence[float] | 直角平面的横坐标轴范围,间隔 |
| y_range | Sequence[float] | 直角平面的纵坐标轴范围,间隔 |
| x_length | float | 直角平面宽度 |
| y_length | float | 直角平面高度 |
| background_line_style | dict | 直角平面背景网格线的样式 |
| faded_line_style | dict | 淡化网格线的样式,用于辅助背景网格线 |
| faded_line_ratio | int | 定义淡化网格线与背景网格线的比例 |
| make_smooth_after_applying_functions | bool | 应用函数后是否进行平滑处理 |
2. 主要方法
和NumberPlane一样,ComplexPlane也包含了坐标系统CoordinateSystem类提供的方法,
不过,在复数平面中,我比较常用的是以下3个方法:
| 名称 | 说明 |
|---|---|
| add_coordinates | 给复数平面的坐标轴添加刻度数值 |
| n2p(number_to_point) | 根据复数得到此复数在复数平面上的位置 |
| p2n(point_to_number) | 根据复数平面上的位置得到对应的复数 |
3. 使用示例
下面通过示例来演示复数平面ComplexPlane的多种功能,包括复数平面的网格与坐标轴,复数点的标记与展示、复数平面上的函数图像、复数变换动画等。
让ComplexPlane成为我们展示复数概念和性质的有力工具。
3.1. 网格与坐标轴
创建一个复数平面ComplexPlane,绘制网格线和坐标轴,设置实部的范围[-5, 5],虚部的范围[-4, 4],最后再给坐标轴加上刻度值。
plane = ComplexPlane(
x_range=[-5, 5],
y_range=[-4, 4],
x_length=6,
y_length=4,
)
# 加上刻度值
plane.add_coordinates()

3.2. 复数点的标记
在复数平面坐标上添加2个复数点,再给这两个点添加标签,显示其复数的值。
# 创建复数平面
plane = ComplexPlane(
x_range=[-5, 5],
y_range=[-5, 5],
)
plane.add_coordinates()
# 添加复数的点
d1 = Dot(plane.n2p(3 + 2j))
d2 = Dot(plane.n2p(-4 - 2j))

3.3. 复数运算
复数平面上添加两个点,然后计算这两个复数相加的结果,并将计算过程在复数平面上用动画显示出来。
# 创建复数平面
plane = ComplexPlane(
x_range=[-1, 8],
y_range=[-1, 8],
)
plane.add_coordinates()
# 初始的两个点
d1 = Dot(plane.n2p(2 + 1j))
d2 = Dot(plane.n2p(2 + 4j))
# 相加后的点
d3 = Dot(plane.n2p(4 + 5j))

3.4. 复数变换
最后,是复数点经过一个函数变换后,在复数平面上显示新的位置。
示例中先初始4个点,然后经过函数$ f(x)=2^x $的变换后,显示其变换后的位置。
其中用到了ComplexPlane的主要方法n2p和p2n。
# 创建复数平面
plane = ComplexPlane(
x_range=[-5, 5],
y_range=[-5, 5],
)
plane.add_coordinates()
d1 = LabeledDot(
label=MathTex("1"),
point=plane.n2p(2 + 1j),
)
d2 = LabeledDot(
label=MathTex("2"),
point=plane.n2p(2 + 3j),
)
d3 = LabeledDot(
label=MathTex("3"),
point=plane.n2p(-2 - 2j),
)
d4 = LabeledDot(
label=MathTex("4"),
point=plane.n2p(-3 + 2j),
)
self.add(d1, d2, d3, d4)
# 变换后点的位置
pd1 = np.exp2(plane.p2n(d1.get_center()))
pd2 = np.exp2(plane.p2n(d2.get_center()))
pd3 = np.exp2(plane.p2n(d3.get_center()))
pd4 = np.exp2(plane.p2n(d4.get_center()))

4. 附件
文中的代码只是关键部分的截取,完整的代码共享在网盘中(complex_plane.py),
下载地址: 完整代码 (访问密码: 6872)
manim边做边学--复数平面的更多相关文章
- 边做边学入门微信小程序之仿豆瓣评分
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
- Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain
近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- 【Leetcode 做题学算法周刊】第四期
首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...
- 做fzu oj 1045 做减法学到的sprintf()函数
题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...
- 【Leetcode 做题学算法周刊】第一期
首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...
- 【Leetcode 做题学算法周刊】第二期
首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...
- 【Leetcode 做题学算法周刊】第三期
首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...
- 【Leetcode 做题学算法周刊】第六期
首发于微信公众号<前端成长记>,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 11 ...
- 【Leetcode 做题学算法周刊】第七期
首发于微信公众号<前端成长记>,写于 2020.01.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 12 ...
随机推荐
- 传奇人物:“Linux之父”林纳斯·托瓦兹(Linus Torvalds)
偶然看到一个视频: https://www.youtube.com/watch?v=H32IXRkPjHA 林纳斯·托瓦兹(Linus Torvalds)是当之无愧的技术领袖.尤其是那句Just fo ...
- MindSpore 建立神经网络
代码原地址: https://www.mindspore.cn/tutorial/zh-CN/r1.2/model.html 建立神经网络: import mindspore.nn as nn cla ...
- 结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体
前言 solidworks草图大师,基本的使用过程. 所有的零件基础都是从平面绘制开始,然后凸出来厚度. 本篇绘制一个简单的立方体,熟悉基本操作. 立方体绘制过程 选取一个平面绘制一个 ...
- 安卓如何设置开机启动某个程序?init.rc给你搞定
一.如何设置开机启动某个程序? 1.需求描述 最近有个项目需要在Android开机启动之后,自动执行一个C语言编写的程序:pengd 该程序运行时需要修改网络ip地址及其他网络操作,所以需要root权 ...
- 到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc?一文帮你梳理基础概念【科普】
前言 有粉丝问我到底什么是ARM,搞不清楚Cortex.arm内核.arm架构.ARM指令集.soc这些概念都是什么关系,下面一口君给大家整理一下关于ARM相关的一些概念. 1.ARM既可以认为是一个 ...
- SPI协议,MCP2515裸机驱动详解
SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM,FLASH, ...
- 5 个有趣的 Python 开源项目「GitHub 热点速览」
本期,我从上周的开源热搜项目中精心挑选了 5 个有趣.好玩的 Python 开源项目. 首先是 PyScript,它可以让你直接在浏览器中运行 Python 代码,不仅支持在 HTML 中嵌入,还能安 ...
- Spherical Voxelization
Spherical Voxelization 标签: voxelization AI 摘要: 文档介绍了球面体素化的过程,包括重要的类和方法,如ConvertToSphericalVoxel和sphe ...
- 操作 JAR 文件
列出 JAR 文件内容 使用 jar 命令来列出 JAR 文件的内容: jar tf myapp.jar -t 选项表示列出文件,-f 表示指定 JAR 文件. 解压 JAR 文件 使用 jar 命令 ...
- Vue.js 异步组件传参
本文主要展示一下如何给异步组件进行参数传递: 通过 h 函数就可以啦 versions: vue@3.2.13 子组件 Async.vue <template> <div> & ...