Manim中SurroundingRectangle提前反向擦除的实现方法
实现方法
不需要叠加额外的黑色描边矩形模拟效果,直接通过动画组的时间偏移配置,让矩形的创建动画未播放完成时就启动反向擦除动画即可,全程只需要一个SurroundingRectangle对象,不会引入额外遮挡元素。
核心逻辑是利用AnimationGroup的lag_ratio参数控制两个动画的启动间隔:lag_ratio代表前一个动画播放到对应比例的进度时,后一个动画自动启动。只要把这个值设为小于1,就能实现创建、擦除动画的时间重叠,达到「描边刚绘制到一半就反向擦除」的效果。
可直接运行的代码
class Test(Scene): def construct(self): contfrac = MathTex("[2;4,1,2]") surrect1 = SurroundingRectangle(contfrac[0][1], buff=0.05, stroke_width=2.5) self.play(Write(contfrac)) # 调整lag_ratio数值可以控制擦除启动的时机: # 数值越小,擦除启动越早,矩形露出的完整度越低 # 要对齐之前叠黑边的效果,直接把lag_ratio设为0.15即可 self.play( AnimationGroup( Create(surrect1), Uncreate(surrect1), lag_ratio=0.15, run_time=1.15 # 和原方案两个动画叠加的总时长对齐 ) ) self.wait()
方案优势
- 不需要额外创建第二个同尺寸矩形,场景里没有多余Mobject
- 不存在黑边遮挡其他元素、背景非纯黑时穿帮的问题
- 效果和之前模拟的视觉表现完全一致,参数调整更直观:直接改
lag_ratio就能控制擦除时机,改run_time就能控制动画总速度。
内容的提问来源于stack exchange,提问作者Mihail Hurmuzov
相关产品推荐
相关产品推荐

