見出し画像

斜方投射シミュレーターを作ってみる。#2

最近ベッドから出たくない、"とりすてぃっく"です。
寒い日はベッドかコタツでぬくぬくとしていたいものです。

今回は『Python』で『Tkinter』をつかって
斜方投射シミュレーターを作っていきます。

前回の記事はこちらからどうぞ。


簡易的なシミュレーターを作る

ここでは、簡易的なシミュレーターを作っていきます。

シミュレーターを作るにあたって、前回導出した、

$$
\begin{cases}{} x = v_{0} \cos \theta \times t\\\
y = v_{0} \sin \theta \times t - \frac{1}{2}gt^2\end{cases}
$$

この式を使っていきます。

どんな風に使うかというと、
投射する円の中心座標をこれらの式に変更すれば、
時間によって円の位置が変化していきます。

以下、試作機のコードです。

import tkinter as tk
import numpy as np

screen_width = 1000
screen_height = 600

v_0 = 98
theta = 45 / 180 * np.pi

x = 0
y = 0
g = 9.8

global t
t = 0

root = tk.Tk()
root.title(u"simulator")
canvas = tk.Canvas(root, bg="#fff", width=screen_width, height=screen_height)

canvas.pack()

def main():
    global t

    canvas.create_rectangle(0,0,screen_width,screen_height, fill="white")

    x = v_0 * np.cos(theta) * t
    y = screen_height - (v_0 * np.sin(theta) * t - (1/2) * g * t**2)

    circ = canvas.create_oval(x-10, y-10, x+10, y+10, fill="Blue")

    v_x = v_0 * np.sin(theta)
    v_y = v_0 * np.sin(theta) - g * t
    v = np.sqrt(v_x**2 + v_y**2)

    height = screen_height - y

    txt_1 = canvas.create_text(50,50,text = f"time:{t}s",anchor = "nw",font = 24)
    txt_2 = canvas.create_text(500,50,text = f"velocity:{v}m/s",anchor = "nw", font = 24)
    txt_3 = canvas.create_text(50,80,text = f"distance:{x}m",anchor = "nw",font = 24)
    txt_4 = canvas.create_text(500,80,text = f"height:{height}m",anchor = "nw",font = 24)

    canvas.update()

    t += 0.1

    root.after(100, main)

root.after(100, main)

root.mainloop()

$${v_{0}}$$(v_0)や、$${\theta}$$(theta)の値を変えると
挙動が変わってきます。

y座標は、Tkinterのウィンドウだと上が0で、
下に行くにつれて値が増えていくようになっているので注意。

具体的に言えば、囲碁の碁盤みたいなものかな。

↓動いている様子

simulator.gif

反省点

  • 動かしてみると少しカクカクである。

  • ちょっと重い。

  • 初速度の値を大きくしすぎると画面からはみ出してしまう。

ここらへんをどうにかしたい。
Tkinterじゃないモジュールを使ってみてもいいかもしれない。

もうちょっといいものができたら記事にします。

こうした方がいいよっていうアドバイスがある方は
コメントしていただけると嬉しいです。

いいなと思ったら応援しよう!