見出し画像

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

おはようございます。

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

本日の課題は、直線に接する円を描くプログラムを作成することです。

図1 直線に接する2つの円

課題

図1のような、直線$${l}$$上の点$${\mathrm{A}}$$で接する2つの半径$${r}$$の円$${\mathrm{O}_1, \mathrm{O}_2}$$を描くプログラムを作成してください。


ヒント

次の手順で考えてみてください。

① 座標軸を図2のように設定します。そして、直線$${l}$$の方程式を

$$
y=mx+n
$$

とし、点$${\mathrm{A}}$$の座標を$${(x_A,y_A)}$$、2つの円の中心座標をそれぞれ$${\mathrm{O}_1(x_1,y_1),  \mathrm{O}_2(x_2,y_2)}$$とします。

図2 座標軸の設定

② 点$${\mathrm{A}}$$の$${y}$$座標$${y_A}$$を$${m, n, x_A}$$で表してください。これは、直線$${l}$$の方程式に、点$${\mathrm{A}}$$の座標$${(x_A, y_A)}$$を代入することで求まります。

③ 2つの円の中心座標$${\mathrm{O}_1(x_1,y_1),  \mathrm{O}_2(x_2,y_2)}$$をそれぞれ、$${m, n, r, x_A, y_A}$$で表してください。これらは、点$${\mathrm{A}}$$を通り、直線$${l}$$に垂直な直線と点$${\mathrm{A}}$$を中心とする半径$${r}$$の円との交点として求めることができます。

プログラム

以下のソースコード1は、直線$${l}$$上の点$${\mathrm{A}}$$で接する2つの半径$${r}$$の円$${\mathrm{O}_1, \mathrm{O}_2}$$を描くプログラムになります。なお、直線$${l}$$の傾き$${m}$$、切片$${n}$$、2つの円の半径$${r}$$、点$${\mathrm{A}}$$の$${x}$$座標$${x_A}$$をそれぞれ

$$
m=0.5, \ n=-100, \ r=150, x_A=100
$$

としています。
ただし、このままでは動きません。

// 直線l上の点Aで接する半径rの円
void setup(){
  size(500, 600); // キャンバスの大きさを指定する
  translate(width/3.0, height*2.0/5.0); // 座標の中心を移動する
  scale(1,-1); // y軸正の向きを下向きから上向きに反転する
  background(255,255,255); // 背景を白色にする
  noFill(); // 図形の塗りつぶしなし
  noLoop(); // 繰り返し処理をしない

  // 直線lの傾きと切片
  float m, n;
  m = 0.5;
  n = -100.0;
  
  // 点Aの座標
  float A_x, A_y;
  A_x = 100.0;
  A_y =  
  
  // 接する円の半径
  float r;
  r = 150.0;
  
  // 1つ目の接する円の中心座標
  float O1_x, O1_y; 
  O1_x =
  O1_y = 
  
  // 2つ目の接する円の中心座標
  float O2_x, O2_y; 
  O2_x = 
  O2_y = 
  
  // 接線lを描く
  line( -width/3.0, m * (-width/3.0) + n, width*2.0/3.0, m * (width*2.0/3.0) + n );
  // 点Aを描く
  strokeWeight(5.0);
  point(A_x, A_y);
  // 1つ目の接する円
  stroke(255,0,0);
  strokeWeight(1.0);
  circle(O1_x, O1_y, 2.0*r);
  // 1つ目の接する円の中心を描く
  strokeWeight(5.0);
  point(O1_x, O1_y);
  // 2つ目の接する円
  stroke(0,0,255);
  strokeWeight(1.0);
  circle(O2_x, O2_y, 2.0*r);
  // 2つ目の接する円の中心を描く
  strokeWeight(5.0);
  point(O2_x, O2_y);

}

ソースコード1 直線$${l}$$上の点$${\mathrm{A}}$$で接する2つの半径$${r}$$の円$${\mathrm{O}_1, \mathrm{O}_2}$$を描くプログラム(未完成)

ソースコード1の

A_y =

の部分と、

  // 1つ目の接する円の中心座標
  float O1_x, O1_y; 
  O1_x =
  O1_y = 
  
  // 2つ目の接する円の中心座標
  float O2_x, O2_y; 
  O2_x = 
  O2_y = 

の部分に、上記の手順②,③で求めた$${\mathrm{A}}$$の$${y}$$座標や2つの円の中心座標を表す式を利用してプログラムを完成させてください。

それでは、よろしくお願いします。

MK's papa

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