翼度科技»论坛 编程开发 python 查看内容

manim边做边学--复数平面

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
所谓复数平面,就是一种二维坐标系统,用于几何表示复数的场景,其中横轴代表实部,纵轴代表虚部。
每个点对应一个唯一的复数,反之亦然,这种表示方法使得复数的加法、乘法等运算可以通过直观的图形变换来理解。
ComplexPlane是Manim库中用于处理复数平面的类。
它不仅提供了标准的笛卡尔坐标系,还特别针对复数操作进行了优化,使得复数及其变换的可视化变得更加直观。
通过 ComplexPlane,我们可以轻松地绘制出复数点、向量以及执行复数变换,如旋转、缩放等。
本篇将介绍Manim中的ComplexPlane对象以及一些常用的使用示例。
1. 主要参数

ComplexPlane继承自上一篇介绍的NumberPlane,
ComplexPlane没有自己特有的参数,和NumberPlane的参数是一样的。
参数名称类型说明x_rangeSequence[float]直角平面的横坐标轴范围,间隔y_rangeSequence[float]直角平面的纵坐标轴范围,间隔x_lengthfloat直角平面宽度y_lengthfloat直角平面高度background_line_styledict直角平面背景网格线的样式faded_line_styledict淡化网格线的样式,用于辅助背景网格线faded_line_ratioint定义淡化网格线与背景网格线的比例make_smooth_after_applying_functionsbool应用函数后是否进行平滑处理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],最后再给坐标轴加上刻度值。
  1. plane = ComplexPlane(
  2.     x_range=[-5, 5],
  3.     y_range=[-4, 4],
  4.     x_length=6,
  5.     y_length=4,
  6. )
  7. # 加上刻度值
  8. plane.add_coordinates()
复制代码

3.2. 复数点的标记

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

3.3. 复数运算

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

3.4. 复数变换

最后,是复数点经过一个函数变换后,在复数平面上显示新的位置。
示例中先初始4个点,然后经过函数$ f(x)=2^x $的变换后,显示其变换后的位置。
其中用到了ComplexPlane的主要方法n2p和p2n。
  1. # 创建复数平面
  2. plane = ComplexPlane(
  3.     x_range=[-5, 5],
  4.     y_range=[-5, 5],
  5. )
  6. plane.add_coordinates()
  7. d1 = LabeledDot(
  8.     label=MathTex("1"),
  9.     point=plane.n2p(2 + 1j),
  10. )
  11. d2 = LabeledDot(
  12.     label=MathTex("2"),
  13.     point=plane.n2p(2 + 3j),
  14. )
  15. d3 = LabeledDot(
  16.     label=MathTex("3"),
  17.     point=plane.n2p(-2 - 2j),
  18. )
  19. d4 = LabeledDot(
  20.     label=MathTex("4"),
  21.     point=plane.n2p(-3 + 2j),
  22. )
  23. self.add(d1, d2, d3, d4)
  24. # 变换后点的位置
  25. pd1 = np.exp2(plane.p2n(d1.get_center()))
  26. pd2 = np.exp2(plane.p2n(d2.get_center()))
  27. pd3 = np.exp2(plane.p2n(d3.get_center()))
  28. pd4 = np.exp2(plane.p2n(d4.get_center()))
复制代码

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(complex_plane.py),
下载地址: 完整代码 (访问密码: 6872)

来源:https://www.cnblogs.com/wang_yb/p/18494562
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具