見出し画像

高校数学10分プログラミング(26日目、2024年7月8日)解説

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

三角形の外心や外接円の半径を求めて、外心や外接円を描くプログラムはうまく動いたでしょうか。

解答例

まず、外心$${\mathrm{O}}$$の座標位置$${(x_O,y_O)}$$の式は、

$$
x_O = \frac{c}{2} , \ \ y_O=\frac{b^2-cx_C}{2y_C}
$$

と表すことができます。また、外接円の半径$${r_O}$$は、

$$
r_O = \sqrt{x_O^2+y_O^2}
$$

と表すことができます。これらの式の導出については、記事『高校数学をプログラミングで解く(数学A編)「2-3 三角形の五心」』の外心と外接円の節で説明していますので、そちらをご覧ください。

これらの式を$${\triangle \mathrm{ABC}}$$に外心と外接円を描くプログラム(ソースコード1)の変数 O_x, O_y および O_r に追記して完成させたものが以下のソースコード2になります。

// 辺の長さの比が4,5,6の三角形に外心と外接円を描く
void setup(){
  size(650, 650); // キャンバスの大きさを指定する
  translate(width/2, height/2); // 座標の中心をキャンバスの中心に移動する
  scale(1,-1); // y軸正の向きを下向きから上向きに反転する
  background(255,255,255); // 背景を白色にする
  noFill(); // 図形の塗りつぶしなし
  noLoop(); // 繰り返し処理をしない
  
  // 三角形の辺の長さ
  float a, b, c; 
  a = 200.0;
  b = 250.0;
  c = 300.0;
  
  // 三角形の頂点の座標
  float A_x, A_y, B_x, B_y, C_x, C_y;
  A_x = 0.0;
  A_y = 0.0;
  B_x = c;
  B_y = 0.0;
  C_x = (c*c + b*b - a*a) / 2.0 / c;
  C_y = sqrt( (a+b+c) * (-a+b+c) * (a-b+c) * (a+b-c) ) / 2.0 / c;
  
  // 三角形を描く
  triangle(A_x, A_y, B_x, B_y, C_x, C_y);

  // 外心の座標
  float O_x, O_y;
  O_x = c / 2.0;
  O_y = (b*b - c*C_x) / 2.0 / C_y;
  
  // 外接円の半径
  float O_r;
  O_r = sqrt(O_x*O_x + O_y*O_y);

  // 外接円を描画する
  stroke(0,0,255);
  circle(O_x, O_y, 2.0*O_r);
  // 外心を描画する
  strokeWeight(5.0);
  point(O_x, O_y);

}

ソースコード2 $${\triangle \mathrm{ABC}}$$に外心と外接円を描くプログラム(完成版)

Processing の開発環境ウィンドウを立ち上げて、そのテキストエディタ部分にソースコード2を書き写し、実行ボタン(左上の ▶ ボタン)を押すと、実行ウィンドウのキャンバス上には、$${\triangle \mathrm{ABC}}$$に対して外心と外心円とが描かれます(図4)。

図4 三角形に外心と外接円が描かれる

解説

今回の課題でも、3辺の長さがわかっている$${\triangle \mathrm{ABC}}$$を描くために、座標系を与えて各頂点の座標位置を設定しました。これは、24日目(2024年7月4日分)の課題で実施しています。これらの座標位置の設定を利用すると、外心の座標位置や外接円の半径を求めることができますので、これらの結果を用いて外心や外接円も描くことができます。
実際、ソースコード2では、point 関数や circle 関数の引数に、これらの結果を渡すことで外心や外接円を描いています。

  // 外接円を描画する
  stroke(0,0,255);
  circle(O_x, O_y, 2.0*O_r);
  // 外心を描画する
  strokeWeight(5.0);
  point(O_x, O_y);

また、外心や外接円を青色で描くために point 関数や circle 関数が呼び出す前に stroke 関数を設定しています。


本日は以上です。
明日は三角形の内心と内接円を描くプログラムについて考えていきたいと思います。

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

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

MK’s papa

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