%%manim -v WARNING -qh s3
class s3(Scene):
def construct(self):
t0 = Text("碳原子轨道的杂化", font="STZhongsong")
self.play(DrawBorderThenFill(t0))
self.wait(0.5)
# 注意此时的碳为t0变换过去的
C = Text("C", font="Sitka Banner").scale(3)
self.play(Transform(t0,C))
orbit = MathTex("2s^22p_x^12p_y^12p_z^0")
t1 = Text("最外层电子", font="STZhongsong").scale(0.5).next_to(orbit, DOWN)
v1 = VGroup(orbit, t1).next_to(t0, DOWN)
self.play(GrowFromPoint(v1, v1.get_center(), rate_func=rate_functions.smooth))
self.wait()
self.play(FadeOut(t1, rate_func=rate_functions.smooth), t0.animate.scale(0.5))
self.play(t0.animate.move_to(np.array([-3,1.5,0])), orbit.animate.move_to(np.array([2,1.5,0])), rate_func=rate_functions.smooth)
# 注意要在移动之后再定位(.get_center())
a1 = SVGMobject(r"D:\manimSVG\axis.svg").scale(0.03).scale(0.8).move_to(t0.get_center())
a2 = a1.copy().rotate(45*DEGREES)
a3 = a1.copy().rotate(90*DEGREES)
self.play(GrowFromPoint(a1, t0.get_center(), rate_func=rate_functions.smooth), GrowFromPoint(a2, t0.get_center(), rate_func=rate_functions.smooth), GrowFromPoint(a3, t0.get_center(), rate_func=rate_functions.smooth))
s = SVGMobject(r"D:\manimSVG\s.svg").scale(0.8)
px = SVGMobject(r"D:\manimSVG\p.svg").rotate(135*DEGREES).next_to(s, RIGHT, buff=1.6)
py = SVGMobject(r"D:\manimSVG\p.svg").rotate(270*DEGREES).next_to(px, RIGHT, buff=1.6)
pz = SVGMobject(r"D:\manimSVG\p.svg").next_to(py, RIGHT, buff=1.6)
v2 = VGroup(s, px, py, pz).move_to(np.array([0,-1.5,0]))
s0 = t0.copy()
px0 = a2.copy()
py0 = a1.copy()
pz0 = a3.copy()
self.play(Transform(s0,s))
self.play(Transform(px0,px))
self.play(Transform(py0,py))
self.play(Transform(pz0,pz))
o1 = MathTex("s").move_to(s.get_center()+1.5*DOWN).scale(1.3)
o2 = MathTex("p_x").move_to(px.get_center()+1.5*DOWN).scale(1.3)
o3 = MathTex("p_y").move_to(py.get_center()+1.5*DOWN).scale(1.3)
o4 = MathTex("p_z").move_to(pz.get_center()+1.5*DOWN).scale(1.3)
v3 = VGroup(o1, o2, o3, o4)
self.play(Write(v3))
self.wait()
d1 = Dot(s.get_center() + 0.4*LEFT, color=BLUE)
d2 = Dot(s.get_center() + 0.4*RIGHT, color=BLUE)
d3 = Dot(px.get_center() + 0.5*LEFT + 0.5*DOWN, color=BLUE)
d4 = Dot(py.get_center() + 0.7*RIGHT, color=BLUE)
self.play(GrowFromPoint(d1, d1.get_center(), rate_func=rate_functions.smooth), GrowFromPoint(d2, d2.get_center(), rate_func=rate_functions.smooth), GrowFromPoint(d3, d3.get_center(), rate_func=rate_functions.smooth), GrowFromPoint(d4, d4.get_center(), rate_func=rate_functions.smooth))
self.play(
Rotate(d1,angle=2*PI,about_point=s.get_center(), rate_func=rate_functions.smooth),
Rotate(d2,angle=2*PI,about_point=s.get_center(), rate_func=rate_functions.smooth),
Rotate(d3,angle=2*PI,about_point=px.get_center() + 0.4*LEFT + 0.4*DOWN, rate_func=rate_functions.smooth),
Rotate(d4,angle=2*PI,about_point=py.get_center() + 0.56*RIGHT, rate_func=rate_functions.smooth)
)
self.wait()
# sp3
v4 = VGroup(a1,a2,a3,s0,px0,py0,pz0,d1,d2,d3,d4)
sp3 = SVGMobject(r"D:\manimSVG\sp3.svg").move_to(t0.get_center()).scale(1.5)
orbit2 = MathTex("sp^3").move_to(orbit.get_center())
self.play(Transform(v4,sp3), Transform(orbit, orbit2))
self.play(FadeOut(v3), orbit.animate.scale(2))
self.wait()
sp31 = SVGMobject(r"D:\manimSVG\hybrid.svg")
sp32 = sp31.copy().rotate(-105*DEGREES).next_to(sp31, RIGHT, buff=1.6)
sp33 = sp31.copy().rotate(-150*DEGREES).next_to(sp32, RIGHT, buff=1.6)
sp34 = sp31.copy().rotate(120*DEGREES).next_to(sp33, RIGHT, buff=1.6)
v6 = VGroup(sp31,sp32,sp33,sp34).move_to(np.array([0,-1.5,0]))
sp310 = v4[0:6].copy()
sp320 = v4[6:12].copy()
sp330 = v4[18:24].copy()
sp340 = v4[12:18].copy()
self.play(Transform(sp310, sp31))
self.play(Transform(sp320, sp32))
self.play(Transform(sp330, sp33))
self.play(Transform(sp340, sp34))
oo1 = MathTex("sp^3").move_to(sp310.get_center()+1.5*DOWN).scale(1.3)
oo2 = MathTex("sp^3").move_to(sp320.get_center()+1.5*DOWN).scale(1.3)
oo3 = MathTex("sp^3").move_to(sp330.get_center()+1.5*DOWN).scale(1.3)
oo4 = MathTex("sp^3").move_to(sp340.get_center()+1.5*DOWN).scale(1.3)
ooo1 = MathTex(r"\frac{1}{4} s+\frac{3}{4} p").move_to(oo1.get_center())
ooo2 = MathTex(r"\frac{1}{4} s+\frac{3}{4} p").move_to(oo2.get_center())
ooo3 = MathTex(r"\frac{1}{4} s+\frac{3}{4} p").move_to(oo3.get_center())
ooo4 = MathTex(r"\frac{1}{4} s+\frac{3}{4} p").move_to(oo4.get_center())
v5 = VGroup(oo1, oo2, oo3, oo4)
self.play(Write(v5))
self.play(Transform(oo1,ooo1), Transform(oo2,ooo2), Transform(oo3,ooo3), Transform(oo4,ooo4))
dd1 = Dot(sp310.get_center() + 0.6*UP, color=BLUE)
dd2 = Dot(sp320.get_center() + 0.5*RIGHT + 0.15*DOWN, color=BLUE)
dd3 = Dot(sp330.get_center() + 0.2*RIGHT + 0.6*DOWN, color=BLUE)
dd4 = Dot(sp340.get_center() + 0.6*LEFT + 0.3*DOWN, color=BLUE)
dv = VGroup(dd1,dd2,dd3,dd4)
self.play(GrowFromPoint(dd1, dd1.get_center(), rate_func=rate_functions.smooth), GrowFromPoint(dd2, dd2.get_center(), rate_func=rate_functions.smooth), GrowFromPoint(dd3, dd3.get_center(), rate_func=rate_functions.smooth), GrowFromPoint(dd4, dd4.get_center(), rate_func=rate_functions.smooth))
self.play(
Rotate(dd1,angle=2*PI,about_point=dd1.get_center() + 0.2*DOWN, rate_func=rate_functions.smooth),
Rotate(dd2,angle=2*PI,about_point=dd2.get_center() + 0.1*UP + 0.1*LEFT, rate_func=rate_functions.smooth),
Rotate(dd3,angle=2*PI,about_point=dd3.get_center() + 0.2*UP, rate_func=rate_functions.smooth),
Rotate(dd4,angle=2*PI,about_point=dd4.get_center() + 0.1*UP + 0.1*RIGHT, rate_func=rate_functions.smooth)
)
# sp2
v7 = VGroup(v4,sp310,sp320,sp330,sp340,dd1,dd2,dd3,dd4)
sp2 = SVGMobject(r"D:\manimSVG\sp2.svg").move_to(t0.get_center()).scale(1.5)
orbit3 = MathTex("sp^2").move_to(orbit.get_center())
self.play(Transform(v7,sp2), Transform(orbit, orbit3))
self.play(FadeOut(v5), orbit.animate.scale(2))
self.wait()
sp21 = SVGMobject(r"D:\manimSVG\hybrid.svg").rotate(-90*DEGREES)
sp22 = SVGMobject(r"D:\manimSVG\hybrid.svg").rotate(45*DEGREES).next_to(sp21, RIGHT, buff=1.6)
sp23 = SVGMobject(r"D:\manimSVG\hybrid.svg").rotate(120*DEGREES).next_to(sp22, RIGHT, buff=1.6)
sp24 = SVGMobject(r"D:\manimSVG\p.svg").next_to(sp23, RIGHT, buff=1.6)
v8 = VGroup(sp21,sp22,sp23,sp24).move_to(np.array([0,-1.5,0]))
sp210 = v7[0:6].copy()
sp220 = v7[6:12].copy()
sp230 = v7[12:18].copy()
sp240 = v7[18:].copy()
self.play(Transform(sp210, sp21))
self.play(Transform(sp220, sp22))
self.play(Transform(sp230, sp23))
self.play(Transform(sp240, sp24))
ooo1 = MathTex("sp^2").move_to(sp210.get_center()+1.5*DOWN).scale(1.3)
ooo2 = MathTex("sp^2").move_to(sp220.get_center()+1.5*DOWN).scale(1.3)
ooo3 = MathTex("sp^2").move_to(sp230.get_center()+1.5*DOWN).scale(1.3)
ooo4 = MathTex("p_z").move_to(sp240.get_center()+1.5*DOWN).scale(1.3)
v9 = VGroup(ooo1, ooo2, ooo3, ooo4)
self.play(Write(v9))
oooo1 = MathTex(r"\frac{1}{3} s+\frac{2}{3} p").move_to(ooo1.get_center())
oooo2 = MathTex(r"\frac{1}{3} s+\frac{2}{3} p").move_to(ooo2.get_center())
oooo3 = MathTex(r"\frac{1}{3} s+\frac{2}{3} p").move_to(ooo3.get_center())
self.play(Transform(ooo1,oooo1), Transform(ooo2,oooo2), Transform(ooo3,oooo3))
ddd1 = Dot(sp210.get_center() + 0.6*RIGHT, color=BLUE)
ddd2 = Dot(sp220.get_center() + 0.5*LEFT + 0.5*UP, color=BLUE)
ddd3 = Dot(sp230.get_center() + 0.5*LEFT + 0.3*DOWN, color=BLUE)
ddd4 = Dot(sp240.get_center() + 0.4*UP, color=BLUE)
ddv = VGroup(ddd1,ddd2,ddd3,ddd4)
self.play(Write(ddv))
self.play(
Rotate(ddd1,angle=2*PI,about_point=ddd1.get_center() + 0.2*LEFT, rate_func=rate_functions.smooth),
Rotate(ddd2,angle=2*PI,about_point=ddd2.get_center() + 0.1*DOWN + 0.1*RIGHT, rate_func=rate_functions.smooth),
Rotate(ddd3,angle=2*PI,about_point=ddd3.get_center() + 0.1*RIGHT + 0.1*UP, rate_func=rate_functions.smooth),
Rotate(ddd4,angle=2*PI,about_point=ddd4.get_center() + 0.1*UP, rate_func=rate_functions.smooth)
)
#sp
v10 = VGroup(v7,sp210,sp220,sp230,sp240,ddd1,ddd2,ddd3,ddd4)
a1 = SVGMobject(r"D:\manimSVG\axis.svg").scale(0.03).scale(0.8).move_to(t0.get_center())
a2 = a1.copy().rotate(45*DEGREES)
a3 = a1.copy().rotate(90*DEGREES)
sp = VGroup(a1,a2,a3).move_to(t0.get_center())
orbit4 = MathTex("sp").move_to(orbit.get_center())
self.play(Transform(v10,sp), Transform(orbit, orbit4))
self.play(FadeOut(v9), orbit.animate.scale(2))
self.wait()
sp1 = SVGMobject(r"D:\manimSVG\hybrid.svg").rotate(90*DEGREES)
sp2 = SVGMobject(r"D:\manimSVG\hybrid.svg").rotate(-90*DEGREES).next_to(sp1, RIGHT, buff=1.6)
sp3 = SVGMobject(r"D:\manimSVG\p.svg").rotate(135*DEGREES).next_to(sp2, RIGHT, buff=1.6)
sp4 = SVGMobject(r"D:\manimSVG\p.svg").next_to(sp3, RIGHT, buff=1.6)
v11 = VGroup(sp1,sp2,sp3,sp4).move_to(np.array([0,-1.5,0]))
sp10 = a1[0:6].copy()
sp20 = a1[6:12].copy()
sp30 = sp[1].copy()
sp40 = sp[2].copy()
self.play(Transform(sp10, sp1))
self.play(Transform(sp20, sp2))
self.play(Transform(sp30, sp3))
self.play(Transform(sp40, sp4))
ooo1 = MathTex("sp").move_to(sp10.get_center()+1.5*DOWN).scale(1.3)
ooo2 = MathTex("sp").move_to(sp20.get_center()+1.5*DOWN).scale(1.3)
ooo3 = MathTex("p").move_to(sp30.get_center()+1.5*DOWN).scale(1.3)
ooo4 = MathTex("p").move_to(sp40.get_center()+1.5*DOWN).scale(1.3)
v9 = VGroup(ooo1, ooo2, ooo3, ooo4)
self.play(Write(v9))
oooo1 = MathTex(r"\frac{1}{2} s+\frac{1}{2} p").move_to(ooo1.get_center())
oooo2 = MathTex(r"\frac{1}{2} s+\frac{1}{2} p").move_to(ooo2.get_center())
self.play(Transform(ooo1,oooo1), Transform(ooo2,oooo2))
ddd1 = Dot(sp10.get_center() + 0.6*LEFT, color=BLUE)
ddd2 = Dot(sp20.get_center() + 0.6*RIGHT, color=BLUE)
ddd3 = Dot(sp30.get_center() + 0.5*LEFT + 0.5*DOWN, color=BLUE)
ddd4 = Dot(sp40.get_center() + 0.4*UP, color=BLUE)
ddv = VGroup(ddd1,ddd2,ddd3,ddd4)
self.play(Write(ddv))
self.play(
Rotate(ddd1,angle=2*PI,about_point=ddd1.get_center() + 0.2*RIGHT, rate_func=rate_functions.smooth),
Rotate(ddd2,angle=2*PI,about_point=ddd2.get_center() + 0.2*LEFT, rate_func=rate_functions.smooth),
Rotate(ddd3,angle=2*PI,about_point=ddd3.get_center() + 0.1*RIGHT + 0.1*UP, rate_func=rate_functions.smooth),
Rotate(ddd4,angle=2*PI,about_point=ddd4.get_center() + 0.1*UP, rate_func=rate_functions.smooth)
)
vall = VGroup(t0,v10,orbit,sp10,sp20,sp30,sp40,v9,ddv)
self.play(FadeOut(vall))
%%manim -v WARNING -qh s4
class s4(Scene):
def construct(self):
t1 = Text("链烷烃的构象", font="STZhongsong")
self.play(DrawBorderThenFill(t1))
self.wait(0.5)
self.play(FadeOut(t1))
yiwanchem = MathTex("CH_3CH_3")
yiwan = Text("乙烷", font="STZhongsong").scale(0.5).next_to(yiwanchem, DOWN)
v1 = VGroup(yiwanchem, yiwan)
self.play(Write(v1))
self.wait(0.5)
jujia1 = SVGMobject(r"D:\manimSVG\jujia1.svg").scale(2.4)
jujia2 = SVGMobject(r"D:\manimSVG\jujia2.svg").scale(2).move_to(np.array([-3,1,0]))
self.play(Transform(v1,jujia1))
self.wait(0.5)
self.play(v1.animate.move_to(np.array([-3,1,0])))
jujia = Text("锯架式", font="STZhongsong").scale(0.5).move_to(np.array([-3,-2,0]))
typ1 = Text("交叉型", font="STZhongsong").scale(0.8).move_to(np.array([0,-3,0]))
typ2 = Text("重叠型", font="STZhongsong").scale(0.8).move_to(np.array([0,-3,0]))
newman1 = SVGMobject(r"D:\manimSVG\newman1.svg").scale(2).move_to(np.array([3,1,0]))
newman2 = SVGMobject(r"D:\manimSVG\newman2.svg").scale(2).move_to(np.array([3,1,0]))
niuman = Text("纽曼式", font="STZhongsong").scale(0.5).move_to(np.array([3,-2,0]))
self.play(Write(jujia), Write(typ1), Write(newman1), Write(niuman), run_time=1)
self.wait(0.5)
self.play(Transform(v1, jujia2), Transform(newman1, newman2), Transform(typ1, typ2))
self.wait(1)
vall = VGroup(v1,newman1,typ1,jujia,niuman)
self.play(FadeOut(vall))