高校数学10分プログラミング(28日目、2024年7月10日)
おはようございます。
今日は、高校数学10分プログラミングの28日目です。
本日の課題は、チェバの定理を確認するプログラムを作成することです。
チェバの定理
$${\triangle \mathrm{ABC}}$$の頂点$${\mathrm{A, B, C}}$$と、三角形の内部の点$${\mathrm{O}}$$を結ぶ直線$${\mathrm{AO, BO, CO}}$$が、辺$${\mathrm{BC, CA, AB}}$$と、それぞれ点$${\mathrm{P, Q, R}}$$で交わるとき、
$$
\frac{\mathrm{BP}}{\mathrm{PC}} \cdot \frac{\mathrm{CQ}}{\mathrm{QA}} \cdot \frac{\mathrm{AR}}{\mathrm{RB}} = 1
$$
が成り立つ。
課題
このチェバの定理が成り立っていることを確かめるプログラムを作成してください。
ヒント
チェバの定理を確かめるための手順
$${\triangle \mathrm{ABC}}$$を準備する
点$${\mathrm{O}}$$の位置を決める
点$${\mathrm{P, Q, R}}$$の座標を求める
$${\mathrm{BP, PC, CQ, QA, AR, RB}}$$の長さを求める
$${\frac{\mathrm{BP}}{\mathrm{PC}} \cdot \frac{\mathrm{CQ}}{\mathrm{QA}} \cdot \frac{\mathrm{AR}}{\mathrm{RB}}}$$を計算する
最後の手順 5 で求めた値が$${1}$$になっていれば、チェバの定理が成り立っていることになります。
手順詳細
$${\triangle \mathrm{ABC}}$$は、24日目(2024年7月4日分)の課題で作成した$${a:b:c=200:250:300}$$となる三角形を利用し、また三角形の頂点の座標位置の設定も、そのまま利用します(図2)。(これは、手順 1 のことを表しています。)
そして、この三角形の内部に適当な点$${\mathrm{O}(x_O, y_O)}$$をとります。今回は、$${x_O=150, \ y_O=50}$$とします。(これは、手順 2 のことを表しています。)
この設定のもとで、辺の長さ$${a,b,c}$$や頂点$${\mathrm{C}}$$の座標位置$${(x_C,y_C)}$$、点$${\mathrm{O}}$$の座標位置$${(x_O, y_O)}$$などを利用して、点$${\mathrm{P, Q, R}}$$の座標位置$${(x_P, y_P), (x_Q, y_Q), (x_R, y_R)}$$を表す式を求めてください。(これは、手順 3 のことを表しています。)
点$${\mathrm{P, Q, R}}$$の座標位置が分かれば、$${\mathrm{BP, PC, CQ, QA, AR, RB}}$$の長さを求めることは簡単です。たとえば、$${\mathrm{BP}}$$は、
$$
\mathrm{BP} = \sqrt{ (x_P - x_B)^2 + (y_P - y_B)^2}
$$
と求めることができます。(これは、手順 4 のことを表しています。)
最後に、$${\frac{\mathrm{BP}}{\mathrm{PC}} \cdot \frac{\mathrm{CQ}}{\mathrm{QA}} \cdot \frac{\mathrm{AR}}{\mathrm{RB}}}$$を計算して、コンソールに出力します。(これは、手順 5 のことを表しています。)
プログラム
以下のソースコード1は、これらの手順をまとめてチェバの定理を確かめるプログラムになります。ただし、このままでは動きません。
// チェバの定理を確かめる
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);
// 三角形の内部の点Oを決める
float O_x, O_y;
O_x = 150.0;
O_y = 50.0;
strokeWeight(5);
point(O_x, O_y); // 点Oをプロットする
//点Pの座標
float P_x, P_y;
P_x =
P_y =
stroke(255,0,0);
strokeWeight(3);
point(P_x, P_y); // 点Pをプロットする
strokeWeight(1);
line(A_x, A_y, P_x, P_y); // 線分APを描く
// 点Qの座標
float Q_x, Q_y;
Q_x =
Q_y =
stroke(0,255,0);
strokeWeight(3);
point(Q_x, Q_y); // 点Qをプロットする
strokeWeight(1);
line(B_x, B_y, Q_x, Q_y); // 線分BQを描く
// 点Rの座標
float R_x, R_y;
R_x =
R_y =
stroke(0,0,255);
strokeWeight(3);
point(R_x, R_y); // 点Rをプロットする
strokeWeight(1);
line(C_x, C_y, R_x, R_y); // 線分CRを描く
// 各辺の長さ
float BP, PC;
BP =
PC =
float CQ, QA;
QA =
CQ =
float AR, RB;
AR =
RB =
println("BP", BP);
println("PC", PC);
println("CQ", CQ);
println("QA", QA);
println("AR", AR);
println("RB", RB);
println("(BP / PC) * (CQ / QA) * (AR / RB) =", (BP / PC) * (CQ / QA) * (AR / RB) );
}
ソースコード1 チェバの定理を確かめるプログラム(未完成)
上記の手順 3 および手順 4 で求めた点の座標位置や線分の長さを表す式を、それぞれソースコード1の
P_x =
P_y =
の部分、
Q_x =
Q_y =
の部分、
R_x =
R_y =
の部分や
// 各辺の長さ
float BP, PC;
BP =
PC =
float CQ, QA;
QA =
CQ =
float AR, RB;
AR =
RB =
の部分に追記してプログラムを完成させてください。
それでは、よろしくお願いします。
MK's papa