見出し画像

高校数学10分プログラミング(数学Ⅰ編 1.2次関数)7日目「2次関数を対称移動する」

マガジンリスト > 数学Ⅰ編 1.2次関数 > 7日目 課題

おはようございます。

本日は、高校数学10分プログラミング(数学I編 1.2次関数)の7日目です。

本日の課題は、2次関数を対称移動したグラフを描くプログラムを作成することです。

グラフをx軸に関して対称移動

グラフを$${x}$$軸に関して対称移動するとき、そのグラフの関数$${y=f(x)}$$は、

$$
y=f(x) \ \ \longrightarrow \ \ y=-f(x)
$$

となります。

グラフをy軸に関して対称移動

グラフを$${y}$$軸に関して対称移動するとき、そのグラフの関数$${y=f(x)}$$は、

$$
y=f(x) \ \ \longrightarrow \ \ y=f(-x)
$$

となります。

グラフを原点に関して対称移動

グラフを原点に関して対称移動するとき、そのグラフの関数$${y=f(x)}$$は、

$$
y=f(x) \ \ \longrightarrow \ \ y=-f(-x)
$$

となります。

課題

2次関数

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

のグラフに対して、$${x}$$軸に関して対称移動したグラフを赤色、$${y}$$軸に関して対称移動したグラフを緑色、原点に関して対称移動したグラフを青色で実行ウィンドウのキャンバス上に描いてください。


ヒント

もとの2次関数$${y = (x-2)^2 + 2}$$は標準形ですので、課題『高校数学10分プログラミング(数学Ⅰ編)5日目「2次関数(標準形)のグラフを描く」』で作成したスケッチ「drawQuadraticFunctionVertexForm」をベースに作成します。以下の zip ファイルをダウンロードして展開または解凍してご利用ください。

展開または解凍して得られるスケッチ「symmetricQuadraticFunction」の中のpdeファイル「symmetricQuadraticFunction.pde」をダブルクリックしてスケッチ「symmetricQuadraticFunction」の開発環境ウィンドウを立ち上げます。開発環境ウィンドウのタブ欄で「symmetricQuadraticFunction」タブを選択すると、そのテキストエリアに以下のソースコードが書かれています。

// 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 スケッチ「symmetricQuadraticFunction」の 「symmetricQuadraticFunction」タブに書かれているコード

このソースコード1は、もともと2次関数$${y = (x-2)^2 + 2}$$のグラフを描くプログラムとなっていますので、このソースコードに3種類の対称移動したグラフを描くコードを追記する形でプログラムを作成してください。具体的には、setup 関数内の下部に、3種類の対称移動したグラフを描くコード

  // x軸に関して対称移動したグラフを描く
  stroke(255,0,0); // 輪郭を赤色にする
  beginShape();
  for(int i=0; i<=plot_num; i++){
    x = x_l + (x_r - x_l) / plot_num * i; // 関数のx座標
    y =  // x軸に関して対称移動した関数の値
    // キャンバス上の座標位置に換算
    X = width / 2.0 / x_range * x;
    Y = height / 2.0 / y_range * y;
    vertex(X, Y);
  }
  endShape();

  // y軸に関して対称移動したグラフを描く
  stroke(0,255,0); // 輪郭を緑色にする
  beginShape();
  for(int i=0; i<=plot_num; i++){
    x = x_l + (x_r - x_l) / plot_num * i; // 関数のx座標
    y =  // y軸に関して対称移動した関数の値
    // キャンバス上の座標位置に換算
    X = width / 2.0 / x_range * x;
    Y = height / 2.0 / y_range * y;
    vertex(X, Y);
  }
  endShape();

  // 原点に関して対称移動したグラフを描く
  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();

を追記してください。そして、以下の3か所

    y =  // x軸に関して対称移動した関数の値

    y =  // y軸に関して対称移動した関数の値

    y =  // 原点に関して対称移動した関数の値

の部分に、標準形の2次関数を定義した quadraticfunction 関数を用いて、3種類それぞれの対称移動した2次関数の式を記述してプログラムを完成させてください。

その結果、実行ボタンを押すと、キャンバス上にもとの2次関数のグラフが黒色、3種類の対称移動した2次関数のグラフがそれぞれ赤色、緑色、青色で描かれるはずです。


それでは、よろしくお願いします。

MK's papa

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