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

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

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

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

Q&A

解決済

1回答

2011閲覧

pythonで3dアニメーションが枠の外にまで出ていってしまうのを直したい

uc200

総合スコア32

Python 3.x

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

0グッド

0クリップ

投稿2017/06/20 09:34

python3を使っています.下に作成したアニメーションのスクショとプログラムを載せておきます.合成波が進んでいくところのアニメーションを作ってみましたが,波がどこまでも進んでいきます.適当なところで波の表示がなくなるようにしたいです.どなたか分かる方教えて下さい.
よろしくお願いします.

イメージ説明

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 58 x1=-np.cos((i-t1)/10)*np.sin(f)*np.cos(f) 59 y1=np.cos((i-t1)/10)*np.sin(f)*np.sin(f) 60 z1=t1/100 61 62 63 x2=np.cos((i-t1)/10)*np.sin(f)*np.cos(f) 64 y2=np.cos((i-t1)/10)*np.cos(f)*np.cos(f) 65 z2=t1/100 66 67 x3=x1+x2 68 y3=y1+y2 69 z3=z1 70 71 ax.plot(x1, y1, z1,"-", c="r") 72 ax.plot(x2, y2, z2,"-", c="b") 73 ax.plot(x3, y3, z3,"-", c="m") 74 75 76 77 78 79ani = anm.FuncAnimation(fig, update, \ 80 interval = 15, frames = 10000) 81 82 83plt.show() 84 85

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

1ani = anm.FuncAnimation(fig, update, \ 2 interval = 15, frames = 10000)

frames 引数にて アニメーションのループ回数が指定されます。

現状では 10000 が指定されていますので、update(i)i が 0~9999 の範囲で呼ばれいることになります

ですので、この frames の値を適当な値に調整するとよろしいのではないでしょうか。

投稿2017/06/20 11:49

magichan

総合スコア15898

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

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

uc200

2017/06/26 04:52

回答ありがとうございます。早速試してみましたところ、波の始めと終わりが直線で結ばれるようなアニメーションになってしまいました。これを解決する方法は何かありますか?重ね重ねすみません。
magichan

2017/06/26 05:19

update() 関数の先頭で if i == 0: del t[:] などを入れて、iが0 の時(アニメーションのリスタート時)に グラフの初期化(tリストのクリア処理)を行うとよいのではないでしょうか。
uc200

2017/06/26 06:30

非常に素早い回答ありがとうございます。これはこれで素晴らしいのですが、グラフが完全にリセットされてしまうのではなく、特定の位置以降のグラフが消えていくようにすることはできますか?つまり、あくまでアニメーションは連続的で、波が途中で消えていくようなアニメーションはできますでしょうか? 重ね重ねすみません。
magichan

2017/06/26 08:26

例えば、 t.append(i) t1=np.array(t) の部分を t.append(i) t1=np.array(t[-100]) などとすると最新の 100回分しか表示しないようになると思います。 ただ、これでアニメーションを実行してるとわかると思いますが、 開始点付近のアニメーションは全く別の仕組みで描写されておりますので、 ax.plot(X4,Y4,Z4,"-",c="r",lw=2) ax.plot(X5,Y5,Z5,"-",c="b",lw=2) ax.plot(X6,Y6,Z6,"-",c="m",lw=2) の部分を if i < 100: __ax.plot(X4,Y4,Z4,"-",c="r",lw=2) __ax.plot(X5,Y5,Z5,"-",c="b",lw=2) __ax.plot(X6,Y6,Z6,"-",c="m",lw=2) などとして、途中から描写しなくする仕組みが必要です。
uc200

2017/06/27 04:46

magichan様、ありがとうございました。お陰様で無事動くようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問