見出し画像

高校数学10分プログラミング(29日目、2024年7月11日)

おはようございます。

今日は、高校数学10分プログラミングの29日目です。

本日の課題は、メネラウスの定理を確認するプログラムを作成することです。

メネラウスの定理

$${\triangle \mathrm{ABC}}$$の辺$${\mathrm{BC, CA, AB}}$$またはその延長が、三角形の頂点を通らない1つの直線$${l}$$と、それぞれ点$${\mathrm{P,Q,R}}$$で交わるとき、

$$
\frac{\mathrm{BP}}{\mathrm{PC}} \cdot \frac{\mathrm{CQ}}{\mathrm{QA}} \cdot \frac{\mathrm{AR}}{\mathrm{RB}} = 1
$$

が成り立つ。

図1 メネラウスの定理


課題

このメネラウスの定理が成り立っていることを確かめるプログラムを作成してください。

ヒント

メネラウスの定理を確かめるための手順

  1. $${\triangle \mathrm{ABC}}$$を準備する

  2. 直線$${l}$$を決める

  3. 点$${\mathrm{P, Q, R}}$$の座標を求める

  4. $${\mathrm{BP, PC, CQ, QA, AR, RB}}$$の長さを求める

  5. $${\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 のことを表しています。)

図2 三角形の頂点の座標位置

そして、直線$${l}$$の方程式を傾き$${m}$$、切片$${n}$$として、

$$
y=mx+n
$$

で表すことにします。今回は、$${m=-0.6, \ \ n=200}$$とします(図3)。(これは、手順 2 のことを表しています。)

図3 直線l

この設定のもとで、辺の長さ$${a,b,c}$$や頂点$${\mathrm{C}}$$の座標位置$${(x_C,y_C)}$$、直線$${l}$$の方程式の傾き$${m}$$、切片$${n}$$などを利用して、点$${\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(700, 700); // キャンバスの大きさを指定する
  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);

  // 直線lを決める
  float m, n;
  m = -3.0/5.0;
  n = 200.0;
  line(0.0, n, 400.0, m*400.0+n); // 直線lを描く

  //点Pの座標
  float P_x, P_y;
  P_x =
  P_y =
  stroke(255,0,0);
  strokeWeight(5);
  point(P_x, P_y); // 点Pをプロットする
  
  // 点Qの座標
  float Q_x, Q_y;
  Q_x =
  Q_y =
  stroke(0,255,0);
  strokeWeight(5);
  point(Q_x, Q_y); // 点Qをプロットする
  
  // 点Rの座標
  float R_x, R_y;
  R_x =
  R_y =
  stroke(0,0,255);
  strokeWeight(5);
  point(R_x, R_y); // 点Rをプロットする
  
  // 各辺の長さ
  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

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