为什么Manim中应用复变换时出现不符合预期的异常表现?
异常原因
你遇到的表现不符合理论预期是两个Manim内置图形的特性导致的:
- 你创建的
Line是有限长度线段,不是理论上的无限直线:你定义的线段仅覆盖x=2、y∈[0,5]的范围,做倒数变换后自然只能得到过原点的圆的一段弧,不会显示完整的圆 - 你创建的
Circle是离散采样的矢量图形:这个过原点的圆做倒数变换时,原点附近的采样点经过1/z计算后会得到数值极大的坐标,直接超出画布显示范围,自然看不到完整的直线效果
修复方案
有两个优化方向可以复现理论效果:
- 把有限线段替换为足够长的线段,模拟无限直线的效果
- 过原点的圆的倒数变换不要直接对Circle对象操作,改用参数方程直接生成变换后的直线,或者采样时避开原点附近的区间
修正后的参考代码如下:
from manim import * class ComplexFix(Scene): def construct(self): d = ComplexPlane() self.play(Create(d)) # 用足够长的线段模拟x=2的无限直线 line = Line(start=[2, -100, 0], end=[2, 100, 0], stroke_width=3, color=RED) self.add(line) # 长线段做倒数变换,会显示接近完整的过原点的圆 self.play(line.animate.apply_complex_function(lambda z:1/z), run_time=5) self.wait() # 直接用参数方程生成过原点的圆(圆心(1,0)半径1)的倒数变换结果,即直线x=0.5 transformed_circle = ParametricFunction( lambda t: np.array([0.5, 100*(t-0.5), 0]), t_range = [0, 1], color = BLUE, stroke_width = 3 ) self.play(Create(transformed_circle), run_time=3)
内容的提问来源于stack exchange,提问作者shahrOZe
相关产品推荐
相关产品推荐

