###前提・実現したいこと
python3で偏光の様子のアニメーションを作りたいです。下の画像のように、紫の波を赤、青の二つの方向の波の合成波で表します。ここで、赤か青の波のどちらか一方の速度を遅くすると、合成波は円偏光や楕円偏光を示すようになります。その様子をアニメーションで表したいです。
###発生している問題
下の図で、波が直方体の中を通るときだけ、青い波の速度が遅くなるようにしたいです。しかし、そのやり方が分かりません。どなたか分かる方ご教授ください。
よろしくお願いします。
###該当のソースコード
ここまで書いたコードを載せておきます。
python3
1fig = plt.figure() 2ax = fig.gca(projection='3d') 3f=np.pi/6 4d=np.pi/2 5t=[] 6 7 8def solid(x,y,z,lx,ly,lz,depth,iro): 9 u1=[x,x+lx] 10 v1=[z,z+lz] 11 X1,Y1=np.meshgrid(u1,v1) 12 ax.plot_surface(X1,y,Y1,alpha=depth,color=iro) 13 ax.plot_surface(X1,y+ly,Y1,alpha=depth,color=iro) 14 15 u2=[x,x+lx] 16 v2=[y,y+ly] 17 X2,Y2=np.meshgrid(u2,v2) 18 ax.plot_surface(X2,Y2,z,alpha=depth,color=iro) 19 ax.plot_surface(X2,Y2,z+lz,alpha=depth,color=iro) 20 21 u3=[y,y+ly] 22 v3=[z,z+lz] 23 X3,Y3=np.meshgrid(u3,v3) 24 ax.plot_surface(x,X3,Y3,alpha=depth,color=iro) 25 ax.plot_surface(x+lx,X3,Y3,alpha=depth,color=iro) 26 27 plt.show() 28 29 30def update(i): 31 32 if i==0: 33 del t[:] 34 else: 35 pass 36 37 if i !=0: 38 plt.cla() 39 40 X1=0 41 Y1=0 42 Z1=0 43 U1=-np.cos(i/10)*np.sin(f)*np.cos(f) 44 V1=np.cos(i/10)*np.sin(f)*np.sin(f) 45 W1=0 46 47 X2=0 48 Y2=0 49 Z2=0 50 U2=np.cos(i/10)*np.sin(f)*np.cos(f) 51 V2=np.cos(i/10)*np.cos(f)*np.cos(f) 52 W2=0 53 54 X3=0 55 Y3=0 56 Z3=0 57 U3=U1+U2 58 V3=V1+V2 59 W3=0 60 61 X4=[X1,U1] 62 Y4=[Y1,V1] 63 Z4=[Z1,W1] 64 X5=[X2,U2] 65 Y5=[Y2,V2] 66 Z5=[Z2,W2] 67 X6=[X3,U3] 68 Y6=[Y3,V3] 69 Z6=[Z3,W3] 70 71 ax.set_xlim(-1.5,1.5) 72 ax.set_ylim(-1.5,1.5) 73 ax.set_zlim(0,3) 74 ax.axis("off") 75 ax.plot(X4,Y4,Z4,"-",c="r",lw=2) 76 ax.plot(X5,Y5,Z5,"-",c="b",lw=2) 77 ax.plot(X6,Y6,Z6,"-",c="m",lw=2) 78 79 t.append(i) 80 t1=np.array(t) 81 82 x1=-np.cos((i-t1)/10)*np.sin(f)*np.cos(f) 83 y1=np.cos((i-t1)/10)*np.sin(f)*np.sin(f) 84 z1=t1/100 85 86 87 x2=np.cos((i-t1)/10)*np.sin(f)*np.cos(f) 88 y2=np.cos((i-t1)/10)*np.cos(f)*np.cos(f) 89 z2=t1/100 90 91 x3=x1+x2 92 y3=y1+y2 93 z3=z1 94 95 ax.plot(x1, y1, z1,"-", c="r") 96 ax.plot(x2, y2, z2,"-", c="b") 97 ax.plot(x3, y3, z3,"-", c="m") 98 solid(-1,-1,2,2,2,0.5,0.4,"black") 99 100 101 102 103ani = anm.FuncAnimation(fig, update, \ 104 interval = 15, frames = 500) 105 106plt.show() 107 108 109
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/03 04:06