ふくふくHukuhuku Inc.
EP.04Kids Python対象: 小6以上 13分公開: 2026-05-10

ボールを跳ねさせよう:重力って何だろう?

落ちて、地面で跳ね返って、また落ちる。当たり前の動きを、自分でプログラムで作ると「重力=g」のすごさが見えてくる。

#小学生#理科#物理#アニメーション
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

ボールを上から落とすと、地面で跳ね返って、また落ちる。当たり前の動きだけど、「ボールがどう動くか」を自分でプログラムすると、地球の重力ってすごいんだなと感じます。

学校で習ったことを思い出そう

  • 重力:地球が物を引っぱる力
  • 重力加速度 g:物が落ちる速さの増え方(地球では g = 9.8 m/s²)
  • 速さ vs 加速度:速さは「どれだけ動いてるか」、加速度は「速さがどれだけ増えてるか」

Step 1: ボールが落ちるしくみ

コマ送りで考えるよ。1コマごとに:

  1. 1ボールの位置を、いまの速さだけ動かす
  2. 2ボールの速さを、重力の分だけ増やす(下方向に)
  3. 3もし地面についたら、速さを反転(跳ね返り)
コマ1コマ2コマ3コマ4コマ5だんだん速く落ちる(重力で速さが増えていく)
コマ送りでボールを動かす

Step 2: 実装

colab で アニメ表示
Python
import matplotlib.pyplot as pltfrom matplotlib.animation import FuncAnimationfrom IPython.display import HTML
# 初期設定y = 100        # 高さ(最初は100の位置から落とす)vy = 0         # 速さ(最初は0、落ちてない)gravity = 9.8  # 重力加速度dt = 0.1       # 1コマあたりの時間bounce = 0.8   # 跳ね返り係数(0.8 = 80%の高さまで跳ねる)
fig, ax = plt.subplots(figsize=(6, 6))ax.set_xlim(-1, 1)ax.set_ylim(0, 110)dot, = ax.plot([0], [y], "o", markersize=20, color="orange")
def update(frame):    global y, vy    vy = vy - gravity * dt   # 下向きに加速    y = y + vy * dt          # 速さの分だけ位置を変える    if y <= 0:        y = 0        vy = -vy * bounce    # 跳ね返り(速さが反転+ちょっと小さく)    dot.set_data([0], [y])    return dot,
ani = FuncAnimation(fig, update, frames=200, interval=50, blit=True)HTML(ani.to_jshtml())
実行すると...

ボールがふわっと落ちて、地面でぽよーんと跳ねて、だんだん小さくなって止まるよ。3D ゲームのような動きが、20行のコードで作れる!

Step 3: 月と火星でも跳ねさせる

重力は星によって違います:

重力 (m/s²)地球の何倍結果
地球9.81.0ふつうに跳ねる
1.60.16ゆっくり、高く跳ねる
火星3.70.38中間
木星24.82.5あっという間に止まる

コードの `gravity = 9.8` を変えるだけで、月や火星にいる気分になれます。

やってみよう

  • `gravity` を 1.6(月)にしてみる:跳ねが大きくなるのを観察
  • `bounce` を 1.0 にしてみる:減らないボール!永遠に跳ね続ける
  • `bounce` を 0.5 にしてみる:すぐ止まるボール
  • ボールを2つにしてみる:別の重力でレースさせる
おうちの人・先生へ

中学3年の物理「運動とエネルギー」、高校物理基礎「等加速度運動」の入口として最適。「位置 + 速さ × 時間」「速さ + 加速度 × 時間」というオイラー法(数値計算の最も基本)を、無意識のうちに実装する経験になります。

に頼んでみよう

発展課題のプロンプト例
小学6年生の子と Python でボールが跳ねるアニメを作りました。
重力を変えると月や火星みたいになるのが面白かったみたいです。

次は、ボールを「斜めに投げる」アニメも作ってみたいです。
小学生でも理解できるコードと、何が起きてるかの解説をお願いします。
想定される実行結果(例示)
小学生でも分かる「斜めに投げる」プログラムを書きます。

## ポイント
横と縦、別々の動きを足すだけ!
- 横向きの速さ: 一定(重力は縦にしか効かない)
- 縦向きの速さ: 重力で減っていく

## コード
```python
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

x, y = 0, 0           # スタート地点
vx, vy = 5, 15        # 横向き5、縦向き15で投げる
gravity = 9.8
dt = 0.1

fig, ax = plt.subplots()
ax.set_xlim(0, 50)
ax.set_ylim(0, 15)
dot, = ax.plot([x], [y], "o", markersize=15, color="orange")

def update(frame):
    global x, y, vx, vy
    x += vx * dt        # 横は普通に進む
    vy -= gravity * dt  # 縦は重力で速さが減る
    y += vy * dt
    if y < 0: y = 0     # 地面で止める
    dot.set_data([x], [y])
    return dot,
```

実行すると、ボールが**山なり**に飛ぶよ。これが「放物運動」!

次回予告

次回は、自分の住んでる町の今の天気を、パソコンに教えてもらいます。気象庁から本物のデータがやってくるよ!

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp