![見出し画像](https://assets.st-note.com/production/uploads/images/145898721/rectangle_large_type_2_df3fd5d5406061ed0c73dfdac1091dbc.jpeg?width=1200)
高校数学10分プログラミング(31日目、2024年7月15日)
おはようございます。
今日は、高校数学10分プログラミングの31日目です。
本日の課題は、円周上の点を通る接線を描くプログラムを作成することです。
![](https://assets.st-note.com/img/1719863696577-SpRwcdTcDH.png?width=1200)
課題
図1のような、円$${\mathrm{O}}$$の周上の点$${\mathrm{A}}$$を通る接線$${l}$$を描くプログラムを作成してください。
ヒント
次の手順で考えてみてください。
① 座標軸を図2のように設定します。そして、円$${\mathrm{O}}$$の中心座標を$${(x_O, y_O)}$$、半径を$${r}$$とし、点$${\mathrm{A}}$$の座標を$${(x_A, y_A)}$$とします。
![](https://assets.st-note.com/img/1719864142025-1vlkThqWGR.png?width=1200)
② 点$${\mathrm{A}}$$の$${y}$$座標$${y_A}$$を$${x_O, y_O, r, x_A}$$で表します。これは、円$${\mathrm{O}}$$の方程式を求めて、点$${\mathrm{A}}$$の座標$${(x_A, y_A)}$$を代入することで求まります。なお、$${y_A}$$の候補として2つ出てきますが、今回は大きい方を採用してください。
③ 接線$${l}$$の方程式を$${y=mx+n}$$として、傾き$${m}$$と切片$${n}$$を$${x_O, y_O, r, x_A, y_A}$$で表してください。
プログラム
以下のソースコード1は、円$${\mathrm{O}}$$の周上の点$${\mathrm{A}}$$を通る接線$${l}$$を描くプログラムになります。なお、円$${\mathrm{O}}$$の中心座標$${(x_O,y_O)}$$、半径$${r}$$、点$${\mathrm{A}}$$の$${x}$$座標$${x_A}$$をそれぞれ
$$
x_O=200, \ y_O=100, \ r=150, \\ x_A=100
$$
としています。
ただし、このままでは動きません。
// 円Oの周上の点Aを通る接線l
void setup(){
size(500, 500); // キャンバスの大きさを指定する
translate(width/5.0, height*4.0/5.0); // 座標の中心を移動する
scale(1,-1); // y軸正の向きを下向きから上向きに反転する
background(255,255,255); // 背景を白色にする
noFill(); // 図形の塗りつぶしなし
noLoop(); // 繰り返し処理をしない
// 円Oの中心座標と半径
float O_x, O_y, O_r;
O_x = 200.0;
O_y = 100.0;
O_r = 150.0;
// 点Aの座標
float A_x, A_y;
A_x = 100.0;
A_y =
// 直線lの傾きと切片
float m, n;
m =
n =
// 円Oを描く
circle(O_x, O_y, 2.0*O_r);
// 円の中心を描く
strokeWeight(5.0);
point(O_x, O_y);
// 点Aを描く
stroke(255,0,0);
point(A_x, A_y);
// 接線lを描く
strokeWeight(1.0);
line( -width/5.0, m * (-width/5.0) + n, width*4.0/5.0, m * (width*4.0/5.0) + n );
}
ソースコード1 円$${\mathrm{O}}$$の周上の点$${\mathrm{A}}$$を通る接線$${l}$$を描くプログラム(未完成)
ソースコード1の
A_y =
の部分と、
// 直線lの傾きと切片
float m, n;
m =
n =
の部分に、上記の手順②,③で求めた$${\mathrm{A}}$$の$${y}$$座標や直線$${l}$$の方程式の傾きや切片を利用してプログラムを完成させてください。
それでは、よろしくお願いします。
MK's papa
この記事が気に入ったらサポートをしてみませんか?