例:
tf=xtf2(1,'Demyanov和Tiffen-Demyanov 重排').to_corner(UL) t1=xn('脂肪族伯胺重氮化反应中发生的扩环或缩环反应称为 Demyanov 重排');t2=xn('若脂肪环上连有氨甲基,重排生成扩环的产物');t3=xn('若脂肪环上直接连有氨基,重排生成缩环的产物') g0=msm('g0').scale(0.8);h0=msm('h0').scale(0.8).shift(0.5*RIGHT);xms(g0,8,h0,5);g0.shift(1.3*UP);h0.shift(1.3*DOWN) g1=msm("g1").scale(1.3);g2=msm("g2");g3=msm("g3");g4=msm("g4").scale(1.3);g5=msm("g5");g6=msm("g6");f0=msm('f0');f00=msm('f00');xos(2,1,g1,g2,g3);xos(2,1,g4,g5,g6);xcoi(g1,g2,g3,g4,g5,g6);xs(f0,0,g5,6);xs(f00,0,g5,6);f0.to_edge(DOWN);f00.to_edge(DOWN) gn=msm('gn').scale(0.7).shift(1.5*UP);N=msm('d19');xs(N,0,g2,7);N.to_edge(DOWN);xc1(g3);g0.save_state() n1=xnf('此处形成碳正离子的方法在 W-M 重排中提到过');n2=xnf('重氮化后分解得到碳正离子');n3=xnf('扩环的动力之一是可以降低环张力(小环的环张力较大)');n4=xnf('随后碳正离子与水结合生成氧鎓盐,再失去质子变为醇')
这里narrator几乎已经不可简化了,但是如果能批量命名会更好:
texts = xn(t1='A', t2='B', t3='C')
然后是多个物体的摆放:
g0=msm('g0').scale(0.8);h0=msm('h0').scale(0.8).shift(0.5*RIGHT);xms(g0,8,h0,5);g0.shift(1.3*UP);h0.shift(1.3*DOWN)
这里可以和使用opacity定位Mobjects联系起来,xos()其实可以简化,不需要用第一个参数来分类,因为各个svg的大小不会相同,改进如下:
def xos(a, *args): # a是透明部分缩放尺度 # 所有的args尺度与第一个args相同
并且我认为xos()如果可以加入多重opacity缩放,那会更好(又存在一个问题,两者的缩放尺度怎么办呢)
并且建议加入预定义的svg,例如H2O,H+
xos()内能不能加入位置分布的函数?
目标:完成一个函数,使得可以完成所有初始化;或者缩放和位置各自一个函数
narrator简化的想法:
texts = {1:'A', 2:'B', 3:'C'} # 能看到t的编号 evaltexts() # 根据texts的长度进行自动化定义
标签:manim1.0,g5,scale,g0,shift,h0,msm,优化 From: https://www.cnblogs.com/daxiangcai/p/16607974.html