@dtwice369

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonプログラム

Q&A

Closed

解決したいこと

Pythonのプログラムなのですがどのように作成すればよいのかわかりません。
教えていただきたいです。

発生している問題・エラー

スクリーンショット 2023-11-21 213233.png

自分で試したこと

グラフは表示されましたが、何も書かれていませんでした。

0 likes

2Answer

「グラフは表示されましたが、何も書かれていませんでした。」とありますので、先生から配布されたのか、自分で書いたコードがあるということですね?
回答者側にとってはそれを見せていただかないと何をアドバイスすればいいのか分からないので、掲載していただきたいです。
また、「どこが」分からないかも明示するととても回答しやすくなるので、ぜひお願いします。

あるいは、ChatGPTにそのままコードをコピペして指示すると回答してもらえるかもしれませんね。

0Like

Comments

  1. @dtwice369

    Questioner

    import matplotlib.animation as animation
    import matplotlib.pyplot as plt
    import numpy as np

    初期条件

    g = 9.8 # 重力加速度
    y0 = 20 # 初期位置 (y)
    theta = 45 # 投射角度 (deg)
    v0 = 10 # 初速度

    計算用変数

    t = 100 # 時間
    x = 0 # 水平位置
    y = y0 # 鉛直位置
    vx = v0 * np.cos(theta) # 水平方向の速度
    vy = v0 * np.sin(theta) # 鉛直方向の速度

    アニメーション用変数

    dt = 0.01 # 時間刻み

    空気抵抗係数

    b = 0.01 # 空気抵抗係数

    アニメーションの初期化

    fig = plt.figure()
    ax = fig.add_subplot(111)
    line, = ax.plot([], [], lw=2)

    アニメーションの更新

    def update(frame):
    global x, y, vx, vy

    # 位置の更新
    x += vx * dt
    y += vy * dt - 0.5 * g * dt ** 2 + b * vy * dt
    
    # 速度の更新
    vx = vx
    vy = vy - g * dt - b * vy
    
    # グラフの更新
    line.set_data([x], [y])
    
    return line,
    

    アニメーションの実行

    ani = animation.FuncAnimation(fig, update, frames=np.arange(0, 50, dt), interval=20, repeat=False)
    plt.show()

    スクリーンショット 2023-11-21 232351.png

    回答ありがとうございます。
    上記のようなプログラムを作成し実行しましたがスクリーンショットのようになってしまいます。

  2. ありがとうございます

    僕が気づいていないだけで、他にいくつか問題点があるかもしれませんが、まずはこちらを直してみてください
    line.set_data([x], [y])
    これだとlineのデータが一つしかできません
    データはxの値のリスト、yの値の過去の値全てを含んだリストであるべきです

    その二つのリストを作り、値全てを格納し、それをset_plot()に入れてみてください

fig = plt.figure()
ax = fig.add_subplot(111)

(1,1,1)では? 次の1行で書けます。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = [1,2,3,4,5]
y = [2,3,4,5,6]
ax.plot(x, y)

plt.show()

最初はアニメーションを度外視して、グラフ表示に専念して下さい。

import matplotlib.pyplot as plt
import time

fig, ax = plt.subplots()

x = [1,2,3,4,5]
y = [2,3,4,5,6]

for i in range(len(x)):
    ax.plot(x[:i+1], y[:i+1])
    plt.show()
    time.sleep(1.5)

パラパラ漫画は可能でしょうか?5枚の画面が表示されるだけでしょうか?

plt.show()
for i in range(len(x)):
    ax.plot(x[:i+1], y[:i+1])
    time.sleep(1.5)

こんなことは? 机上の空論ですみません。

0Like

Your answer might help someone💌