在 manim 中可视化单应性

问题描述 投票:0回答:1

我正在尝试制作一个动画,在其中我可以看到某些区域如何通过复杂函数进行转换。具体来说,现在我想看看单位圆盘是如何通过单应性变换的。

令 $f(z)= rac{2z-1}{z-2}$。我认为这个单应变换单位盘本身,我想以图形方式检查它。这是我的代码,它对复制、粘贴和尝试随机的事情有影响,直到它起作用。

from manim import *
import numpy as np

class homography(LinearTransformationScene):
    def construct(self):
        disc = Circle(radius=1, color=BLUE_B, fill_opacity=1)
        ring = AnnularSector(inner_radius=1, outer_radius=1.5, angle=360 * DEGREES, color=RED)
        point = Dot(point=np.array([1/2.,0.,0.]),radius=0.1,color=RED)
        "self.add_transformable_mobject(disc)"
        self.play(
            ApplyPointwiseFunction(
                lambda point: complex_to_R3((2*R3_to_complex(point)-1)/(R3_to_complex(point)-2)), disc
            )
            
        )
        self.play(
            ApplyPointwiseFunction(
                lambda point: complex_to_R3((2*R3_to_complex(point)-1)/(R3_to_complex(point)-2)), ring
            )
        )
        self.play(
            ApplyPointwiseFunction(
                lambda point: complex_to_R3((2*R3_to_complex(point)-1)/(R3_to_complex(point)-2)), point
            )    
        )
         
        self.wait()

我有一些问题: 1.函数complex_to_R3,它有什么作用?我找不到描述它的地方,我认为它将复平面更改为 R^2 平面,如果是的话为什么名称中是 3 而不是 2?

2.如何限制地图的域?现在 z=2 处的地图未定义。这在我的代码中不是问题,因为我只使用不包含 z=2 的区域,但如果我想查看半径为 2 的圆盘是如何转换的,那么由于除以 0,我无法查看。我想要具体的一行代码,我不知道这种语言,实际上今天是我很长时间以来第一次编写代码。

我尝试在网上寻找解决方案,但失败了。

python animation math complex-numbers manim
1个回答
0
投票
  1. 函数complex_to_R3是Manim中的一个辅助函数,它将复数转换为笛卡尔坐标系中的3D点。这就是为什么它的名称中有“3”而不是“2”。在此上下文中,它用于将表示复平面中的点的复数转换为 3D 点,以便它们可以在场景中可视化。

  2. 要限制映射的域并避免被零除,您可以在ApplyPointwiseFunction 内的lambda 函数中使用条件语句。以下是如何修改代码以限制域以排除 z=2 的示例:

    self.play( ApplyPointwiseFunction( lambda point: complex_to_R3((2*R3_to_complex(point)-1)/(R3_to_complex(point)-2)) if R3_to_complex(point) != 2 else np.array([0, 0, 0]), disc ) )

在此修改后的代码中,如果 R3_to_complex(point) 等于 2,则 lambda 函数将返回 [0, 0, 0] 而不是执行除法。这有效地从可视化中删除了 z = 2 处的点。

© www.soinside.com 2019 - 2024. All rights reserved.