ファルの怪文書保管庫

読者になるとファル謹製の怪文書が無料で読み放題!

イカプログラム軽量化

import numpy as np
import matplotlib.pyplot as plt

# 定数
A = 360 # 床の座標
g = 0.033 # 重力加速度
e = 0.92 # 反発係数
A0 = 50 # 床と退場ラインの間隔

y0 = 0 # 初期y座標
vy0 = 0 # y初速度

a = vy0**2 + 2 * g * (A - y0)

T = (-vy0 + np.sqrt(a)) / g # バウンド時刻
vy01 = -e * np.sqrt(a) # バウンド直後の初速度y
Tout = T + (-vy01 + np.sqrt(e**2 * a + 2 * g * A0)) / g # 退場時刻


def calc_y(t): # y座標計算
    if t <= T:
        return y0 + vy0 * t + g * t**2 / 2
    elif t <= Tout:
        return A + vy01 * (t - T) + g * (t - T)**2 / 2
    else:
        return np.nan

# 可視化
t_plot = np.arange(1000)
y_plot = [calc_y(ti) for ti in t_plot]

fig, ax = plt.subplots()

ax.plot(t_plot, y_plot)
ax.invert_yaxis()
fig.show()

必要な情報を生成時に計算しておけば大幅に軽量化できる説が浮上したため、pythonで書いてみる。

x軸方向、分裂後の挙動も含めた構成は検討中。