高校数学をプログラミングで解く(数学II編)「3-1 一般角と弧度法」
マガジンリスト > 数学Ⅱ編 3.三角関数 > 3-1 一般角と弧度法
はじめに
今回は、数学IIで学ぶ「一般角と弧度法」について、角度を弧度と度数との間で相互変換するプログラムや、扇形の弧の長さと面積を求めて、かつその扇形を描くプログラムを作成します。
一般角と弧度法
まず、一般角と弧度法について解説しておきます。
一般角
$${\mathrm{P}(x,y)}$$、$${\mathrm{OP}=r}$$、動径$${\mathrm{OP}}$$と始線$${\mathrm{O}x}$$のなす角の1つを$${\alpha}$$、動径$${\mathrm{OP}}$$の表す角を$${\theta}$$とします。このとき、
$$
\theta = \alpha + 360^{\circ} \times n
$$
ただし、$${n}$$は整数とします。
弧度法と扇形
① $${ 180^{\circ} = \pi }$$ラジアン
② 一般角 $${ \theta = \alpha + 2 n \pi }$$ただし、$${n}$$は整数
③ 扇形 半径$${r}$$、中心角$${\theta}$$(ラジアン)の扇形について
$$
\mathrm{弧の長さ} l=r \theta, \ \ \mathrm{面積} S=\frac{1}{2} r^2 \theta = \frac{1}{2} rl
$$
弧度と度数との変換
まず、弧度と度数との間での変換を考えていきます。
問題1
次の角を、度数は弧度に、弧度は度数に直せ。
(1) $${30^{\circ}}$$ (2) $${45^{\circ}}$$ (3) $${60^{\circ}}$$ (4) $${90^{\circ}}$$
(5) $${ \frac{3}{2} \pi }$$ (6) $${\frac{3}{4} \pi}$$ (7) $${\frac{2}{15} \pi}$$ (8) $${2 \pi}$$
アルゴリズム設計
弧度と度数との相互変換は簡単です。上記で解説したように、$${ 180^{\circ} = \pi }$$ラジアン ですので、同じ角度を弧度で表したときを$${ \mathrm{rad}}$$ラジアン、度数で表したときを$${\mathrm{deg}}$$ °とすると、度数を弧度に変換する式は、
$$
\mathrm{rad} = \frac{ \pi }{180} \mathrm{deg}
$$
となり、一方、弧度を度数に変換する式は、
$$
\mathrm{deg} = \frac{180}{\pi} \mathrm{rad}
$$
となります。
このように変換自体は簡単なものですが、Processingでは、これらの変換を行うための関数が用意されています。度数を弧度に変換する関数は radians 関数になります。
radians(angle);
angle:角度(°) float型
返り値:角度(ラジアン) float型
この radians 関数については、記事『高校数学をプログラミングで解く(数学I編)「2-1 三角比」』でも紹介しています。
一方で、弧度を度数に変換する関数は degrees 関数になります。
degrees(angle);
angle:角度(ラジアン) float型
返り値:角度(°) float型
今回はこれらの radians 関数や degrees 関数を利用して、問題1を度数から弧度、弧度から度数に変換していきます。
プログラム
では、問題1について、弧度と度数との変換を行うプログラムを作成します。なお、Processingでは、円周率$${\pi}$$が
PI
で準備されているので、以下では、この PI を利用しています。
// 与えられた角度について
// 度数を弧度に、弧度を度数に変換するプログラム
void setup(){
float deg; // 角度(°)
float rad; // 角度(ラジアン)
// (1) 30°
deg = 30.0;
rad = radians(deg);
println("(1)", deg + "°→ ", rad + "(ラジアン)");
// (2) 45°
deg = 45.0;
rad = radians(deg);
println("(2)", deg + "°→ ", rad + "(ラジアン)");
// (3) 60°
deg = 60.0;
rad = radians(deg);
println("(3)", deg + "°→ ", rad + "(ラジアン)");
// (4) 90°
deg = 90.0;
rad = radians(deg);
println("(4)", deg + "°→ ", rad + "(ラジアン)");
// (5) 3/2 π
rad = 3.0/2.0*PI;
deg = degrees(rad);
println("(5)", rad + "(ラジアン) → ", deg + "°");
// (6) 3/4 π
rad = 3.0/4.0*PI;
deg = degrees(rad);
println("(6)", rad + "(ラジアン) → ", deg + "°");
// (7) 2/15 π
rad = 2.0/15.0*PI;
deg = degrees(rad);
println("(7)", rad + "(ラジアン) → ", deg + "°");
// (8) 2 π
rad = 2.0*PI;
deg = degrees(rad);
println("(8)", rad + "(ラジアン) → ", deg + "°");
}
ソースコード1 度数を弧度に、弧度を度数に変換するプログラム
ソースコード1を、Processingの開発環境ウィンドウを開いて(スケッチ名を「transformAngles」としています)、テキストエディタ部分に書いて実行します。
図2のように、コンソールに
(1) 30.0°→ 0.5235988(ラジアン)
(2) 45.0°→ 0.7853982(ラジアン)
(3) 60.0°→ 1.0471976(ラジアン)
(4) 90.0°→ 1.5707964(ラジアン)
(5) 4.712389(ラジアン) → 270.0°
(6) 2.3561945(ラジアン) → 135.0°
(7) 0.41887906(ラジアン) → 24.000002°
(8) 6.2831855(ラジアン) → 360.0°
と出力されます。なお、弧度の値は$${\pi}$$で割るなどしてみると、もう少しわかりやすくなるかもしれませんが、度数と弧度との間の値の感覚みたいなものを見てもらうためにあえてそのままで残してみました。
扇形の弧の長さと面積
次に、扇形の弧の長さと面積を求める問題を考えていきます。同時に、与えられた扇形を描くプログラムも作成してみます。
問題2
次の扇形の弧の長さと面積を求めよ。また、その扇形をキャンバス上に描け。
$$
\mathrm{半径が}5, \ \mathrm{中心角が} \frac{\pi}{3}
$$
アルゴリズム設計
まず、扇形の弧の長さ$${l}$$と面積$${S}$$は、上記で解説した式を利用して計算します。
次に、扇形の描画については、Processingで扇形(の弧)を描くための関数 arc が用意されていますので、この関数を利用します。
arc(a, b, c, d, start, stop, mode)
a:楕円の中心位置のx座標 float型
b:楕円の中心位置のy座標 float型
c:楕円の幅 float型
d:楕円の高さ float型
start:円弧の最初の角度(ラジアン) float型
stop:円弧の終りの角度(ラジアン) float型
mode:OPEN、CHORD、PIE、または設定しない
最後の引数 mode は PIE を選択することで扇形の輪郭を描くことができます。
なお、arc 関数の詳細は、Processingの公式ページ「arc() / Reference / Processing.org」(英語)で説明されています。日本語では、例えば「数学アートの部屋」の「円弧を描く」などがあります。
プログラム
それでは、問題2の扇形の弧の長さと面積を求めて、かつその扇形を描くプログラムを作成します。今回は、座標軸を設定するための関数 setAxes を利用するので、記事『高校数学をプログラミングで解く(数学I編)「1-0-2 グラフを描くための準備(その2)」』で作成したスケッチ「drawFunction」を再利用します。スケッチ「drawFunction」をフォルダごとコピーして、スケッチの名前(フォルダ名)を「drawSector」と変更し、またスケッチ「drawSector」内の「drawFunction.pde」ファイルの名前を「drawSector.pde」に変更します。そして、pdeファイル「drawSector.pde」をダブルクリックしてスケッチ「drawSector」の開発環境ウィンドウを立ち上げます。開発環境ウィンドウのタブ欄で「drawSector」タブを選択し、そのテキストエリアのソースコードを以下で書き換えます。
float x_range = 10.0; // x軸の表示範囲 -x_rangeからx_rangeまで
float y_range = 10.0; // y軸の表示範囲 -y_rangeからy_rangeまで
void setup(){
size(500,500);
noLoop();
setAxes(x_range, y_range); // 座標軸の準備
noFill();
float r = 5.0; // 扇形の半径
float theta = PI/3.0; // 中心角(ラジアン)
// 扇形の弧の長さ
float l = r * theta;
println("扇形の弧の長さ:", l);
// 扇形の面積
float S = r * r * theta / 2.0;
println("扇形の面積:", S);
// 扇形を描画
stroke(0,0,0);
strokeWeight(3);
float R = width / 2.0 / x_range * r; // 半径をキャンバス上の座標サイズに換算
arc(0.0, 0.0, 2.0*R, 2.0*R, 0.0, theta, PIE);
}
ソースコード2 扇形の弧の長さと面積を求めて、かつその扇形を描くプログラム
ソースコード2を、スケッチ「drawSector」の「drawSector」タブのテキストエディタ部分に書いて実行すると、図3のように、開発環境ウィンドウのコンソールに
扇形の弧の長さ: 5.2359877
扇形の面積: 13.08997
と出力されます。
また、図4のように、実行ウィンドウのキャンバス上に問題2の扇形が$${xy}$$平面を基準として描かれます。
まとめ
今回は、数学IIで学ぶ「一般角と弧度法」について、角度を弧度と度数との間で相互変換するプログラムや、扇形の弧の長さと面積を求めてかつその扇形を描くプログラムを作成しました。
角度を度数から弧度へ、弧度から度数へ変換することは比較的簡単にできますが、今回はProcessingで用意されている関数 radians や degrees を利用して変換しました。特に、度数から弧度への変換を行う radians 関数はよく利用しますので、覚えておいてください。
また、扇形を描くために arc 関数を用いました。arc 関数はその名の通り、円弧を描くための関数になりますが、引数 mode を「PIE」に設定することで扇形を描くことができます。このような関数の使い方は、Web検索で調べると多くの情報が得られます。わからないことがあったら、自分で調べる習慣をつけておくことをお勧めします。
参考文献
改訂版 教科書傍用 スタンダード 数学II(数研出版、ISBN9784410209369)
Webサイト「数学アートの教室」(https://www.mathartroom.com/)
この記事が気に入ったらサポートをしてみませんか?