高校数学10分プログラミング(27日目、2024年7月9日)解説
本日の課題、おつかれさまでした。
三角形の内心や内接円の半径を求めて、内心や内接円を描くプログラムはうまく動いたでしょうか。
解答例
まず、内心$${\mathrm{I}}$$の座標位置$${(x_I,y_I)}$$の式は、
$$
x_I = \frac{-a+b+c}{2} , \ \ y_I=\frac{cy_C}{a+b+c}
$$
と表すことができます。また、内接円の半径$${r_I}$$は、
$$
r_I = y_I
$$
と表すことができます。これらの式の導出については、記事『高校数学をプログラミングで解く(数学A編)「2-3 三角形の五心」』の内心と内接円の節で説明していますので、そちらをご覧ください。
これらの式を$${\triangle \mathrm{ABC}}$$に内心と内接円を描くプログラム(ソースコード1)の変数 I_x, I_y および I_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 I_x, I_y;
I_x = (-a+b+c)/2.0;
I_y = c * C_y / (a+b+c);
// 内接円の半径
float I_r;
I_r = I_y;
// 内接円を描画する
stroke(0,0,255);
circle(I_x, I_y, 2.0*I_r);
// 内心を描画する
strokeWeight(5.0);
point(I_x, I_y);
}
ソースコード2 $${\triangle \mathrm{ABC}}$$に内心と内接円を描くプログラム(完成版)
Processing の開発環境ウィンドウを立ち上げて、そのテキストエディタ部分にソースコード2を書き写し、実行ボタン(左上の ▶ ボタン)を押すと、実行ウィンドウのキャンバス上には、$${\triangle \mathrm{ABC}}$$に対して内心と内接円とが描かれます(図4)。
解説
今回の課題は、昨日の課題であった外心と外接円を描くが内心と内接円を描くに変わっただけです。プログラムはあまり変わらないものでしたので、プログラミングはそんなに難しくなかったと思います。
是非行ってほしいこと
今回の課題は「3辺の長さがわかっている$${\triangle \mathrm{ABC}}$$に内心や内接円を描くプログラムを作成する」ことでしたが、この課題を「紙に、定規とコンパスを用いて作図する」ということを是非行ってもらえたらと思います。そして、その作図を行った手順と今回作成したプログラムの処理の流れとを比較してみてください。多くの示唆が得られると思います。
本日は以上です。
明日はチェバの定理を確かめるプログラムについて考えていきたいと思います。
明日もよろしくお願いします。
※今回の課題とその解答例について質問や疑問がある方は、本記事の下部にあるコメント欄からお願いします。
MK’s papa
この記事が気に入ったらサポートをしてみませんか?