我正在尝试制作一个动画,在其中我可以看到某些区域如何通过复杂函数进行转换。具体来说,现在我想看看单位圆盘是如何通过单应性变换的。
令 $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,我无法查看。我想要具体的一行代码,我不知道这种语言,实际上今天是我很长时间以来第一次编写代码。
我尝试在网上寻找解决方案,但失败了。
函数complex_to_R3是Manim中的一个辅助函数,它将复数转换为笛卡尔坐标系中的3D点。这就是为什么它的名称中有“3”而不是“2”。在此上下文中,它用于将表示复平面中的点的复数转换为 3D 点,以便它们可以在场景中可视化。
要限制映射的域并避免被零除,您可以在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 处的点。