質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2481閲覧

pythonで3dアニメーションが2週目以降崩れてしまうのを直したい

uc200

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/06/26 06:10

編集2017/06/26 06:19

python3を使っています.下に作成したアニメーションのスクショとプログラムを載せておきます.合成波が進んでいくところのアニメーションを作ってみましたが,frames数を200にしたところ、二週目以降で波の始めと終わりがつながってしまいます。分かりやすいように、アニメーションの一週目のスクショ、二週目以降のスクショ、書いたプログラムを載せておきます。どなたか分かる方ご教授ください。
よろしくお願いします。

一週目のアニメーション

二週目以降のアニメーション

python3

1from mpl_toolkits.mplot3d import Axes3D 2import matplotlib.animation as anm 3import matplotlib.pyplot as plt 4import numpy as np 5 6fig = plt.figure() 7ax = fig.gca(projection='3d') 8f=np.pi/6 9d=np.pi/2 10t=[] 11 12def update(i): 13 if i !=0: 14 plt.cla() 15 16 X1=0 17 Y1=0 18 Z1=0 19 U1=-np.cos(i/10)*np.sin(f)*np.cos(f) 20 V1=np.cos(i/10)*np.sin(f)*np.sin(f) 21 W1=0 22 23 X2=0 24 Y2=0 25 Z2=0 26 U2=np.cos(i/10)*np.sin(f)*np.cos(f) 27 V2=np.cos(i/10)*np.cos(f)*np.cos(f) 28 W2=0 29 30 X3=0 31 Y3=0 32 Z3=0 33 U3=U1+U2 34 V3=V1+V2 35 W3=0 36 37 X4=[X1,U1] 38 Y4=[Y1,V1] 39 Z4=[Z1,W1] 40 X5=[X2,U2] 41 Y5=[Y2,V2] 42 Z5=[Z2,W2] 43 X6=[X3,U3] 44 Y6=[Y3,V3] 45 Z6=[Z3,W3] 46 47 ax.set_xlim(-1.5,1.5) 48 ax.set_ylim(-1.5,1.5) 49 ax.set_zlim(0,3) 50 ax.axis("off") 51 ax.plot(X4,Y4,Z4,"-",c="r",lw=2) 52 ax.plot(X5,Y5,Z5,"-",c="b",lw=2) 53 ax.plot(X6,Y6,Z6,"-",c="m",lw=2) 54 55 t.append(i) 56 t1=np.array(t) 57 x1=-np.cos((i-t1)/10)*np.sin(f)*np.cos(f) 58 y1=np.cos((i-t1)/10)*np.sin(f)*np.sin(f) 59 z1=t1/100 60 61 62 x2=np.cos((i-t1)/10)*np.sin(f)*np.cos(f) 63 y2=np.cos((i-t1)/10)*np.cos(f)*np.cos(f) 64 z2=t1/100 65 66 x3=x1+x2 67 y3=y1+y2 68 z3=z1 69 70 ax.plot(x1, y1, z1,"-", c="r") 71 ax.plot(x2, y2, z2,"-", c="b") 72 ax.plot(x3, y3, z3,"-", c="m") 73 74ani = anm.FuncAnimation(fig, update, \ 75 interval = 15, frames = 200) 76 77 78plt.show() 79 80

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

とりあえずこれで満足してます

python3.5

1from mpl_toolkits.mplot3d import Axes3D 2import matplotlib.animation as anm 3import matplotlib.pyplot as plt 4import numpy as np 5 6fig = plt.figure() 7ax = fig.gca(projection='3d') 8f=np.pi/6 9d=np.pi/2 10t=[] 11s=[] 12 13 14def solid(x,y,z,lx,ly,lz,depth,iro): 15 u1=[x,x+lx] 16 v1=[z,z+lz] 17 X1,Y1=np.meshgrid(u1,v1) 18 ax.plot_surface(X1,y,Y1,alpha=depth,color=iro) 19 ax.plot_surface(X1,y+ly,Y1,alpha=depth,color=iro) 20 21 u2=[x,x+lx] 22 v2=[y,y+ly] 23 X2,Y2=np.meshgrid(u2,v2) 24 ax.plot_surface(X2,Y2,z,alpha=depth,color=iro) 25 ax.plot_surface(X2,Y2,z+lz,alpha=depth,color=iro) 26 27 u3=[y,y+ly] 28 v3=[z,z+lz] 29 X3,Y3=np.meshgrid(u3,v3) 30 ax.plot_surface(x,X3,Y3,alpha=depth,color=iro) 31 ax.plot_surface(x+lx,X3,Y3,alpha=depth,color=iro) 32 33 plt.show() 34 35 36def update(i): 37 38 if i==0: 39 del t[:] 40 41 else: 42 pass 43 44 if i !=0: 45 plt.cla() 46 47 X1=0 48 Y1=0 49 Z1=0 50 U1=-np.cos(i/10)*np.sin(f) 51 V1=0 52 W1=0 53 54 X2=0 55 Y2=0 56 Z2=0 57 U2=0 58 V2=np.cos(i/10)*np.cos(f) 59 W2=0 60 61 X3=0 62 Y3=0 63 Z3=0 64 U3=U1+U2 65 V3=V1+V2 66 W3=0 67 68 X4=[X1,U1] 69 Y4=[Y1,V1] 70 Z4=[Z1,W1] 71 X5=[X2,U2] 72 Y5=[Y2,V2] 73 Z5=[Z2,W2] 74 X6=[X3,U3] 75 Y6=[Y3,V3] 76 Z6=[Z3,W3] 77 78 ax.set_xlim(-1.5,1.5) 79 ax.set_ylim(-1.5,1.5) 80 ax.set_zlim(0,3) 81 ax.axis("off") 82 ax.plot(X4,Y4,Z4,"-",c="r",lw=4) 83 ax.plot(X5,Y5,Z5,"-",c="b",lw=4) 84 ax.plot(X6,Y6,Z6,"-",c="m",lw=4) 85 86 t.append(i) 87 s.append(i) 88 89 t1=np.array(t[:200]) 90 91 x1=-np.cos((i-t1)/10)*np.sin(f) 92 y1=0*t1 93 z1=t1/100 94 95 96 x2=0*t1 97 y2=np.cos((i-t1)/10)*np.cos(f) 98 z2=t1/100 99 100 x3=x1+x2 101 y3=y1+y2 102 z3=z1 103 104 105 ax.plot(x1, y1, z1,"-", c="r") 106 ax.plot(x2, y2, z2,"-", c="b") 107 ax.plot(x3, y3, z3,"-", c="m",lw=3) 108 109 if len(s)>250: 110 t2=np.array(s[:len(s)-250]) 111 112 x4=-np.cos((i-t2)/10-d)*np.sin(f) 113 y4=0*t2 114 z4=t2/100+3 115 116 117 x5=0*t2 118 y5=np.cos((i-t2)/10)*np.cos(f) 119 z5=t2/100+3 120 121 x6=x4+x5 122 y6=y4+y5 123 z6=z4 124 125 ax.plot(x4,y4,z4,"-",c="r") 126 ax.plot(x5,y5,z5,"-",c="b") 127 ax.plot(x6, y6, z6,"-", c="m",lw=3) 128 129 130 solid(-1,-1,2,0.25,2,1,0.4,"green") 131 solid(-0.75,-1,2,0.25,2,1,0.4,"yellow") 132 solid(-0.5,-1,2,0.25,2,1,0.4,"green") 133 solid(-0.25,-1,2,0.25,2,1,0.4,"yellow") 134 solid(0,-1,2,0.25,2,1,0.4,"green") 135 solid(0.25,-1,2,0.25,2,1,0.4,"yellow") 136 solid(0.5,-1,2,0.25,2,1,0.4,"green") 137 solid(0.75,-1,2,0.25,2,1,0.4,"yellow") 138 soa=np.array([[1,0,0,2,0,0],[0,-1,0,0,-2,0]]) 139 X,Y,Z,U,V,W=zip(*soa) 140 ax.quiver(X,Y,Z,U,V,W,color="black") 141 142 143 144 145ani = anm.FuncAnimation(fig, update, \ 146 interval = 15, frames = 1000) 147 148plt.show() 149 150 151 152

投稿2017/12/23 14:16

uc200

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問