环己烷的构象

%%manim -v WARNING -qh s1
class s1(ThreeDScene):
    def construct(self):
        n1 = Text('在正六边形中,各个内角为120°').to_edge(DOWN).scale(0.6)
        n2 = Text('但是sp³杂化的碳原子正常键角为109°').to_edge(DOWN).scale(0.6)
        n3 = Text('事实上,环己烷的六个碳原子不在同一平面上').to_edge(DOWN).scale(0.6)
        n4 = Text('这样可以保持sp³杂化的正常键角').to_edge(DOWN).scale(0.6)
        c_tetrahedron = Tetrahedron(edge_length=4)
        center_c = MathTex('C').scale(1).move_to(c_tetrahedron.get_center())
        tet_line1 = DashedLine(start=c_tetrahedron.get_corner(DR), end=center_c.get_center())
        tet_line2 = DashedLine(start=c_tetrahedron.get_corner(DL), end=center_c.get_center())
        tet_line3 = DashedLine(start=c_tetrahedron.get_corner(UR), end=center_c.get_center())
        tet_line4 = DashedLine(start=c_tetrahedron.get_corner(UL), end=center_c.get_center())
        vg_tet = VGroup(c_tetrahedron,center_c)
        vg_tet_line = VGroup(tet_line1, tet_line2, tet_line3, tet_line4)
        self.play(Write(c_tetrahedron),Write(center_c),run_time=1.5)
        self.play(DrawBorderThenFill(n1))
        self.play(Transform(n1, n2))
        self.wait(1)
        self.play(FadeOut(n1))
        self.play(Write(vg_tet_line))
        tet_arc = Angle(tet_line2,tet_line1,radius=0.4)
        tet_arc_number = Text('109º28´',font="STZhongsong").scale(0.6).next_to(tet_arc.get_center()+0.2*UP)  
        vg_tet_line_arc = VGroup(tet_line1, tet_line2, tet_line3, tet_line4, tet_arc, tet_arc_number)
        self.play(Write(tet_arc), Write(tet_arc_number))
        self.play(FadeOut(vg_tet_line_arc))
        self.play(Rotate(vg_tet, angle=2*PI,axis=np.array([0,1,0])), run_time=4)
        self.play(FadeOut(vg_tet))
        
        d1 = Dot(radius=0.1).move_to(np.array([2,0,0])).set_color(RED)
        d2 = d1.copy().rotate(about_point=np.array([0,0,0]), angle=60*DEGREES).set_color(TEAL)
        d3 = d2.copy().rotate(about_point=np.array([0,0,0]), angle=60*DEGREES).set_color(TEAL)
        d4 = d3.copy().rotate(about_point=np.array([0,0,0]), angle=60*DEGREES).set_color(RED)
        d5 = d4.copy().rotate(about_point=np.array([0,0,0]), angle=60*DEGREES).set_color(TEAL)
        d6 = d5.copy().rotate(about_point=np.array([0,0,0]), angle=60*DEGREES).set_color(TEAL)
        dvg = VGroup(d1,d2,d3,d4,d5,d6)
        self.play(Write(dvg))
        l1 = Line(d1.get_center(),d2.get_center()).add_updater(lambda z: z.become(Line(d1.get_center(),d2.get_center())))
        l2 = Line(d2.get_center(),d3.get_center()).add_updater(lambda z: z.become(Line(d2.get_center(),d3.get_center())))
        l3 = Line(d3.get_center(),d4.get_center()).add_updater(lambda z: z.become(Line(d3.get_center(),d4.get_center())))
        l4 = Line(d4.get_center(),d5.get_center()).add_updater(lambda z: z.become(Line(d4.get_center(),d5.get_center())))
        l5 = Line(d5.get_center(),d6.get_center()).add_updater(lambda z: z.become(Line(d5.get_center(),d6.get_center())))
        l6 = Line(d6.get_center(),d1.get_center()).add_updater(lambda z: z.become(Line(d6.get_center(),d1.get_center())))
        lvg = VGroup(l1,l2,l3,l4,l5,l6)
        self.play(Write(lvg), DrawBorderThenFill(n3))
        self.play(Transform(n3,n4))
        self.wait(1)
        self.play(FadeOut(n3))
        vghex = VGroup(dvg,lvg)
        vt1 = ValueTracker(120)
        vt2 = ValueTracker(120)
        anglenum1 = DecimalNumber(unit="^{\circ}", color=RED).add_updater(lambda x: x.set_value(vt1.get_value())).next_to(d1)
        anglenum2 = DecimalNumber(unit="^{\circ}", color=TEAL).add_updater(lambda x: x.set_value(vt2.get_value())).next_to(d6, DOWN)
        self.play(Write(anglenum1),Write(anglenum2))
        self.wait(1.5)
        num1 = np.cos(54.4/180*PI) - np.cos(1/3*PI)
        num2 = np.cos(1/6*PI) - np.cos(35.5/180*PI)
        self.play(d1.animate.shift(num1*RIGHT),d4.animate.shift(num1*LEFT),d2.animate.shift(num2*DOWN),d3.animate.shift(num2*DOWN),d5.animate.shift(num2*UP),d6.animate.shift(num2*UP),vt1.animate.set_value(109),vt2.animate.set_value(125.5))
        self.wait(1)
        self.play(Rotate(vghex, angle=45*DEGREES, axis=np.array([1,0,0])), anglenum2.animate.shift(0.7*UP))
        self.wait()
        dl1 = DashedLine(start=d2,end=d6, dashed_ratio=0.3)
        dl2 = DashedLine(start=d3,end=d5, dashed_ratio=0.3)
        self.play(Write(dl1), Write(dl2))
        rvg1 = VGroup(d1,l1,l6)
        rvg2 = VGroup(d4,l3,l4)
        t1 = Text('椅型',font="STZhongsong").scale(0.7).to_edge(DOWN).shift(2*LEFT)
        t2 = Text('船型',font="STZhongsong").scale(0.7).to_edge(DOWN).shift(2*RIGHT)
        self.play(Rotate(rvg1, angle = -30*DEGREES, axis=dl1.get_unit_vector()), Rotate(rvg2, angle = -30*DEGREES, axis=dl2.get_unit_vector()), anglenum1.animate.shift(0.2*UP + 0.1*LEFT), vt2.animate.set_value(109))
        self.play(FadeIn(t1))
        self.wait(1)
        self.play(FadeOut(t1))
        self.play(Rotate(rvg1, angle = 30*DEGREES, axis=dl1.get_unit_vector()), Rotate(rvg2, angle = 30*DEGREES, axis=dl2.get_unit_vector()), anglenum1.animate.shift(0.2*DOWN + 0.1*RIGHT), vt2.animate.set_value(125.5))
        self.wait(1.5)
        self.play(Rotate(rvg1, angle = -30*DEGREES, axis=dl1.get_unit_vector()), Rotate(rvg2, angle = 30*DEGREES, axis=dl2.get_unit_vector()), anglenum1.animate.shift(0.2*UP + 0.1*LEFT), vt2.animate.set_value(109))
        self.play(FadeIn(t2))
        self.wait(1)
        self.play(FadeOut(t2))
        l1.clear_updaters()
        l2.clear_updaters()
        l3.clear_updaters()
        l4.clear_updaters()
        l5.clear_updaters()
        l6.clear_updaters()
        lvg = VGroup(l1,l2,l3,l4,l5,l6)
        vgall = VGroup(dvg, lvg, dl1, dl2, anglenum1, anglenum2)
        self.play(FadeOut(vgall))

 

%%manim -v WARNING -qh s2
class s2(ThreeDScene):
    def construct(self):
        hex1 = SVGMobject(r'D:\manimSVG\hex1.svg').scale(2)
        hex1c = SVGMobject(r'D:\manimSVG\hex1.svg').scale(2)
        hex2 = SVGMobject(r'D:\manimSVG\hex2.svg').scale(1.6)
        hex3 = SVGMobject(r'D:\manimSVG\hex3.svg').scale(1.6)
        note1 = Text('椅型',font="STZhongsong")
        hex2[6:18].set_color(RED)
        hex2[18:].set_color(BLUE)
        hex3[0:12].set_color(RED)
        hex3[12:24].set_color(BLUE)
        self.play(DrawBorderThenFill(note1))
        self.play(note1.animate.next_to(hex1,DOWN))
        self.play(note1.animate.scale(0.6))
        self.play(Write(hex1))
        t1 = Text('椅型环己烷的氢原子可以分成两组',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t2 = Text('一组的C-H键与分子对称轴平行,叫做直立键或a键',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t3 = Text('另一组的C-H键与对称轴大致垂直,略向下或向上倾斜',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t4 = Text('叫做平伏键或e键',font="STZhongsong").scale(0.6).to_edge(DOWN)
        ae1 = Text('axial', color=RED).scale(0.7).next_to(hex1,UP)
        ae2 = Text('equatorial', color=BLUE).scale(0.7).next_to(hex1,UP)
        self.play(DrawBorderThenFill(t1))
        self.play(Transform(t1,t2))
        self.play(hex1[6:36].animate.set_color(RED))
        self.play(Write(ae1))
        self.wait(1)
        self.play(Transform(t1,t3),Transform(ae1,ae2),hex1[6:36].animate.set_color(WHITE))
        self.play(hex1[36:].animate.set_color(BLUE))
        self.wait(1)
        self.play(Transform(t1,t4))
        self.wait(1)
        self.play(FadeOut(ae1), FadeOut(note1), FadeOut(t1))
        t5 = Text('一个椅型构象可以通过碳碳键的旋转变成另一个椅型构象',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t6 = Text('此时a键转为e键,e键转为a键',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t7 = MarkupText("<span font_family='STZhongsong'>每种构象滞留的时间在</span> 10<sup>-4</sup>~10<sup>-5</sup>s<span font_family='STZhongsong'>量级</span>").scale(0.6).to_edge(DOWN)
        self.play(Transform(hex1, hex2), DrawBorderThenFill(t5))
        self.play(Transform(t5,t6))
        self.play(Transform(hex1, hex3), run_time=3)
        self.wait(1)
        self.play(Transform(t5,t7))
        self.wait(1)
        self.play(FadeOut(t5))
        self.play(Transform(hex1, hex2), run_time=0.5, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex3), run_time=0.4, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex2), run_time=0.3, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex3), run_time=0.2, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex2), run_time=0.1, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex3), run_time=0.1, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex2), run_time=0.1, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex3), run_time=0.1, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex2), run_time=0.1, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex3), run_time=0.1, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex2), run_time=0.1, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex3), run_time=0.2, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex2), run_time=0.3, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex3), run_time=0.4, rate_func=rate_functions.smooth)
        self.play(Transform(hex1, hex2), run_time=0.5, rate_func=rate_functions.rush_from)
        vgme = VGroup(hex2[1], hex2[2], hex2[6], hex2[7], hex2[24], hex2[25]).copy()
        n1 = Text('在椅型构象中,C-C单键的键长和键角',font="STZhongsong").scale(0.6).to_edge(DOWN)
        n2 = Text('都与正常的C-C的键长及sp³杂化的键角相符',font="STZhongsong").scale(0.6).to_edge(DOWN)
        n3 = Text('因此这种构象既没有键长形变引起的内能升高,也没有角张力',font="STZhongsong").scale(0.6).to_edge(DOWN)
        meth = SVGMobject(r'D:\manimSVG\meth.svg').scale(2)
        self.add(vgme)
        self.play(FadeOut(hex1))
        self.play(vgme.animate.move_to(ORIGIN), DrawBorderThenFill(n1))
        self.play(Transform(n1,n2))
        self.wait(1)
        self.play(vgme.animate.scale(1.5))
        self.play(Transform(vgme,meth), Transform(n1,n3))
        self.play(vgme.animate.set_color_by_gradient(BLUE, PINK), run_time=2)
        self.play(vgme.animate.set_color_by_gradient(PINK, GREEN), run_time=2)
        self.play(FadeOut(n1))
        self.play(Transform(vgme, hex2))
        ar1 = DoubleArrow(start=hex2[8].get_center(), end=hex2[10].get_center(),stroke_width=2, tip_length=0.2)
        ar2 = DoubleArrow(start=hex2[24].get_center(), end=hex2[16].get_center(),stroke_width=2, tip_length=0.2)
        ar3 = DoubleArrow(start=hex2[18].get_center(), end=hex2[26].get_center(), tip_length=0.2)
        nt1 = MathTex('251pm').scale(0.6).next_to(ar1, 0.2*UP)
        nt2 = MathTex('250pm').scale(0.6).next_to(ar2, 0.2*DOWN)
        nt3 = MathTex('249pm').scale(0.6).next_to(ar3, 0.2*RIGHT)
        a1 = Text('此时任意两个氢原子之间的距离均大于两倍氢原子的范德华半径(240pm)',font="STZhongsong").scale(0.6).to_edge(DOWN)
        a2 = Text('故氢原子之间没有排斥力,不会使体系的内能升高',font="STZhongsong").scale(0.6).to_edge(DOWN)
        self.play(GrowFromPoint(ar1, ar1.get_center()), GrowFromPoint(ar2, ar2.get_center()), GrowFromPoint(ar3, ar3.get_center()))
        vgnt = VGroup(nt1,nt2,nt3)
        self.play(Write(vgnt))
        self.play(DrawBorderThenFill(a1))
        self.wait(1)
        self.play(Transform(a1,a2))
        self.wait(1)
        self.play(FadeOut(a1))
        vgarr = VGroup(vgnt, ar1, ar2, ar3)
        self.play(FadeOut(vgarr))
        um = SVGMobject(r'D:\manimSVG\um.svg').scale(1.6).shift(3*RIGHT)
        self.add(vgme)
        self.play(Transform(vgme, hex1c.scale(0.7)))
        self.play(vgme.animate.shift(3*LEFT))
        note1 = Text('锯架式',font="STZhongsong").scale(0.5).next_to(vgme, DOWN)
        note2 = Text('Newman式',font="STZhongsong").scale(0.5).next_to(um, DOWN).set_y(note1.get_y())
        self.play(Write(note1))
        self.play(DrawBorderThenFill(um))
        self.play(Write(note2))
        t1 = Text('但环中任意两个相邻碳原子的构象都是邻交叉型构象',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t2 = Text('以对交叉型构象为比较对象',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t3 = Text('每个邻交叉型构象会使体系的内能升高约3.8kJ/mol',font="STZhongsong").scale(0.6).to_edge(DOWN)
        self.play(DrawBorderThenFill(t1))
        self.wait(0.5)
        self.play(Transform(t1, t2))
        self.wait(1)
        self.play(Transform(t1, t3))
        self.wait(1)
        self.play(FadeOut(t1))
        notess1 = Text('椅型',font="STZhongsong")
        vgback = VGroup(note1, note2, um, vgme)
        self.play(Transform(vgback, notess1))
        self.play(FadeOut(vgback))

 

%%manim -v WARNING -qh s3
# Text("", font="STZhongsong")
# SVGMobject(r"D:\manimSVG\.svg")
# , rate_func=rate_functions.smooth
class s3(Scene):
    def construct(self):
        l = SVGMobject(r'D:\manimSVG\boat.svg').scale(2).shift(0.5*DOWN)
        r = SVGMobject(r'D:\manimSVG\newman.svg').scale(1.2).shift(3*RIGHT)
        note0 = Text('船型',font="STZhongsong").scale(0.6).next_to(l,0.2*DOWN).shift(0.5*UP)
        note1 = Text('船型',font="STZhongsong")
        self.play(DrawBorderThenFill(note1))
        self.play(note1.animate.scale(0.6))
        self.play(note1.animate.move_to(note0.get_center()))
        self.play(Write(l))
        self.play(l[10].animate.set_color(TEAL),l[12].animate.set_color(TEAL))
        t = Text('“船头”“船尾”向内的两个氢原子之间的距离为183pm',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t2 = Text('小于两个氢原子范德华半径之和240pm',font="STZhongsong").scale(0.6).to_edge(DOWN)
        t3 = Text('故这两个氢原子间有排斥力,体系的内能会升高',font="STZhongsong").scale(0.6).to_edge(DOWN)
        ar1 = DoubleArrow(start=l[10].get_center(), end=l[12].get_center(), stroke_width=2, tip_length=0.2, color=TEAL)
        mt = MathTex("183pm").next_to(ar1, 0.2*UP).scale(0.8)
        circle = Circle(radius=2, color=TEAL, fill_opacity=0.3).move_to(l[10].get_center())
        circle2 = Circle(radius=2, color=TEAL, fill_opacity=0.3).move_to(l[12].get_center())
        self.play(GrowFromPoint(ar1, ar1.get_center()), rate_func=rate_functions.smooth)
        self.play(Write(mt))
        self.play(DrawBorderThenFill(t))
        self.wait(0.5)
        self.play(Transform(t,t2))
        self.play(GrowFromPoint(circle, circle.get_center()), rate_func=rate_functions.smooth)
        self.play(GrowFromPoint(circle2, circle2.get_center()), rate_func=rate_functions.smooth)
        self.play(Transform(t,t3))
        self.wait(1)
        vgfa = VGroup(circle, circle2, ar1, mt, note1)
        self.play(FadeOut(t), FadeOut(vgfa))
        a1 = Text('环己烷船型构象可视为有四个正丁烷的邻交叉构象与两个重叠型构象',font="STZhongsong").scale(0.6).to_edge(DOWN)
        a2 = Text('故船型构象不稳定,内能较高',font="STZhongsong").scale(0.6).to_edge(DOWN)
        self.play(l[10].animate.set_color(WHITE),l[12].animate.set_color(WHITE))
        self.play(l.animate.scale(0.7))
        self.play(l.animate.move_to(np.array([-3,0,0])))
        self.play(FadeIn(r))
        self.play(DrawBorderThenFill(a1))
        self.wait(0.5)
        self.play(Transform(a1,a2))
        self.wait(1)
        self.play(FadeOut(a1))
        vgvg = VGroup(l, r)
        name = Text('船型',font="STZhongsong")
        self.play(Transform(vgvg,name))
        self.wait(1)

 

%%manim -v WARNING -qh s4
                                                                                                                                                                                                                                                                                                                                
class s4(Scene):
    def construct(self):
        t1 = Text('船型',font="STZhongsong")
        t2 = Text('椅型',font="STZhongsong").shift(2.5*LEFT)
        self.play(t1.animate.shift(2.5*RIGHT))
        u = t1.copy()
        self.play(Transform(u,t2))
        bt = SVGMobject(r'D:\manimSVG\boatabbr.svg').scale(0.8).shift(2.5*RIGHT)
        ch = SVGMobject(r'D:\manimSVG\chairabbr.svg').scale(0.7).shift(2.5*LEFT)
        self.play(Transform(u,ch))
        self.play(Transform(t1,bt))
        self.play(u.animate.scale(0.4))
        self.play(t1.animate.scale(0.4))
        n1 = Text("椅型构象和船型构象只是环己烷的两个典型构象", font="STZhongsong").scale(0.6).to_edge(DOWN)
        n2 = Text("实际上随着碳碳单键的旋转", font="STZhongsong").scale(0.6).to_edge(DOWN)
        n3 = Text("环己烷可以产生无数个构象异构体", font="STZhongsong").scale(0.6).to_edge(DOWN)
        ax = Axes(
            x_range=[0, 7],
            y_range=[0, 50],
            x_length=2.7,
            y_length=1.5,
            axis_config = {"include_tip": False, "include_ticks": False}
        ).shift(0.8*DOWN)
        labels = ax.get_axis_labels(
            x_label=Text("反应进程", font="STZhongsong").scale(0.15), y_label=Text("势能/(kJ/mol)", font="STZhongsong").scale(0.15)
        )
        graph1 = ax.plot(lambda x : -23*np.cos(x), x_range = [-0.3,PI], color = BLUE)
        graph2 = ax.plot(lambda x : 11.25*np.cos(2*x) + 11.75, x_range = [PI, 1.5*PI], color = BLUE)
        graph3 = ax.plot(lambda x : -2.7*np.cos(4*x) + 3.2, x_range = [1.5*PI, 1.75*PI+ 0.2], color = BLUE)
        vggraph = VGroup(graph1,graph2,graph3)
        vgax = VGroup(ax,labels,graph1,graph2,graph3).scale(3.5)
        point1 = ax.c2p(0, -23)
        dot1 = Dot(point1)
        point2 = ax.c2p(PI, 23)
        dot2 = Dot(point2, fill_opacity=0)
        point3 = ax.c2p(1.5*PI, 0.5)
        dot3 = Dot(point3, fill_opacity=0)
        point4 = ax.c2p(1.75*PI, 5.9)
        dot4 = Dot(point4)
        vgfunc = VGroup(graph1,graph2, graph3,dot1,dot2,dot3,dot4).shift(0.6*RIGHT+2.7*UP)
        self.play(u.animate.move_to(dot1.get_center()+0.5*UP))
        self.play(t1.animate.move_to(dot4.get_center()+0.5*UP))
        self.play(Write(vggraph))
        self.play(Write(ax), Write(labels))
        self.play(GrowFromPoint(dot1, dot1.get_center()), GrowFromPoint(dot4, dot4.get_center()))
        self.play(DrawBorderThenFill(n1))
        self.wait(1)
        self.play(Transform(n1,n2))
        self.wait(1)
        self.play(Transform(n1,n3))
        self.wait(1)
        self.play(FadeOut(n1))
        vgf = VGroup(ax,labels)
        self.play(FadeOut(vgf))
        vgleft = VGroup(u, t1, graph1,graph2, graph3,dot1,dot2,dot3,dot4)
        self.play(vgleft.animate.move_to(ORIGIN))
        self.play(vgleft.animate.scale(1.3))
        self.play(vgleft.animate.shift(0.4*DOWN))
        d2 = Dot(point2).move_to(dot2.get_center())
        d3 = Dot(point3).move_to(dot3.get_center())
        qq1 = SVGMobject(r'D:\manimSVG\qq1.svg').scale(0.5).move_to(dot2.get_center()+0.5*UP)
        qq2 = SVGMobject(r'D:\manimSVG\qq2.svg').scale(0.3).move_to(dot3.get_center()+0.5*DOWN)
        self.play(Write(qq1))
        self.play(GrowFromPoint(d2, d2.get_center()))
        self.play(Write(qq2))
        self.play(GrowFromPoint(d3, d3.get_center()))
        note1 = Text("椅型", font="STZhongsong").scale(0.5).move_to(u.get_center()+0.5*UP)
        note2 = Text("半椅型", font="STZhongsong").scale(0.5).move_to(qq1.get_center()+0.3*UP+0.4*RIGHT)
        note3 = Text("扭船型", font="STZhongsong").scale(0.5).move_to(qq2.get_center()+0.5*DOWN)
        note4 = Text("船型", font="STZhongsong").scale(0.5).move_to(t1.get_center()+0.5*UP)
        self.play(GrowFromPoint(note1, note1.get_center()), GrowFromPoint(note2, note2.get_center()),GrowFromPoint(note3, note3.get_center()),GrowFromPoint(note4, note4.get_center()))
        baseline = DashedLine(start=dot1.get_center() + 0.05*DOWN, end=np.array([dot4.get_x(),dot1.get_y() - 0.05,0]))
        da1 = DashedLine(start=dot3.get_center(), end=np.array([dot3.get_x() - 2,dot3.get_y(),0]))
        self.play(Write(baseline))
        self.play(Write(da1))
        arr1 = DoubleArrow(start=np.array([dot2.get_x(),dot2.get_y(),0]), end=np.array([dot2.get_x(),dot1.get_y(),0]), buff=0, tip_length=0.2, color=GREEN)
        arr2 = DoubleArrow(start=np.array([dot3.get_x() - 1.8,dot3.get_y(),0]), end=np.array([dot3.get_x() - 1.8,dot1.get_y(),0]), buff=0, tip_length=0.2, color=GREEN)
        arr3 = DoubleArrow(start=np.array([dot4.get_x(),dot4.get_y(),0]), end=np.array([dot4.get_x(),dot1.get_y(),0]), buff=0, tip_length=0.2, color=GREEN)
        self.play(GrowFromPoint(arr1,arr1.get_center()), GrowFromPoint(arr2,arr2.get_center()), GrowFromPoint(arr3,arr3.get_center()))
        diff1 = MathTex("46kJ/mol").next_to(arr1, 0.05*LEFT).scale(0.6).shift(0.4*RIGHT)
        diff2 = MathTex("23.5kJ/mol").next_to(arr2, 0.05*RIGHT).scale(0.6).shift(0.45*LEFT + 0.7*DOWN)
        diff3 = MathTex("28.9kJ/mol").next_to(arr3, 0.05*LEFT).scale(0.6).shift(0.45*RIGHT + 0.3*DOWN)
        self.play(DrawBorderThenFill(diff1), DrawBorderThenFill(diff2), DrawBorderThenFill(diff3))
        last = Text("环己烷的构象", font="STZhongsong")
        vgall = VGroup(vgleft, d2, d3, qq1, qq2, note1, note2,note3,note4,baseline, da1, arr1,arr2,arr3, diff1,diff2,diff3)
        self.play(Transform(vgall, last))
        self.play(FadeOut(vgall))

 

%%manim -v WARNING -qh thumbnail
# , disable_ligatures=True, alignment="center"
class thumbnail(Scene):
    def construct(self):
        def check(svg):
            n = 0
            for i in svg:
                num = Integer(number=n).scale(0.6).set_color(RED).move_to(i)
                n += 1
                self.add(num)
                self.add(svg.set_opacity(0.5))
        frame = FullScreenRectangle()
        h = SVGMobject(r'D:\manimSVG\thumbnail2.svg').set(width=frame.height*0.7)
        h[0].set_opacity(0)
        h[1].set_opacity(0)
        h[2].set_opacity(0)
        h[3].set_opacity(0)
        h[4].set_opacity(0)
        h[5].set_opacity(0)
        icon = SVGMobject(r'D:\manimSVG\icon.svg').scale(0.8)
        icon.set_color_by_gradient("#FFBBFF", "#FF66FF")
        i1 = icon.copy().move_to(h[0])
        i2 = icon.copy().move_to(h[1]).rotate(2*PI/6)
        i3 = icon.copy().move_to(h[2]).rotate(2*PI/6*2)
        i4 = icon.copy().move_to(h[3]).rotate(2*PI/6*3)
        i5 = icon.copy().move_to(h[4]).rotate(2*PI/6*4)
        i6 = icon.copy().move_to(h[5]).rotate(2*PI/6*5)
        ivg = VGroup(i1, i2, i3, i4, i5, i6)
        h.set_color_by_gradient("#FFBBFF", "#FF66FF")
        self.add(h, ivg)

 

posted @ 2022-07-10 21:53  树叶本子  阅读(507)  评论(0)    收藏  举报