高校数学をプログラミングで解く(数学A編)「2-2 三角形の辺の比」
マガジンリスト > 数学A編 2.図形の性質 > 2-2 三角形の辺の比
はじめに
今回は、数学Aで学ぶ「三角形の辺の比」について、角の二等分線と辺の比の関係をそれが成り立っているか確かめるプログラムを作成します。
角の二等分線と比に関する命題①
角の二等分線と比に関する次の命題をプログラムを書いて確かめます。
命題①
$${\triangle \mathrm{ABC}}$$の$${\angle \mathrm{A}}$$の二等分線と辺$${\mathrm{BC}}$$との交点$${\mathrm{P}}$$は、辺$${\mathrm{BC}}$$を$${\mathrm{AB}:\mathrm{AC}}$$に内分する。
この命題①が成り立っているかを確かめる方法として、線分$${\mathrm{BP}}$$と$${\mathrm{CP}}$$の長さを求めて、それらの比$${\mathrm{BP/CP}}$$が$${\mathrm{AB/AC}}$$と一致するかどうかを確かめます。
三角形の準備
$${\triangle \mathrm{ABC}}$$を以下のようにします。
今回は、特に$${\triangle \mathrm{ABC}}$$の辺の長さの比が$${a:b:c=4:5:6}$$となるようにします。
頂点の座標位置
図 2の三角形を描くために、各頂点の座標位置を求めます。以下のように、頂点$${\mathrm{A}}$$を原点とし、頂点$${\mathrm{A}}$$と頂点$${\mathrm{B}}$$を結んだ直線を右向き正とする$${x}$$軸、その直線と垂直に交わり、頂点$${\mathrm{A}}$$を通る直線を上向き正とする$${y}$$軸とします。
その結果、頂点$${\mathrm{A}}$$の座標を$${(0,0)}$$、頂点$${\mathrm{B}}$$の座標を$${(c,0)}$$と置くことができます。また、頂点$${\mathrm{C}}$$から直線$${\mathrm{AB}}$$に下した垂線と直線$${\mathrm{AB}}$$との交点を$${\mathrm{D}}$$とし、頂点$${\mathrm{C}}$$の座標を$${(x_C,y_C)}$$とします。
このとき、直角三角形$${\mathrm{ACD}}$$に対して三平方の定理を適用すると、
$$
x_C^2+y_C^2=b^2
$$
となり、直角三角形$${\mathrm{BCD}}$$に対して三平方の定理を適用すると、
$$
(c-x_C)^2+y_C^2=a^2
$$
となります。これら2つの方程式を連立させて解くと、頂点$${\mathrm{C}}$$の座標は
$$
x_C=\frac{b^2+c^2-a^2}{2c}, \ \ y_C= \frac{\sqrt{(a+b+c)(-a+b+c)(a-b+c)(a+b-c)}}{2c}
$$
と求めることができます。
三角形を描くプログラム
三角形の3つの頂点の座標がわかりましたので、あとは三角形を描く関数triangle を用いればこの三角形を描くことができます。ここでは、各辺の長さをそれぞれ
$$
a=200, \ \ b=250, \ \ c=300
$$
として描きます。
// 辺の長さの比が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);
}
ソースコード1 三角形を描くプログラム
このソースコードを、Processingの開発環境ウィンドウを開いて(スケッチ名を「drawTriangle」としています)、テキストエディタ部分に書いて実行すると、実行ウィンドウのキャンバスに三角形が描かれます。
交点Pの座標
交点$${\mathrm{P}}$$の座標$${(x_P, y_P)}$$を求めます。
そのためにまず$${\angle \mathrm{A}}$$の二等分線の方程式を作図の要領で求めます。
直線$${\mathrm{AC}}$$上に適当な点$${\mathrm{E}}$$を取ります。点$${\mathrm{E}}$$の$${x}$$座標を$${x_E}$$とすると、点$${\mathrm{E}}$$の座標は
$$
\left( x_E, \frac{y_C}{x_C} x_E \right)
$$
となります。次に、$${\mathrm{AE}=\mathrm{AE'}}$$となるような、直線$${\mathrm{AB}}$$上の点$${\mathrm{E'}}$$
$$
\left( \sqrt{1+\frac{y_C^2}{x_C^2}} x_E, 0 \right) = \left( \frac{b}{x_C} x_E, 0 \right)
$$
をとります。
点$${\mathrm{E}}$$を通り、直線$${\mathrm{AC}}$$に垂直な直線$${l}$$の方程式は、
$$
y=-\frac{x_C}{y_C}(x-x_E) + \frac{y_C}{x_C} x_E
$$
となり、点$${\mathrm{E'}}$$を通り、直線$${\mathrm{AB}}$$に垂直な直線$${l'}$$の方程式は
$$
x=\frac{b}{x_C}x_E
$$
となります。これらの直線$${l}$$と$${l'}$$との交点は
$$
\left( \frac{b}{x_C} x_E, \frac{b(b-x_C)}{x_C y_C} x_E \right)
$$
となります。したがって、$${\angle \mathrm{A}}$$の二等分線の方程式は
$$
y=\frac{b-x_C}{y_C} x
$$
となります。一方、直線$${\mathrm{BC}}$$の方程式は
$$
y=-\frac{y_C}{c-x_C}(x-c)
$$
となるので、この式と$${ \angle \mathrm{A}}$$の二等分線の方程式との連立方程式を解くと、
$$
x_P = \frac{b+x_C}{b+c} c, \ \ y_P=\frac{y_C}{b+c}c
$$
となります。
線分BPとCPの長さを求める
交点$${\mathrm{P}}$$の座標がわかったので、線分$${\mathrm{BP}}$$と$${\mathrm{CP}}$$の長さを求めることができます。
$$
\mathrm{BP}= \sqrt{ (x_P-c)^2+y_P^2 } \\ \mathrm{CP} = \sqrt{ (x_P-x_C)^2+(y_P-y_C)^2 }
$$
命題①を確かめるプログラム
それでは、プログラムを作成します。ソースコード1にコードを追加する形で作成していきます。
// 「△ABCの∠Aの二等分線と辺BCとの交点Pは、辺BCをAB:ACに内分する」ことを確かめる
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);
// 点Pの座標
float P_x, P_y;
P_x = (b + C_x) * c / (b + c);
P_y = C_y * c / (b + c);
strokeWeight(5.0);
stroke(255,0,0); // 赤色
point(P_x, P_y); // 点Pをプロットする
// 線分BPとCPの長さ
float BP, CP;
BP = sqrt( (P_x - c) * (P_x - c) + P_y * P_y );
CP = sqrt( (P_x - C_x) * (P_x - C_x) + (P_y - C_y) * (P_y - C_y) );
println("BP", BP); // BPの長さをコンソール出力
println("CP", CP); // CPの長さをコンソール出力
println("AB/AC", c/b); // AB/ACをコンソール出力
println("BP/CP", BP/CP); // BP/CPをコンソール出力
}
ソースコード2 命題①を確かめるためのプログラム
このソースコードを、Processingの開発環境ウィンドウを開いて(スケッチ名を「bisectorandratio」としています)、テキストエディタ部分に書いて実行すると、コンソールに結果が出力されます。
結果として$${\mathrm{BP}/\mathrm{CP}}$$と$${\mathrm{AB}/\mathrm{AC}}$$の値が丸め誤差の範囲で一致しており、命題①が成り立っていることがわかります。
また、実行ウィンドウのキャンバスに$${\triangle \mathrm{ABC}}$$の線分$${\mathrm{BC}}$$上に点$${\mathrm{P}}$$が赤色の点で描かれます。
角の二等分線と比に関する命題②
角の二等分線と比に関するもう一つの命題をプログラムを書いて確かめます。
命題②
$${\mathrm{AB} \neq \mathrm{AC}}$$である$${\triangle \mathrm{ABC}}$$の頂点$${\mathrm{A}}$$における外角の二等分線と辺$${\mathrm{BC}}$$の延長との交点$${\mathrm{Q}}$$は、辺$${\mathrm{BC}}$$を$${\mathrm{AB}:\mathrm{AC}}$$に外分する。
この命題②が成り立っているかを確かめる方法として、線分$${\mathrm{BQ}}$$と$${\mathrm{CQ}}$$の長さを求めて、それらの比$${\mathrm{BQ}/\mathrm{CQ}}$$が$${\mathrm{AB}/\mathrm{AC}}$$と一致するかどうかを確かめます。
三角形の準備
ここで扱う$${\triangle \mathrm{ABC}}$$は命題①を確かめるときに用意したものと同じものですが、辺の長さについてはそれぞれ半分となる、
$$
a=100, \ \ b=125, \ \ c=150
$$
とします。
交点Qの座標
交点$${\mathrm{Q}}$$の座標$${(x_Q, y_Q)}$$を求めます。
外角の二等分線は$${\angle \mathrm{A}}$$の二等分線(命題①を確かめる際に導出済み)と垂直に交わるので、頂点$${\mathrm{A}}$$における外角の二等分線の方程式は、
$$
y=-\frac{y_C}{b-x_C}x
$$
となります。直線$${\mathrm{BC}}$$の方程式は
$$
y=-\frac{y_C}{c-x_C}(x-c)
$$
となります。これと頂点$${\mathrm{A}}$$における外角の二等分線の方程式との連立方程式を解くと、
$$
x_Q=\frac{b-x_C}{b-c}c, \ \ y_Q=\frac{-y_C}{b-c}c
$$
となります。
線分BQとCQの長さを求める
交点$${\mathrm{Q}}$$の座標がわかったので、線分$${\mathrm{BQ}}$$と$${\mathrm{CQ}}$$の長さを求めることができます。
$$
\mathrm{BQ}=\sqrt{(x_Q-c)^2+y_Q^2} \\
\mathrm{CQ}=\sqrt{(x_Q-x_C)^2+(y_Q-y_C)^2}
$$
命題②を確かめるプログラム
命題②を確かめるための準備が整ったので、プログラムを作成します。ソースコード1にコードを追加する形で作成していきますが、先に説明したように$${\triangle \mathrm{ABC}}$$の各辺の長さは半分に、そして、キャンバスサイズは1000×1000と少し大きくしています。
// 「AB≠ACである△ABCの頂点Aにおける外角の二等分線と辺BCの延長との交点Qは、
// 辺BCをAB:ACに外分する」ことを確かめる
void setup(){
size(1000, 1000); // キャンバスの大きさを指定する
translate(width/2, height/2); // 座標の中心をキャンバスの中心に移動する
scale(1,-1); // y軸正の向きを下向きから上向きに反転する
background(255,255,255); // 背景を白色にする
noFill(); // 図形の塗りつぶしなし
noLoop(); // 繰り返し処理をしない
// 三角形の辺の長さ
float a, b, c;
a = 100.0;
b = 125.0;
c = 150.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);
// 点Qの座標
float Q_x, Q_y;
Q_x = (b - C_x) * c / (b - c);
Q_y = -C_y * c / (b - c);
strokeWeight(5.0);
stroke(255,0,0); // 赤色
point(Q_x, Q_y); // 点Qをプロットする
// 線分BQとCQの長さ
float BQ, CQ;
BQ = sqrt( (Q_x - c) * (Q_x - c) + Q_y * Q_y );
CQ = sqrt( (Q_x - C_x) * (Q_x - C_x) + (Q_y - C_y) * (Q_y - C_y) );
println("BQ", BQ); // BQの長さをコンソール出力
println("CQ", CQ); // CQの長さをコンソール出力
println("AB/AC", c/b); // AB/ACをコンソール出力
println("BQ/CQ", BQ/CQ); // BQ/CQをコンソール出力
}
ソースコード3 命題②を確かめるためのプログラム
このソースコードを、Processingの開発環境ウィンドウを開いて(スケッチ名を「bisectorandratio2」としています)、テキストエディタ部分に書いて実行すると、コンソールに結果が出力されます。
結果として$${\mathrm{BQ}/\mathrm{CQ}}$$と$${\mathrm{AB}/\mathrm{AC}}$$の値が一致しており、命題②が成り立っていることがわかります。
また、実行ウィンドウのキャンバスに$${\triangle \mathrm{ABC}}$$の線分$${\mathrm{BC}}$$の延長線上に点$${\mathrm{Q}}$$が赤色の点で描かれます。なお、今回、$${\triangle \mathrm{ABC}}$$のサイズを半分にし、キャンバスサイズを大きくした理由は点$${\mathrm{Q}}$$をキャンバス内に収めるためでした。
まとめ
今回は、数学Aで学ぶ「三角形の辺の比」について、角の二等分線と辺の比の関係を表す2つの命題が成り立っているか確かめるプログラムを作りました。ポイントは座標軸をうまく設定して、計算をできるだけ簡単にするところです。座標軸の原点に三角形の1つの頂点を置き、2つ目の頂点を$${x}$$軸上に置くことで、3つ目の頂点の座標は比較的簡単に求めることができました。
2つの命題については今回証明したわけではなく、ある特定の三角形に対しては成り立つことを確かめただけなので、一度きちんと証明しておくとよいと思います。1つの証明方法としては、今回$${\mathrm{BP}}$$や$${\mathrm{CP}}$$、$${\mathrm{BQ}}$$や$${\mathrm{CQ}}$$の式を導出したので、これらの式に$${x_P, y_P, x_Q, y_Q}$$や$${x_C, y_C}$$の式を代入して整理すると、最終的には$${a,b,c}$$の式で表すことができます。結果として$${\mathrm{BP}:\mathrm{CP}=c:b}$$や$${\mathrm{BQ}:\mathrm{CQ}=c:b}$$となり証明することができます。
参考文献
改訂版 教科書傍用 スタンダード 数学A(数研出版、ISBN9784410209277)
演習問題
角の二等分線と比に関する命題②では、条件として$${\mathrm{AB} \neq \mathrm{AC}}$$となっていますが、$${\mathrm{AB} = \mathrm{AC}}$$のときはどうなるでしょうか。$${\mathrm{AB} = \mathrm{AC}}$$のときの頂点$${\mathrm{A}}$$における外角の二等分線を描くプログラムを作成して、実際に二等分線を描いて考察してみてください。
演習問題の解答例
ここから先は
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?