单电子原子结构(废弃)
函数
View Code
View Code
# 预定义 if True: r = RIGHT;l = LEFT;d = DOWN;u = UP;du = DEGREES;rr = RED;bb = BLUE;gg = GREEN;gg2 = GOLD;pp = PINK;tt = TEAL;h = SVGMobject("D:\manimSVG\constants\h.svg");h2o = SVGMobject("D:\manimSVG\constants\h2o.svg"); # xxp if type('xxp') == str: # xxp transform def xt(names, *args): def pretrans0(name, i): if type(i) == int: back = name + '[' + str(i) + ']' elif type(i) == str: m = i.find('.') n1 = i[0:m] n2 = i[m+1:] back = name + '[' + n1 + ':' + n2 + ']' return back def pretrans(name, i): if type(i) == int: back = name + '[' + str(i) + ']' elif type(i) == str: m = i.find('.') n1 = i[0:m] n2 = i[m+1:] back = name + '[' + n1 + ':' + n2 + ']' elif type(i) == list: back = 'VGroup(' for j in i: item = pretrans0(name, j) + ',' back += item back += ')' return back ag = 'AnimationGroup(' # range(0, n-1)是错的 itemli = [] for l in names: itemli.append(list(range(len(l)))) def countli0(name, i): if type(i) == int: name.remove(i) elif type(i) == str: m = i.find('.') n1 = int(i[0:m]) n2 = int(i[m+1:])-1 p1 = name.index(n1) p2 = name.index(n2) del name[p1:p2+1] def countli(name, i): if type(i) == int: name.remove(i) elif type(i) == str: m = i.find('.') n1 = int(i[0:m]) n2 = int(i[m+1:])-1 p1 = name.index(n1) p2 = name.index(n2) del name[p1:p2+1] elif type(i) == list: for j in i: item = countli0(name, j) set1 = set() set2 = set() for m in range(len(args)): n = 0 for i in args[m][2]: n += 1 if n % 2 != 0: u = pretrans(f'names[args[{str(m)}][0]]', i) countli(itemli[args[m][0]], i) set1.add(args[m][0]) else: v = pretrans(f'names[args[{str(m)}][1]]', i) item = f'Transform({u}, {v}),' ag += item countli(itemli[args[m][1]], i) set2.add(args[m][1]) for i in set1: for ii in itemli[i]: # reverse GrowFromCenter不可用 ag += f'ShrinkToCenter(names[{str(i)}][{str(ii)}]), ' for j in set2: for jj in itemli[j]: ag += f'GrowFromCenter(names[{str(j)}][{str(jj)}]), ' ag += ')' agg = eval(ag) return agg # xxp transform 2 def xt2(a, b, c): def pretrans0(name, i): if type(i) == int: back = name + '[' + str(i) + ']' elif type(i) == str: m = i.find('.') n1 = i[0:m] n2 = i[m+1:] back = name + '[' + n1 + ':' + n2 + ']' return back def pretrans(name, i): if type(i) == int: back = name + '[' + str(i) + ']' elif type(i) == str: m = i.find('.') n1 = i[0:m] n2 = i[m+1:] back = name + '[' + n1 + ':' + n2 + ']' elif type(i) == list: back = 'VGroup(' for j in i: item = pretrans0(name, j) + ',' back += item back += ')' return back n = 0 ag = 'AnimationGroup(' # range(0, n-1)是错的 for i in c: n += 1 if n % 2 != 0: u = pretrans('a', i) else: v = pretrans('b', i) item = f'Transform({u}, {v}),' ag += item ag += ')' agg = eval(ag) return agg # xxp transform 3 def xt3(a,b): x=b.get_center()-a.get_center() y=b.width/a.width return AnimationGroup(a.animate.shift(x).scale(y)) # xxp color to hex def xc2h(c): return rgb_to_hex(color_to_rgb(c)) # xxp color and opacity init def xcoi(*args): for a in args: # 先缩放再设置透明度(否则会消失不见) a.set_opacity(1) for i in a: if xc2h(i.color) == '#ff0000': i.set_color(RED).set_sheen(0.1) elif xc2h(i.color) == '#ffff00': i.set_color(GOLD).set_sheen(0.1) elif xc2h(i.color) == '#00ff00': i.set_color(GREEN).set_sheen(0.1) elif xc2h(i.color) == '#00ffff': i.set_color(TEAL).set_sheen(0.1) elif xc2h(i.color) == '#0000ff': i.set_color(BLUE).set_sheen(0.1) elif xc2h(i.color) == '#ff00ff': i.set_color(PINK).set_sheen(0.1) # xxp opacity scale def xos(num, *args): # 最好让透明度也一样 def premovescale(a, b): # x = VGroup() # y = VGroup() for i in a: # 设置get_fill_opacity() == 0.5会失效 if i.get_fill_opacity() < 1: x = i # x.add(i) for j in b: if j.get_fill_opacity() < 1: y = j # y.add(j) scale = y.height/x.height a.scale(scale) # 先缩放再移动 vector = y.get_center() - x.get_center() a.shift(vector) args[0].scale(num) for n in range(len(args) - 1): premovescale(args[n+1], args[n]) xcoi(*args) # xxp check def xc(*args): self.camera.background_color = WHITE for svg in args: if type(svg) == list: self.clear() for sss in svg: self.add(sss.set(color = RED)) for sss in svg: n = 0 for i in sss: num = Integer(number=n, stroke_width=2).set_color(BLACK).move_to(i) n += 1 self.add(num) self.wait() else: self.clear() self.add(svg.set(color = RED)) n = 0 for i in svg: num = Integer(number=n, stroke_width=2).set_color(BLACK).move_to(i) n += 1 self.add(num) self.wait() self.clear() # xxp find def xf(a, b): n1 = str.find(a.text, b) n2 = n1 + len(b) return a[n1:n2] # xxp narrator def xn(a): text = Text(a, font='STZhongsong').to_edge(DOWN).scale(0.6) return text # xxp narrator 2 def xn2(a): text = Text(a, font='STFangsong').scale(0.7).to_edge(DOWN) return text # xxp upnarrator def xun(a): text = Text(a, font='STZhongsong').to_edge(UP).scale(0.8) return text # xxp para def xp(x, y): a = Text(y, font="STZhongsong").to_edge(DOWN).scale(0.6) b = Text(x, font="STZhongsong").to_edge(1.8*DOWN).scale(0.6) return VGroup(a, b) # xxp scale def xs(a, n1, b, n2): scale = b[n2].width/a[n1].width a.scale(scale) # xxp move def xm(a, n1, b, n2): vect = b[n2].get_center() - a[n1].get_center() a.shift(vect) # xxp move and scale def xms(a, n1, b, n2): scale = b[n2].width/a[n1].width a.scale(scale) vect = b[n2].get_center() - a[n1].get_center() a.shift(vect) # xxp choose color def xcc(a, b): for i in a: if rgb_to_hex(color_to_rgb(i.color)) == b: return i # xxp narrator wait def xnw(a): self.wait(0.1*len(a)) # xxp text flower def xtf(a): at = Text(a, font = 'STZhongsong',stroke_width=2).set_color(color = ['#f3e9e0', '#fea8a9']) # at[0].set_color(color = ['#f3e9e0', '#fea8a9']) # at[1].set_color(color = ['#f3e9e0', '#fea8a9']) fl = msm('icon')[8].rotate(PI/2).set_color(color = ['#fea8a9', '#f3e9e0']).scale(1.5) at.next_to(fl, RIGHT) vg = VGroup(fl, at) vg.set(height = 0.6).to_corner(UL) return vg # xxp text flower2 def xtf2(judge, a): if judge == 1: at = Text(a, font = 'STFangsong',stroke_width=2).set_color(color = ['#f3e9e0', '#b1d85c']) elif judge == 2: # 一般不是中文 at = MarkupText(a, stroke_width=2).set_color(color = ['#f3e9e0', '#b1d85c']) # at[0].set_color(color = ['#f3e9e0', '#fea8a9']) # at[1].set_color(color = ['#f3e9e0', '#fea8a9']) fl = msm('icon')[8].rotate(PI/2).set_color(color = ['#b1d85c', '#f3e9e0']).scale(1.5) at.next_to(fl, RIGHT) vg = VGroup(fl, at) vg.set(height = 0.6).to_corner(UL).shift(2*RIGHT) return vg # xxp text flower3 def xtf3(a): at = Text(a, font = 'STZhongsong',stroke_width=2).set_color(color = ['#ccffff', '#afccff']) # at[0].set_color(color = ['#f3e9e0', '#fea8a9']) # at[1].set_color(color = ['#f3e9e0', '#fea8a9']) fl = msm('icon')[8].rotate(PI/2).set_color(color = ['#afccff', '#ccffff']).scale(1.5) at.next_to(fl, RIGHT) vg = VGroup(fl, at) vg.set(height = 0.6).to_corner(UL).shift(2*DOWN) return vg # xxp color move and scale def xcms(a, b): x = VGroup() y = VGroup() for i in a: if rgb_to_hex(color_to_rgb(i.color)) == '#000000': x.add(i) for j in b: if rgb_to_hex(color_to_rgb(j.color)) == '#000000': y.add(j) scale = y.width/x.width vect = y.get_center() - x.get_center() a.shift(vect) a.scale(scale) # xxp single scale def xss(a, n): x = Text('C', font="Times New Roman") y = a[n] scale = x.width/y.width a.scale(scale) # xxp pre postion def xpp(a, pos): d1 = Dot().to_corner(UL) d2 = Dot().to_edge(UP) d3 = Dot().to_corner(UR) d4 = Dot().to_edge(LEFT) d5 = Dot() d6 = Dot().to_edge(RIGHT) d7 = Dot().to_corner(DL) d8 = Dot().to_edge(DOWN) d9 = Dot().to_corner(DR) if pos == 'ul': a.move_to((d1.get_center() + d5.get_center())/2) elif pos == 'u': a.move_to((d2.get_center() + d5.get_center())/2) elif pos == 'ur': a.move_to((d3.get_center() + d5.get_center())/2) elif pos == 'l': a.move_to((d4.get_center() + d5.get_center())/2) elif pos == 'o': a.move_to(d5.get_center()) elif pos == 'r': a.move_to((d6.get_center() + d5.get_center())/2) elif pos == 'dl': a.move_to((d7.get_center() + d5.get_center())/2) elif pos == 'd': a.move_to((d8.get_center() + d5.get_center())/2) elif pos == 'dr': a.move_to((d9.get_center() + d5.get_center())/2) # xxp arrange and align def xaa(mobs, b, d): vg = VGroup() for m in mobs: vg.add(m) vg.arrange(buff=b) if d == 'u': dire = UP elif d == 'd': dire = DOWN for i in mobs: if i != mobs[0]: i.align_to(mobs[0], dire) # xxp add other def xao(*args): if len(args) == 2: sa(args[0].to_corner(UR), args[1].to_corner(DL)) if len(args) == 3: sa(args[0].to_corner(UR), args[1].to_corner(DL), args[2].to_corner(DR)) # xxp grow from center def xgf(a, li): avg = 'AnimationGroup(' def pregrow(name, i): if type(i) == int: back = name + '[' + str(i) + ']' elif type(i) == str: m = i.find('.') n1 = i[0:m] n2 = i[m+1:] back = name + '[' + n1 + ':' + n2 + ']' return back for j in li: partani = pregrow('a', j) avg += f'GrowFromCenter({partani}), ' avg += ')' return eval(avg) # xxp reverse grow from center def xrgf(a, li): avg = 'AnimationGroup(' def pregrow(name, i): if type(i) == int: back = name + '[' + str(i) + ']' elif type(i) == str: m = i.find('.') n1 = i[0:m] n2 = i[m+1:] back = name + '[' + n1 + ':' + n2 + ']' return back for j in li: partani = pregrow('a', j) avg += f'GrowFromCenter({partani}, reverse_rate_function = True), ' avg += ')' return eval(avg) # xxp color and sheen static def xcss(a, b): a.set_color(b).set_sheen(0.1) # xxp place in line def xpl(*args): vg = VGroup() frame = FullScreenRectangle() wid = frame.width for i in args: vg.add(i.copy()) wid -= i.width mybuff = wid/(len(args)+1) vg.arrange(buff=mybuff) for j in range(len(args)): args[j].match_x(vg[j]) # xxp place in grid def xpg(*args): n = 0 full = FullScreenRectangle() li = ['ul','ur','dl','dr'] for a in args: if a.width > a.height: a.set(width = full.width/3) xpp(a,li[n]) else: a.set(height = full.height/3) xpp(a,li[n]) n += 1 # xxp color 1 def xc1(*args): for a in args: a.save_state() a.set_color(WHITE).set_sheen(0) # xxp color 2 def xc2(*args): li = [] for a in args: li.append(Restore(a)) return li # xxp color 3 def xc3(*args): li = [] for a in args: # 不可使用animate li.append(ApplyMethod(a.set_color, WHITE)) return li # xxp animations list def xal(t,*argss): args = [] for i in argss: args.append(i) # 不是args = atgs.reverse() args.reverse() n = 0 for a in args: if n == 1: ag = AnimationGroup(args[1],args[0],lag_ratio=t) elif n > 1: ag = AnimationGroup(a,ag,lag_ratio=t) n += 1 return ag # xxp sub number def xsn(*args): vg = VGroup() for i in range(len(args)): n = Integer(i+1).next_to(args[i],0.7*UP) xcss(n, BLUE) vg.add(n) return vg # xxp get distance def xgd(a,b): return b.get_center() - a.get_center() # xxp get distance by coodrdinate def xgdc(a,b): return b - a.get_center() # xxp text flower list def xtfl(a,*args): # for a in args: vg = VGroup() li0 = xtf(a) vg.add(li0) n = 1 for a in args: li = xtf2(1,a) xm(li,0,li0,0);li.shift(n*0.9*DOWN+RIGHT) vg.add(li) n += 1 return vg # xxp text flower list abbr def xtfla(a,b): # for a in args: vg = VGroup() li0 = xtf(a) n = 1 li1 = xtf2(1,'');xm(li1,0,li0,0);li1.shift(DOWN+RIGHT) vg.add(li0,li1) for i in range(b-1): li = xtf2(1,'') xm(li,0,li1,0);li.shift(n*0.2*DOWN) vg.add(li) n += 1 return vg # xxp corner check def xcc(a,b): a.to_corner(UL);b.to_corner(DR) xc([a,b]) # xxp edge check def xec(a,b): a.to_edge(UP);b.to_edge(DOWN) xc([a,b]) # xxp grid check def xgc(*args): xpg(*args) xc([*args]) # xxp orbit color def xoc(a): a.set_color([BLUE_C, BLUE_E]).set_sheen(0.3).set_opacity(0.8) # xxp play def xxp(*args): for a in args: if type(a) == list: self.wait(0.5) self.play(*a) self.wait(0.5) elif type(a) == set: self.clear() self.add(*a) else: self.wait(0.5) self.play(a) self.wait(0.5) # xxp molecule move def xmm(a,b,c): return a.animate.shift(xgd(b,c)) # xxp markup text def xmt(a): # 最多不能超过三个 for i in range(5): a = a.replace('_','<sub>',1) a = a.replace('_','</sub>',1) a = a.replace('^','<sup>',1) a = a.replace('^','</sup>',1) return MarkupText(a) # manim CE if type('manim CE') == str: # self.play() def sp(*args, **kwargs): return self.play(*args, **kwargs) # self.wait() def sw(*args, **kwargs): return self.wait(*args, **kwargs) # self.add() def sa(*args, **kwargs): return self.add(*args, **kwargs) # self.clear() def sc(*args, **kwargs): return self.clear(*args, **kwargs) # self.remove() def sr(*args, **kwargs): return self.remove(*args, **kwargs) # Animation Transform() def at(a, b, *args, **kwargs): return Transform(a, b, *args, **kwargs) # Animation ReplacementTransform() def art(a, b, *args, **kwargs): return ReplacementTransform(a, b, *args, **kwargs) # Animation TransformMatchingShapes() def atm(a, b, *args, **kwargs): return TransformMatchingShapes(a, b, *args, **kwargs) # Animation ClockwiseTransform() def act(a, b, *args, **kwargs): return ClockwiseTransform(a, b, *args, **kwargs) # Animation CounterclockwiseTransform() def acct(a, b, *args, **kwargs): return CounterclockwiseTransform(a, b, *args, **kwargs) # Animation Write() def aw(a, *args, **kwargs): return Write(a, *args, **kwargs) # Animation LaggedStart() def als(a, *args, **kwargs): return LaggedStart(a, *args, **kwargs) # Animation Unwrite() def auw(a, *args, **kwargs): return Unwrite(a, *args, **kwargs) # Animation FadeOut() def afo(a, *args, **kwargs): return FadeOut(a, shift=DOWN, *args, **kwargs) # Animation FadeIn() def afi(a, *args, **kwargs): return FadeIn(a, shift=DOWN, *args, **kwargs) # Animation Restore() def are(a, *args, **kwargs): return Restore(a, *args, **kwargs) # Animation Rotate() def aro(a, b, *args, **kwargs): return Rotate(a, b, *args, **kwargs) # Animation DrawBorderThenFill() def adb(a, *args, **kwargs): return DrawBorderThenFill(a, *args, **kwargs) # Animation DrawBorderThenFill() reverse def adbr(a, *args, **kwargs): return DrawBorderThenFill(a, *args, **kwargs, reverse_rate_function = True) # Animation GrowFromCenter() def agf(a, *args, **kwargs): return GrowFromCenter(a, *args, **kwargs) # Animation MoveAlongPath() def ama(a, b, *args, **kwargs): return MoveAlongPath(a, b, *args, **kwargs) # Animation SpinInFromNothing def asi(a, *args, **kwargs): return SpinInFromNothing(a, angle=2 * PI, *args, **kwargs) # Animation SpinInFromNothing reverse def asir(a, *args, **kwargs): return SpinInFromNothing(a, angle=2 * PI, *args, **kwargs, reverse_rate_function = True) # Animation ShrinkToCenter def ast(a, *args, **kwargs): return ShrinkToCenter(a, *args, **kwargs) # Animation Circumscribe def ac(a, *args, **kwargs): return Circumscribe(a, *args, **kwargs) # Animation Indicate def ai(a, *args, **kwargs): return Indicate(a, *args, **kwargs) # Group sheen def gs(*args): li = [] for i in args: li.append(i.animate.set_sheen(0.1)) return AnimationGroup(*li, run_time=0.5) # Group color def gc(*args): li = [] for i in range(len(args)): if i % 2 == 0: li.append(args[i].animate.set_color(args[i+1])) return AnimationGroup(*li) # mobject Text def mt(text, *args, **kwargs): return Text(text, *args, **kwargs) # mobject SVGMobject def msm(name, *args, **kwargs): sm = SVGMobject(f'D:\\manimSVG\\{name}.svg') return sm # mobject MathTex def mmt(text, *args, **kwargs): return MathTex(text, *args, **kwargs) # mobject VGroup def mvg(*args, **kwargs): return VGroup(*args, **kwargs) # mobject ArcBetweenPoints def mab(a, b, *args, **kwargs): return ArcBetweenPoints(a.get_center(), b.get_center(), *args, **kwargs) # other function if type('other function') == str: # shift def sh(*args): i = 1 for a in args: if i % 2 != 0: a.shift(args[i]) i += 1 # scale def sc(*args): i = 1 for a in args: if i % 2 != 0: a.scale(args[i]) i += 1 # coloring def c(*args): i = 1 for a in args: if i % 2 != 0: xcss(a, args[i]) i += 1 # Wait def w(*args): return Wait(*args) # refresh def refresh(*args, **kwargs): sc() sa(*args, **kwargs) # color refresh def crefresh(*args, **kwargs): sc() for i in args: xcoi(i) sa(*args, **kwargs) # execute narrator def ext(a): for i in a: globals()[f't{str(i)}']=xn(a[i]) # execute narrator 2 def exn(a): for i in a: globals()[f't{str(i)}']=xn2(a[i]) # execute mobject def exm(name, num): for i in range(num): globals()[name + str(i+1)]=msm(name + str(i+1)) # ApplyMethod Shift def lsh(a, b): return ApplyMethod(a.shift,b) # ApplyMethod Scale def lsc(a, b): return ApplyMethod(a.scale,b)
代码
# playscene def playscene1(): ext({1:'1926年,薛定谔认识到微观粒子具有波粒二象性和不确定性', 2:'提出用波动力学方程来描述原子核外电子的运动', 3:'在求解波函数时,为满足一定的驻态条件', 4:'波函数都与一系列整数——量子数有关'}) f1 = mmt(r'\nabla ^{2} \Psi + \frac{8\pi ^{2}m }{h ^{2}} \left ( E - V \right ) \Psi= 0 ').scale(1.5);note1 = xmt('n = 1 l = 0 m_l_ = 0').to_edge(UP) oo = xn2('*这里只绘制原子轨道的大致形状,并不体现电子出现的机率密度') name=xmt('1s').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) t = [x/100 for x in range(0, int(200*PI), 15)] p = [x/100 for x in range(0, int(200*PI), 15)] vg = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([np.sqrt(1/4*PI),i,j]), radius=0.02, fill_opacity=0.5).rotate(-130*du,axis=[1,0,0]) vg.add(d) vg.rotate(130*du,axis=[1,0,0]) vg.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(2) xxp(afi(t1),w(0.5),at(t1,t2),w(0.5),afi(f1,shift=DOWN),w(0.5),at(t1,t3),w(0.5),at(t1,t4),w(0.5),[afo(f1,shift=DOWN),afi(note1,shift=DOWN),afo(t1)],[agf(vg),afi(name)],afi(oo,shift=UP),w(1.5),afo(oo),w()) def playscene2(): note = xmt('n = 1 l = 0 m_l_ = 0').to_edge(UP) note1 = xmt('n = 2 l = 0 m_l_ = 0').to_edge(UP) note2 = xmt('n = 2 l = 1 m_l_ = 0').to_edge(UP) name1=xmt('1s').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) name2=xmt('2s').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) name3=xmt('2p_z_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) t = [x/100 for x in range(0, int(200*PI), 15)] p = [x/100 for x in range(0, int(200*PI), 15)] vg1 = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([np.sqrt(3/4*PI)*np.sin(j)*np.abs(np.cos(i)),i,j]), radius=0.02, fill_opacity=0.5).rotate(-130*du,axis=[1,0,0]) vg1.add(d) vg1.rotate(130*du,axis=[1,0,0]) vg1.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(2).scale(0.8).rotate(90*du) vg = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([np.sqrt(1/4*PI),i,j]), radius=0.02, fill_opacity=0.5).rotate(-130*du,axis=[1,0,0]) vg.add(d) vg.rotate(130*du,axis=[1,0,0]) vg.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(2) ext({1:'n为主量子数,代表电子的能量高低以及电子离核的平均距离',2:'n越大,轨道中的电子能量越高,离核越远',3:'l为角量子数,代表电子在空间的角度分布情况',4:'l可取0,1,2,……,n-1,共n个值'}) sa(vg);sa(name1);sa(note) xxp(afi(t1),w(),[afo(note[2],shift=DOWN),afi(note1[2],shift=DOWN)],[afo(name1,shift=DOWN),afi(name2,shift=DOWN)],lsc(vg,1.3),at(t1,t2),w(),at(t1,t3),w(),at(t1,t4),w(), [afo(note[5],shift=DOWN),afi(note2[5],shift=DOWN)],[afo(name2,shift=DOWN),afi(name3,shift=DOWN)],at(vg,vg1)) def playscene3(): note1 = xmt('n = 2 l = 1 m_l_ = 0').to_edge(UP) note2 = xmt('n = 2 l = 1 m_l_ = ±1').to_edge(UP) note3 = xmt('n = 3 l = 0 m_l_ = 0').to_edge(UP) name1=xmt('2p_z_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) namebb=xmt('3s').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) ext({1:'l可取0,1,2,……,n-1,共n个值', 2:'除氢原子外,l越大,轨道中的电子能量越高'});t3=xmt('m_l_/为磁量子数,代表原子轨道在空间的不同取向/').to_edge(DOWN).scale(0.6);t4=xmt('m_l_/可取0,±1,±2,……,±l,共2l+1个值/').to_edge(DOWN).scale(0.6) t = [x/100 for x in range(0, int(200*PI), 15)] p = [x/100 for x in range(0, int(200*PI), 15)] vg1 = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([np.sqrt(3/4*PI)*np.sin(j)*np.abs(np.cos(i)),i,j]), radius=0.02, fill_opacity=0.5).rotate(-130*du,axis=[1,0,0]) vg1.add(d) vg1.rotate(130*du,axis=[1,0,0]) vg1.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(2).scale(0.8).rotate(90*du) vg2=vg1.copy().rotate(90*du) vg3=vg2.copy().rotate(60*du,axis=[0,1,0]) for i in vg3: i.rotate(-60*du,axis=[0,1,0]) mvg(vg3,vg2).arrange(buff=1.5) name2=xmt('2p_x_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(vg3,1.3*DOWN) name3=xmt('2p_y_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(vg2,1.3*DOWN) sa(note1,name1,vg1,t1); xxp(at(t1,t2),w(),at(t1,t3),w(),at(t1,t4),w(),[afo(note1[9],shift=DOWN),afi(note2[9:],shift=DOWN)],[afo(name1,shift=DOWN),afi(name2,shift=UP),afi(name3,shift=UP),afo(vg1,shift=DOWN),afi(vg2,shift=DOWN),afi(vg3,shift=DOWN)], [afo(note1[2],shift=DOWN),afi(note3[2],shift=DOWN),afo(note1[5],shift=DOWN),afi(note3[5],shift=DOWN),afo(note2[9:],shift=DOWN),afi(note3[9],shift=DOWN),afo(vg2,shift=DOWN),afo(vg3,shift=DOWN),afo(name2,shift=DOWN),afo(name3,shift=DOWN), afi(namebb,shift=DOWN),afo(t1)]) def playscene4(): note = xmt('n = 3 l = 0 m_l_ = 0').to_edge(UP) note2 = xmt('n = 3 l = 1 m_l_ = 0').to_edge(UP) note3 = xmt('n = 3 l = 1 m_l_ = ±1').to_edge(UP) name=xmt('3s').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) name1=xmt('3p_z_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) t = [x/100 for x in range(0, int(200*PI), 15)] p = [x/100 for x in range(0, int(200*PI), 15)] vg = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([np.sqrt(1/4*PI),i,j]), radius=0.02, fill_opacity=0.5).rotate(-130*du,axis=[1,0,0]) vg.add(d) vg.rotate(130*du,axis=[1,0,0]) vg.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(2).scale(1.5) vg1 = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([np.sqrt(3/4*PI)*np.sin(j)*np.abs(np.cos(i)),i,j]), radius=0.02, fill_opacity=0.5).rotate(-130*du,axis=[1,0,0]) vg1.add(d) vg1.rotate(130*du,axis=[1,0,0]) vg1.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(2).scale(0.8).rotate(90*du).scale(1.3) vg2=vg1.copy().rotate(90*du) vg3=vg2.copy().rotate(60*du,axis=[0,1,0]) for i in vg3: i.rotate(-60*du,axis=[0,1,0]) vg3.to_edge(LEFT,buff=1.2);vg2.to_edge(RIGHT,buff=0.7); name2=xmt('3p_x_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(vg3,1.5*DOWN) name3=xmt('3p_y_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(vg2,1.5*DOWN) sa(note,name) xxp(agf(vg),[afo(note[5],shift=DOWN),afi(note2[5],shift=DOWN)],[afo(name,shift=DOWN),afi(name1,shift=DOWN)],[afo(vg,shift=DOWN),afi(vg1,shift=DOWN)],[afo(note[9],shift=DOWN),afi(note3[9:],shift=DOWN)], [afo(name1,shift=DOWN),afi(name2,shift=UP),afi(name3,shift=UP),afo(vg1,shift=DOWN),afi(vg2,shift=DOWN),afi(vg3,shift=DOWN)]) def playscene5(): t = [x/100 for x in range(0, int(200*PI), 15)] p = [x/100 for x in range(0, int(200*PI), 15)] vg1 = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([np.sqrt(3/4*PI)*np.sin(j)*np.abs(np.cos(i)),i,j]), radius=0.02, fill_opacity=0.5).rotate(-130*du,axis=[1,0,0]) vg1.add(d) vg1.rotate(130*du,axis=[1,0,0]) vg1.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(2).scale(0.8).rotate(90*du).scale(1.3) vg2=vg1.copy().rotate(90*du) vg3=vg2.copy().rotate(60*du,axis=[0,1,0]) for i in vg3: i.rotate(-60*du,axis=[0,1,0]) vg3.to_edge(LEFT,buff=1.2);vg2.to_edge(RIGHT,buff=0.7); ame2=xmt('3p_x_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(vg3,1.5*DOWN) ame3=xmt('3p_y_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(vg2,1.5*DOWN) t = [x/100 for x in range(0, int(200*PI), 10)] p = [x/100 for x in range(0, int(200*PI), 10)] dz = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([3*np.cos(j)*np.cos(j)-1,i,j]), radius=0.02, fill_opacity=0.5).rotate(-130*du,axis=[1,0,0]) dz.add(d) dz.rotate(130*du,axis=[1,0,0]) dz.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(1.8).shift(0.3*DOWN).scale(0.8) dyz = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([3*np.sin(j)*np.cos(j)*np.cos(i),i,j]), radius=0.02, fill_opacity=0.5).rotate(-90*du,axis=[1,0,0]) dyz.add(d) dyz.rotate(90*du,axis=[1,0,0]) dyz.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).scale(1.8).shift(0.3*DOWN) dxz = dyz.copy().rotate(45*du,axis=[0,1,0]) for i in dyz: i.rotate(-45*du,axis=[0,1,0]) mvg(dxz,dyz).arrange(buff=2.5) dxy = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([3*np.sin(j)*np.sin(j)*np.sin(2*i),i,j]), radius=0.02, fill_opacity=0.5).rotate(-135*du,axis=[1,0,0]) dxy.add(d) dxy.rotate(135*du,axis=[1,0,0]) dxy.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).shift(0.3*DOWN).scale(0.8) dxy2 = mvg() for i in t: for j in p: d = Dot(spherical_to_cartesian([3*np.sin(j)*np.sin(j)*np.sin(2*i),i,j]), radius=0.02, fill_opacity=0.5).rotate(-45*du,axis=[1,0,0]) dxy2.add(d) dxy2.rotate(45*du).rotate(45*du,axis=[1,0,0]) dxy2.set_color(BLUE).set_sheen(0.3).set_opacity(0.5).shift(0.3*DOWN).scale(0.8) mvg(dxy,dxy2).arrange(buff=2.5) name=xmt('3d_z^2^_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5) name1=xmt('3d_xz_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(dxz,1.5*DOWN) name2=xmt('3d_yz_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(dyz,1.5*DOWN) name1.match_y(name2) name3=xmt('3d_xy_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(dxy,1.5*DOWN) name4=xmt('3d_x^2^-y^2^_').set_color(BLUE).set_sheen(0.3).to_edge(l,buff=1.5).next_to(dxy2,1.5*DOWN) name3.match_y(name4) note1 = xmt('n = 3 l = 1 m_l_ = ±1').to_edge(UP) note2 = xmt('n = 3 l = 2 m_l_ = 0').to_edge(UP) note3 = xmt('n = 3 l = 2 m_l_ = ±1').to_edge(UP) note4 = xmt('n = 3 l = 2 m_l_ = ±2').to_edge(UP) sa(ame2,ame3,note1,vg2,vg3) xxp([afo(note1[5]),afo(note1[9:]),afi(note2[5]),afi(note2[9])],[afo(vg2),afo(vg3),afo(ame2),afo(ame3),afi(dz),afi(name)],[afo(note2[9]),afi(note3[9:])],[afo(dz),afo(name),afi(dxz),afi(name1),afi(dyz),afi(name2)], [afo(note3[9:]),afi(note4[9:])],[afo(dxz),afo(name1),afo(dyz),afo(name2),afi(dxy),afi(name3),afi(dxy2),afi(name4)]) note1[5].set_opacity(0);note1[9:].set_opacity(0) xxp([afo(note4[9:]),afo(note2[5]),afo(note1),afo(dxy),afo(dxy2),afo(name3),afo(name4)])
浙公网安备 33010602011771号