首页 > 其他分享 >manim边做边学--复数平面

manim边做边学--复数平面

时间:2024-10-23 10:10:21浏览次数:4  
标签:ComplexPlane -- 边学 range plane 复数 平面 n2p manim

所谓复数平面,就是一种二维坐标系统,用于几何表示复数的场景,其中横轴代表实部,纵轴代表虚部。

每个点对应一个唯一的复数,反之亦然,这种表示方法使得复数的加法、乘法等运算可以通过直观的图形变换来理解。

ComplexPlaneManim库中用于处理复数平面的类。

它不仅提供了标准的笛卡尔坐标系,还特别针对复数操作进行了优化,使得复数及其变换的可视化变得更加直观。

通过 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的主要方法n2pp2n

# 创建复数平面
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)

标签:ComplexPlane,--,边学,range,plane,复数,平面,n2p,manim
From: https://www.cnblogs.com/wang_yb/p/18494562

相关文章

  • c++计时器
    c++计时器鼠标版#include<bits/stdc++.h>#include<windows.h>#definekd(vk)(GetAsyncKeyState(vk)&0x8000?1:0)usingnamespacestd;#defineSHAKE30voidShakeWindow(){ RECTrect; HWNDhwnd=GetConsoleWindow(); GetWindowRect(hwnd,&rect);......
  • 使用 Elm 语言识别英文数字验证码
    环境准备确保你的Elm环境已设置好。虽然Elm本身不直接支持HTTP请求和图像处理,但我们可以使用外部API来完成这些功能。首先,安装Elm:bashnpminstall-gelm接着创建一个新的Elm项目:bashelminit并在elm.json中添加依赖:json{"dependencies":{"elm/http":......
  • 除了无界鼠标mouse without borders之外还有什么其他的软件可以两台电脑共享一套键鼠
    除了无界鼠标(MouseWithoutBorders)之外,还有几款常见的软件可以实现两台或多台电脑共享一套键盘和鼠标。以下是一些替代选择:1.Synergy平台支持:Windows、macOS、Linux特点:Synergy是一款非常流行的跨平台键鼠共享软件,允许你在多台电脑之间无缝切换。同样支持不同操作系统间......
  • Maven的安装,环境变量配置及基本使用
    Maven简介Maven是一个项目管理和构建自动化工具,专注于Java应用的开发。它通过项目对象模型(POM)来管理项目的构建、报告和文档。Maven的主要特点包括依赖管理和项目信息管理。Maven的核心功能依赖管理:Maven能够管理项目中所有jar包的版本,确保团队成员和不同的开发环境......
  • 自定义组件-插槽
      ......
  • [考试总结] 2024.10.23 最近的几场考试
    从2024.10.14考图论起。2024.10.14考图论T1转前缀和,跑差分约束或者贪心,贪心用[树状数组、并查集](?)实现。注意前缀和的额外限制(差分约束)、贪心实现的正确性。T2相当于连无向边,两点连通就能得到差。注意到没必要连接两个已经连通的点,于是会形成一棵树。带权并查集或者用......
  • perl语言入门
    数据类型数字1.25#小数4.5e10#科学计数法255#整数64_4#可以加下划线,等同于6440377#八进制的3770xff#十六进制的ff0b11111111#二进制的11111111字符串单引号双引号都可以使用。单引号类似于原意字符串,如果需要用到转义符或者单引号需要在前面加\,\表示转义符,'表......
  • 通讯录管理:BusyContacts 支持云同步的跨平台联系人管理macOS电脑软件
    BusyContacts是一款专为Mac设计的通讯录管理软件,支持与AppleContacts/iCloud、Google、Exchange等云服务同步,实现跨平台联系人管理。它提供便捷的联系人创建、查找和管理功能,利用标签系统进行分类,整合社交网络信息,并支持智能过滤器和活动清单展示联系人全面信息。此外,BusyContac......
  • Playwright 源码 启动 Chromium 的命令
    问:Playwright无声无息地启动了Chromium,到底底层执行了个啥子?带着问题,开启探险之旅!!!......
  • 6个关于JavaScript的超级技巧
    对象属性简写问题:将变量分配给对象属性可能会重复。解决方案:使用属性简写来简化对象创建。动态属性名称问题:使用动态属性名称创建对象可能很冗长。解决方案:使用计算属性名称动态创建对象属性。数组方法:map()、、filter()和reduce()问题:对数组进行迭代可能会重复。解决方案......