放物運動 - 投げて落ちる(基礎)

はじめに

 このページでは、以下の作品をベースとして放物運動について説明します。

この作品はロケット花火をモチーフにした作品で、 打ち上げられたあと、重力に引かれて放物運動を行います。

まずは清書版のソースコード

 この作品は 1 ツィートの中に作品を収める つぶやき Processing という活動にて 発表したものです。 なので、プログラムが圧縮されています。

まずはここに圧縮前のソースコードを示し、 その後、放物運動の実装について説明を行います:

def setup():
    size(500,500)
    noStroke()
    fill(255)

def DrawParabola(n):
    x=400
    y=500
    vy=-0.97
    for i in range(n):
        x-=0.2
        y+=vy
        vy+=0.001
        circle(x,y,random(8/(n-i))+1)

def draw():
    clear()
    f=frameCount*5
    DrawParabola(f)
    filter(BLUR,3)
    DrawParabola(f+7)
    filter(BLUR,1)

放物運動の解説

 上に示したプログラムで、実際に放物線を描くのは DrawParabola 関数です。 DrawParabola 関数は引数を一つ取り、その引数は放物線の長さを示しています。

draw 関数にて 2 回 DrawParabola 関数が呼ばれていますが、 最初の DrawParabola(f) はぼやけた軌跡のために呼び出されています (このページでは放物運動に着目するので、 filter 関数にて BLUR をかける目的については省略します)。

 DrawParabola 関数では、円の集まりとして放物線を描いています。 変数 x,y が描かれる円の位置を示しており、その初期値は (x,y)=(400,500) です。

 for ループが 1 回まわる毎に、x の値は 0.2 ずつ減らされていきます (x-=0.2 がその処理)。 つまり、x 軸方向は等速直線運動として実装されています。

y の値は vy ずつ増加しています。 この vy は y 方向の速度(velocity of y)を示しており、 その初期値は -0.97 です。

この vy が全く変化しない場合は、速度は変化しません。 つまりこの場合、y 軸方向の運動は等速運動となります。

しかし、ループ内の vy+=0.001 という処理により、 y 方向の速度 vy が変化します。 この 0.001 という値は速度に加え続けられるものであり、 これを加速度と呼びます。

vy は、最初は -0.97 という値でしたが、0.001 という値が加え続けられますので、 やがて 0 になり、そして正の値へと変化していきます。

 このように、速度に加え続けられる値(=加速度)が等しい運動を 等加速度運動と呼びます。 プログラムの実行結果をみても分かるように、 放物運動は等加速度運動に他なりません。

まとめ

 今回、例として示した作品では打ち上げられたロケット花火を 自由落下として表現したかったため、等加速度運動=放物線として実装しています。

 速度を vy のような変数に格納し、 その速度に定数を加え続けると等加速度運動となります。 初速を引力(重力)とは反対方向に向けて設定し、 引力の値を加速度として等加速度運動すれば物を放り投げた運動=放物運動になります。

 なお、vy の初期値や 0.001 という加速度の値は、 実際にプログラムを動かし、どのような表現が得られるのか試行錯誤の末に決定しています。 物理的な意味があるわけではありません。