![見出し画像](https://assets.st-note.com/production/uploads/images/140336159/rectangle_large_type_2_88ab9700529e04d82ea0c99912966085.png?width=1200)
高校数学をプログラミングで解く(数学III編)「6-7 速度と加速度」
マガジンリスト > 数学Ⅲ編 6.微分法の応用 > 6-7 速度と加速度
はじめに
今回は、数学IIIで学ぶ「速度と加速度」について、数直線上の点の動きを表す動画を作成するプログラムを作成します。
速度と加速度
まず、速度と加速度について解説しておきます。
直線上の点の運動
数直線上を運動する点の時刻$${t}$$における座標を$${x=f(t)}$$とすると
速度
$$
v = \frac{dx}{dt} = f'(t)
$$
加速度
$$
a = \frac{dv}{dt} = \frac{d^2x}{dt^2} = f''(t)
$$
速さ(速度の大きさ)
$$
|v|
$$
加速度の大きさ
$$
|a|
$$
平面上の点の運動
座標平面上を運動する点の時刻$${t}$$における座標$${(x,y)}$$が$${t}$$の関数であるとき
速度
$$
\overrightarrow{v} = \left( \frac{dx}{dt}, \frac{dy}{dt} \right)
$$
加速度
$$
\overrightarrow{a} = \left( \frac{d^2x}{dt^2}, \frac{d^2 y}{dt^2} \right)
$$
速さ(速度の大きさ)
$$
|\overrightarrow{v}| = \sqrt{ \left( \frac{dx}{dt} \right)^2 + \left( \frac{dy}{dt} \right)^2 }
$$
加速度の大きさ
$$
|\overrightarrow{a}| = \sqrt{ \left( \frac{d^2x}{dt^2} \right)^2 + \left( \frac{d^2y}{dt^2} \right)^2 }
$$
等速円運動
座標平面上を運動する点$${\mathrm{P}}$$の時刻$${t}$$における座標$${(x,y)}$$が
$$
x = r \cos \omega t, \ \ y= r \sin \omega t
$$
(ただし、$${r > 0, \ \ \omega > 0}$$)で表されるとき、点$${ \mathrm{P} }$$は原点$${\mathrm{O}}$$を中心とする半径$${r}$$の円周上を一定の速さ$${r \omega}$$で動く。このような運動を 等速円運動 といい、$${\omega}$$をその 角速度 という。
直線上の点の運動を描く
今回は次の直線上の点の運動を動画として描くことを考えてみます。
問題
数直線上を運動する点$${\mathrm{P}}$$の座標$${p}$$が、時刻$${t}$$の関数として$${p=t^3-4t}$$で表されるとき、その運動を表す動画を作成せよ。また、時刻$${t}$$の位置での速度と加速度をそれぞれ赤色のベクトル、青色のベクトルで表示せよ。
アルゴルズム設計
まず、時刻$${t}$$での点$${\mathrm{P}}$$の速度$${v}$$と加速度$${a}$$は、それぞれ、
$$
v = 3 t^2 - 4
$$
と
$$
a = 6 t
$$
となります。
あとは、時刻$${t}$$ごとに、数直線上の点$${\mathrm{P}}$$の位置$${p}$$に点をプロットし、その点から速度$${v}$$を表すベクトルを赤色で、加速度$${a}$$を表すベクトルを青色でそれぞれ描いていくことで動画を作成することができます。
プログラム
今回は平面上のベクトルを描きたいので、記事『高校数学をプログラミングで解く(数学B編)「1-0 ベクトルを描く」』で作成したスケッチ「drawVector」を再利用して作成していきます。以下の zip ファイルをダウンロードして展開または解凍してください。
そして、スケッチの名前(フォルダ名)を「drawVelocityandAcceleration」と変更し、またスケッチ「drawVelocityandAcceleration」内の「drawVector.pde」ファイルの名前を「drawVelocityandAcceleration.pde」に変更します。そして、pdeファイル「drawVelocityandAcceleration.pde」をダブルクリックしてスケッチ「drawVelocityandAcceleration」の開発環境ウィンドウを立ち上げます。開発環境ウィンドウのタブ欄で「drawVelocityandAcceleration」タブを選択し、そのテキストエリアのソースコードを以下で書き換えます。
float x_range = 10.0; // x軸の表示範囲 -x_rangeからx_rangeまで
float y_range = 10.0; // y軸の表示範囲 -y_rangeからy_rangeまで
float t = 0.0; // 時刻
float p, v, a; // 点Pの位置、速度、加速度
// ベクトルを描く
void setup(){
size(500,500,P2D);
}
void draw(){
background(204,204,204);
setAxes(x_range, y_range); // 座標軸の準備
// 点Pの位置をプロットする
p = position(t);
stroke(0,0,0);
plot_point(p,0.0);
// 点Pの速度をベクトルで描く
v = velocity(t);
stroke(255,0,0);
arrow(p, 0.0, v+p, 0.0, x_range);
// 点Pの加速度をベクトルで描く
a = acceleration(t);
stroke(0,0,255);
arrow(p, 0.0, a+p, 0.0, x_range);
// 時刻を更新
t = t+1.0/60.0;
}
// 点Pの位置を表す関数
float position(
float t
){
return t*t*t-4.0*t;
}
// 点Pの速度を表す関数
float velocity(
float t
){
return 3.0*t*t-4.0;
}
// 点Pの加速度を表す関数
float acceleration(
float t
){
return 6.0*t;
}
// 点をプロットする関数
void plot_point(
float x, // 点のx座標
float y // 点のy座標
){
float X, Y; // キャンバス上の座標
// キャンバス上の座標位置に換算
X = width / 2.0 / x_range * x;
Y = height / 2.0 / y_range * y;
strokeWeight(5);
point(X, Y);
strokeWeight(1);
}
ソースコード1 数直線上の点$${\mathrm{P}}$$の動きを表す動画を作成するプログラム
ソースコード1を、スケッチ「drawVelocityandAcceleration」の「drawVelocityandAcceleration」タブのテキストエディタ部分に書いて実行すると、図1のように、実行ウィンドウのキャンバス上に、点$${\mathrm{P}}$$の位置を黒色の点、点の速度を赤色のベクトル、加速度を青色のベクトルでそれぞれ表された動画が作成されます。
![](https://assets.st-note.com/production/uploads/images/140330663/picture_pc_641cad88dbb1216f66ae91da769b0d7d.gif)
プログラムの解説
今回のプログラムについて、もう少し解説しておきます。
速度や加速度のベクトル表示
ベクトルを描くために、記事『高校数学をプログラミングで解く(数学B編)「1-0 ベクトルを描く」』で作成したスケッチ「drawVector」内に含まれる「setArrow.pde」ファイルで定義した arrow 関数を利用しています。
void arrow(
float start_x, // ベクトルの始点のx座標
float start_y, // ベクトルの始点のy座標
float end_x, // ベクトルの終点のx座標
float end_y, // ベクトルの終点のx座標
float range // グラフの表示範囲を-rangeからrangeまでとする
)
今回のプログラムでは、この arrow 関数を用いて速度や加速度をベクトルとして実行ウィンドウのキャンバス上に表示したわけですが、一点注意が必要です。それは、ベクトルの始点が点$${\mathrm{P}}$$の位置$${p}$$となるので、ベクトルの終点は速度の場合$${v+p}$$、加速度の場合$${a+p}$$となることです。これを考慮して、ソースコード1では、速度を表すベクトルを
arrow(p, 0.0, v+p, 0.0, x_range);
加速度を表すベクトルを
arrow(p, 0.0, a+p, 0.0, x_range);
と記述しています。
動画の作成
今回は、数直線上の点$${\mathrm{P}}$$の動きを動画にしています。Processing での動画については、記事『高校数学をプログラミングで解く(準備編)「4-1 図形を動かす」』で解説した draw 関数を利用することで作成できます。つまり、「 draw 関数内に記載した処理を1秒間に60回呼び出して実行する」という draw 関数の性質を利用すれば動画を作成できます。
以下、draw 関数内で記述した処理について解説しておきます。
① 背景を更新
まず、描かれている図形を背景色のグレーでキャンバスを塗りつぶすことで一旦消します。
background(204,204,204);
② 座標軸を描く
setAxes(x_range, y_range); // 座標軸の準備
③ 時刻$${t}$$での点$${\mathrm{P}}$$の位置、速度、加速度を計算して、座標上の描く
// 点Pの位置をプロットする
p = position(t);
stroke(0,0,0);
plot_point(p,0.0);
// 点Pの速度をベクトルで描く
v = velocity(t);
stroke(255,0,0);
arrow(p, 0.0, v+p, 0.0, x_range);
// 点Pの加速度をベクトルで描く
a = acceleration(t);
stroke(0,0,255);
arrow(p, 0.0, a+p, 0.0, x_range);
④ 時刻を更新する
時刻$${t}$$を更新します。なお、draw 関数が「1秒間に60回呼び出す」ことに合わせて、$${t}$$を$${1/60}$$ずつ大きくするようにしています。
t = t+1.0/60.0;
まとめ
今回は、数学IIIで学ぶ「速度と加速度」について、数直線上の点の動きを表す動画を作成するプログラムを作成しました。
その際、点の位置だけでなく、点の速度や加速度もベクトルを描いて表現するようにしました。平面上のベクトルの描画については、記事『高校数学をプログラミングで解く(数学B編)「1-0 ベクトルを描く」』を、動画作成については、記事『高校数学をプログラミングで解く(準備編)「4-1 図形を動かす」』もご覧ください。
今回は、数直線上の点の動きについてみてみましたが、もちろん、平面上の点の運動や等速円運動についてもその動画を作成することができます。是非チャレンジしてみてください。
読んだ感想などをお寄せください
本記事を読んだ感想や質問などを以下のお問い合せフォームからお寄せください。感想、質問をいただいた方には本記事の演習問題の解答をプレゼントします。(お問合せフォームの本文に、本記事のタイトルを入れてください。)
参考文献
改訂版 教科書傍用 スタンダード・オリジナル 数学III(数研出版、ISBN9784410209567)
演習問題
等速円運動の動画を作成してみてください。なお、速度ベクトルを赤色、加速度ベクトルを青色で表示してみてください。
演習問題の解答例
ここから先は
この記事が気に入ったらチップで応援してみませんか?