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

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

ただいまの
回答率

87.49%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,601

score 32

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

イメージ説明

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as anm
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
f=np.pi/6
d=np.pi/2
t=[]

def update(i):
        if i !=0:
             plt.cla()

        X1=0
        Y1=0
        Z1=0
        U1=-np.cos(i/10)*np.sin(f)*np.cos(f)
        V1=np.cos(i/10)*np.sin(f)*np.sin(f)
        W1=0

        X2=0
        Y2=0
        Z2=0
        U2=np.cos(i/10)*np.sin(f)*np.cos(f)
        V2=np.cos(i/10)*np.cos(f)*np.cos(f)
        W2=0

        X3=0
        Y3=0
        Z3=0
        U3=U1+U2
        V3=V1+V2
        W3=0

        X4=[X1,U1]
        Y4=[Y1,V1]
        Z4=[Z1,W1]
        X5=[X2,U2]
        Y5=[Y2,V2]
        Z5=[Z2,W2]
        X6=[X3,U3]
        Y6=[Y3,V3]
        Z6=[Z3,W3]

        ax.set_xlim(-1.5,1.5)
        ax.set_ylim(-1.5,1.5)
        ax.set_zlim(0,3)
        ax.axis("off")
        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)

        t.append(i)
        t1=np.array(t)

        x1=-np.cos((i-t1)/10)*np.sin(f)*np.cos(f)
        y1=np.cos((i-t1)/10)*np.sin(f)*np.sin(f)
        z1=t1/100


        x2=np.cos((i-t1)/10)*np.sin(f)*np.cos(f)
        y2=np.cos((i-t1)/10)*np.cos(f)*np.cos(f)
        z2=t1/100

        x3=x1+x2
        y3=y1+y2
        z3=z1

        ax.plot(x1, y1, z1,"-", c="r")
        ax.plot(x2, y2, z2,"-", c="b")
        ax.plot(x3, y3, z3,"-", c="m")





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


plt.show()
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/26 15:30

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

    キャンセル

  • 2017/06/26 17: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)

    などとして、途中から描写しなくする仕組みが必要です。


    キャンセル

  • 2017/06/27 13:46

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

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る