高校数学10分プログラミング(数学Ⅰ編 1.2次関数)6日目「2次関数を平行移動する」
マガジンリスト > 数学Ⅰ編 1.2次関数 > 6日目 課題
おはようございます。
本日は、高校数学10分プログラミング(数学I編 1.2次関数)の6日目です。
本日の課題は、2次関数を平行移動したグラフを描くプログラムを作成することです。
グラフの平行移動
一般に、$${x}$$軸方向に$${\Delta p}$$、$${y}$$軸方向に$${\Delta q}$$だけグラフを平行移動するとき、そのグラフの関数$${y=f(x)}$$は、
$$
y=f(x) \ \ \longrightarrow \ \ y=f(x- \Delta p)+\Delta q
$$
に変更されます。
課題
2次関数
$$
y = (x-2)^2 + 2
$$
のグラフを$${x}$$軸方向に$${-4}$$、$${y}$$軸方向に$${1}$$だけ平行移動したグラフを実行ウィンドウのキャンバス上に描いてください。
ヒント
もとの2次関数$${y = (x-2)^2 + 2}$$は標準形ですので、課題『高校数学10分プログラミング(数学Ⅰ編 1.2次関数)5日目「2次関数(標準形)のグラフを描く」』で作成したスケッチ「drawQuadraticFunctionVertexForm」をベースに作成します。以下の zip ファイルをダウンロードして展開または解凍してご利用ください。
展開または解凍して得られるスケッチ「translateQuadraticFunction」の中のpdeファイル「translateQuadraticFunction.pde」をダブルクリックしてスケッチ「translateQuadraticFunction」の開発環境ウィンドウを立ち上げます。開発環境ウィンドウのタブ欄で「translateQuadraticFunction」タブを選択すると、そのテキストエリアに以下のソースコードが書かれています。
// 2次関数の標準形y=a(x-p)^2+qのグラフを描く
void setup(){
size(500,500);
noLoop();
float x_range = 10.0; // x軸の表示範囲 -x_rangeからx_rangeまで
float y_range = 10.0; // y軸の表示範囲 -y_rangeからy_rangeまで
setAxes(x_range, y_range); // 座標軸の準備
noFill();
stroke(0,0,0);
// グラフの定義域
float x_l = -x_range; // 定義域の左端
float x_r = x_range; // 定義域の右端
int plot_num = 200; // グラフを描くための頂点の個数
// 2次関数(標準形)の係数
float a = 1.0;
float p = 2.0;
float q = 2.0;
// グラフを描画
float x, y; // 関数の座標
float X, Y; // キャンバス上の座標
beginShape();
for(int i=0; i<=plot_num; i++){
x = x_l + (x_r - x_l) / plot_num * i; // 関数のx座標
y = quadraticfunction(a, p, q, x); // 関数の値
// キャンバス上の座標位置に換算
X = width / 2.0 / x_range * x;
Y = height / 2.0 / y_range * y;
vertex(X, Y);
}
endShape();
}
// 2次関数の標準形
float quadraticfunction(
float a, // 2次の係数
float p, // 2次関数の軸
float q, // 頂点のy座標
float x
){
return a*(x-p)*(x-p) + q;
}
ソースコード1 スケッチ「translateQuadraticFunction」の 「translateQuadraticFunction」タブに書かれているコード
このソースコード1は、もともと2次関数$${y = (x-2)^2 + 2}$$のグラフを描くプログラムとなっていますので、このソースコードに平行移動したグラフを描くコードを追記する形でプログラムを作成してください。具体的には、setup 関数内の下部に、平行移動したグラフを描くコード
// 平行移動したグラフを描く
float dp =
float dq =
stroke(0,0,255); // 輪郭を青色にする
beginShape();
for(int i=0; i<=plot_num; i++){
x = x_l + (x_r - x_l) / plot_num * i; // 関数のx座標
y = // 平行移動した関数の値
// キャンバス上の座標位置に換算
X = width / 2.0 / x_range * x;
Y = height / 2.0 / y_range * y;
vertex(X, Y);
}
endShape();
を追記してください。なお、このコード内の変数 dp と dq は、それぞれ$${x}$$軸方向への平行移動量と$${y}$$軸方向への平行移動量を表しています。これらの変数 dp と dq に課題に合わせて適当な値を与えてください。そして、
y = // 平行移動した関数の値
の部分に、標準形の2次関数を定義した quadraticfunction 関数と平行移動量を表す dp と dq を用いて、平行移動した2次関数の式を記述してプログラムを完成させてください。
その結果、実行ボタンを押すと、キャンバス上にもとの2次関数のグラフが黒色、平行移動した2次関数のグラフが青色で描かれるはずです。
それでは、よろしくお願いします。
MK's papa