見出し画像

高校数学10分プログラミング(数学Ⅰ編 1.2次関数)6日目「2次関数を平行移動する」解説

マガジンリスト > 数学Ⅰ編 1.2次関数 > 6日目 解説

本日の課題、おつかれさまでした。

2次関数を平行移動したグラフを描くプログラムを作成することができたでしょうか。

解答例

今回、2次関数$${y = (x-2)^2 + 2}$$のグラフを$${x}$$軸方向に$${-4}$$、$${y}$$軸方向に$${1}$$だけ平行移動したグラフを描くので、課題のヒントで示した平行移動した2次関数を描くコードは、

  // 平行移動したグラフを描く
  float dp = -4.0;
  float dq = 1.0;

  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 = quadraticfunction(a, p, q, x-dp) + dq; // 平行移動した関数の値
    // キャンバス上の座標位置に換算
    X = width / 2.0 / x_range * x;
    Y = height / 2.0 / y_range * y;
    vertex(X, Y);
  }
  endShape();

と書くことができます。とくに平行移動した2次関数は

    y = quadraticfunction(a, p, q, x-dp) + dq; // 平行移動した関数の値

と書くことができます。その結果、ソースコード全体は下記のソースコード2となります。

// 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();

  // 平行移動したグラフを描く
  float dp = -4.0;
  float dq = 1.0;

  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 = quadraticfunction(a, p, q, x-dp) + dq; // 平行移動した関数の値
    // キャンバス上の座標位置に換算
    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;
}

ソースコード2 平行移動した2次関数のグラフを描くプログラム

実行ボタン(左上の ▶ ボタン)を押すと、キャンバス上に2次関数

$$
y=(x-2)^2 + 2
$$

を$${x}$$軸方向に$${-4}$$、$${y}$$軸方向に$${1}$$だけ平行移動したのグラフが描かれます(図1)。

図1 平行移動したグラフが描かれる



本日は以上です。
明日は、2次関数の対称移動を行うプログラムを考えます。

明日もよろしくお願いします。

※今回の課題とその解答例について質問や疑問がある方は、本記事の下部にあるコメント欄からお願いします。

MK’s papa

この記事が気に入ったらサポートをしてみませんか?