角度とそれを測る単位系(度数法や弧度法等)を理解する
角度
平面上の角度は時計の針のようにモデル化することができる。つまり、1つの回転軸を共有する2本の半直線の回転量の差として表せる。
半直線は矢印の方向に無限に伸びる光線のようなイメージ。この2本の半直線は角度のアームと呼ばれることがある。
2本のアームの回転軸は頂点と呼ばれている。頂点はOやPやQなどの文字で表されることが多い。
角度それ自身は
ちなみに、3次元の極座標系の1つである球面座標系では極角(緯度)がスモールシータで、方位角(経度)がスモールファイで表されていることが多い。
角度を記号によって表すには角を表す
角度が度数法で0°から90°の範囲にあるとき、その角度は
下の図では青が鋭角、赤が鈍角。下の図では青い角と赤い角は互いに
2つの角度の合計が180°のとき、それらの角度は互いに補角の関係にある。英語ではsupplementary anglesと呼ばれている。2つの角度の合計が90°であるとき、それらの角度は互いに
頂点を共有して対称関係にある反対側の角は
また、頂点を共有する隣同士の角は線形ペアと呼ばれることがある。上の図で言えば次のペアが線形ペア。
2本のアーム(半直線)が水平または垂直に連なり、角度が180°であるとき、その角度は特に
角度のアームが右に水平、言い換えると時計で言うところの3時(15時)の時点にあるとき、それを標準位置と呼ぶことがある。
その標準位置が角度のちょうど0に当たる。
平面の角度を計測するための物差しにはいくつかある。ここでは度数法と弧度法と回転法とに言及する。
度数法
一般に馴染みのある度数法では
水平の角度を時計のように幾何学的なモデルにすると次のように描くことができるかもしれない。目盛りは度数法に従っている。0°は時計の3時(15時)を指す標準位置に定めてある。
度数法は古代の天文学に基づいているという説がある。360度は地球の公転周期のおよそ365日に近い。Wikipediaによれば、古代のバビロニア暦やペルシア暦では1年を360日と見なしていたらしい。
ちなみに、地球の公転周期はより正しくは365.242199日。
10進法が人の両手の指の標準的な数の合計に由来するように、度数法は地球の公転周期に由来する。
同じくWikipediaによれば、古代バビロニア人は数のシステムとして60進法を用いていた。更に正三角形で円を分割し、正三角形の内角を60進法で分割することで60分の1を角度1(すなわち1°)と見なしていたとする説もあるらしい。
つまり、1角を60とする正三角形を6つ組み合わせると角度は1周し、
正三角形と60進法の考え方を使うと、正三角形の内角を1°と見なし、それが3つで半回転することになり、それを3°と見なせたし、それが6つで1回転して6°と見なすことができたかもしれない。そうすると次に挙げる弧度法に近い角度の値になっていた。
この考え方に基づくと、1周を6等分し、その1角を60進法に従って60等分し、その60分の1を更に60等分する。それが度数法であると見なすことができる。
しかし実際の度数法は1回転で360°なので、正凸360角形であると考えることができるかもしれない。
正凸360角形をコンピューター・グラーフィクスによって描いてみた。それが次の図形。ディスプレイの解像度によるだろうけれども、この図形の大きさだと人の視覚では円とほとんど等しく見える。
※3から360までの整数値をフォームに入力して描画ボタンを押すと正凸n角形が作図される。この値が50以下でないと放射状に描いた線分なしには多角形であると判別し難い。
360分の1である1°よりも更に小さい値は、度数法では60進法に基づいて60分の1に分割され、
1°(1度)は60′(60分)、1°の半分は30′(30分)というようにプライム記号を付けて記されており、1′(1分)は60″(60秒)、1′の半分は30″(30秒)というようにダブル・プライム記号を付けて記されている。HTMLではこれらは特殊文字なので、プライム記号は′と記し、ダブル・プライム記号は″と記す必要がある。
1.5°は1°30′(1度30分)と等しく、3.75°は3°30′15″(3度30分15秒)と等しい。
度数法は時間の測定と似ている。時間における1周が12時間60分60秒であるのに対して角度の度数法では360度60分60秒となる。
しかし角度に60進法の分や秒を用いるのはややこしくて不便であり、時間と違って現在では廃れた用法であるように思う。
弧度法(ラジアン法)
弧度法は微分積分学で重宝されている角度の測り方。
円の半径の長さrと円弧の長さaが等しいとき、その中心角の角度θを1と定めるのが弧度法の考え方。
弧度法での角度の値は、単に数値だけが記されることが多いが、意味を明確にするために数値の後にradを添えたり数値の右肩に
したがって1ラジアンは、単に1、もしくは1 rad、または
弧度法ではこのように線分の長さの測定と角度の測定とを結び付けている。
ちなみに、中心角の角度θと円弧の長さsと半径の長さrとの間には次の代数式に示す関係がある。
ただしこの式での角度θはラジアン。角度θが度数法のときにはその値に
弧度法は自然な測定単位であり、度数法は恣意的であると言われることが多いが、正三角形の内角60°を利用した度数法の考え方では、半周の180°は内角が60°となる正三角形が3つ分なので60°を1と定めると円周率である3.1415926535897...に近くなる。1周の360°は正三角形が6つ分であるので円周率の2倍である6.283185307179586...とそれほど大きく隔たっていない。
1 rad刻みの弧度法と60°刻みの度数法とを重ねて作図してみた。度数法が青い矢印、弧度法が赤い矢印。
このように見てみると、60°は弧度法の1 rad = 57.29577951308232...に近いので、正三角形に基づいた度数法の考え方は惜しいところまで来ていた。
もっとも角度の場合、半径が大きくなるほど誤差によって生ずる距離が拡がってゆくので、たとえ僅かな誤差であっても無視できなくなる。
ラジアンは円の半径の長さrに対する円弧の長さaの比率(割合)であると言うこともできる。この観点は三角比と似ている。この比率を中心角の大きさとして定めるのが弧度法であるというわけだ。
例えば円の半径の長さrが1の場合、次のような式になるから円弧の長さaがそのまま角度の値になる。
このため、半径1の円を用いた幾何学的モデルを考えると便利。半径が1の円は
単位円という名称は単位元を連想させる。
弧度法では円の半径rに対する円周の長さcの比率(割合)が円周率πの2倍と等しくなる。
円周率(π)とは円の直径と比べた円周の比率(割合)のこと。
弧度法では、30°は円周率πの6分の1、45°は円周率πの4分の1、60°は円周率πの3分の1、90°は円周率πの2分の1、120°は円周率πの3分の2、135°は円周率πの4分の3、150°は円周率πの6分の5、180°は円周率πと一致し、210°は円周率πの6分の7、225°は円周率πの4分の5、240°は円周率πの3分の4、270°は円周率πの2分の3、300°は円周率πの3分の5、315°は円周率πの4分の7、330°は円周率πの6分の11、360°は円周率πのちょうど2倍になる。
1 radの更に1000分の1はミリラジアンないしミルと呼ばれている。その単位の記号はmradまたはmil。1 mradは小数点が左に3桁移動するので0.001 radに当たる。
ターン法(回転法)
ターンとは英語の綴りではturnであり、日本語では一回りや一周のことを意味する。ターン法は英語でrotationと呼ばれていることもあり、回転を意味する。したがってこれを回転法と呼ぶことができるかもしれない。
ターン法(回転法)の単位記号はギリシャ文字の小文字の
ターン法では角度が1回転(1周)すると1
グラジアン法
角度を表す単位系としてこの他にも例えばグラジアン法(Gradians)がある。その単位記号はgonによって記されている。グラジアン法では直角を100分の1に分割する100進法を用いている。よってグラジアン法での1周は400 gonとなる。
1 gonを更に細分化したdgonは0.1 gonを意味しており、更に細分化したcgonは0.01 gonを意味しており、mgonは0.001 gonを意味している。
度数法による値dとグラジアン法による値gとを相互変換するには次のような計算をする。
英語では、度数法がsexagesimal systemまたはsexagesimal measure、弧度法がcircular systemまたはcircular measure、グラジアン法がcentesimal systemまたはcentesimal measureとも呼ばれていることがある。
sexagesimalは「60進法の」、circularは「円形の」、centesimalは「100進法の」という意味。measureは「尺度」「計量法」を意味しており、数学用語では「測度」を意味している。
度数法は英国式とも呼ばれており、グラジアン法はフランス式とも呼ばれている。
角度が1周するといくつになるか、度数法と弧度法とターン法とグラジアン法とを比較してみた。
測定法 | 数値 |
---|---|
度数法 | 360° |
弧度法 | 2π = 6.283185... |
ターン法 | 1 τ |
グラジアン法 | 400 gon |
度数法に対する各種角度単位系の関係表
度とその他の単位との関係表を作ってみた。ただし15°毎。分数は便宜上約分していない。πは円周率。
° | rad | τ | gon |
---|---|---|---|
0 | 0 | 0 | 0 |
15 | |||
30 | |||
45 | |||
60 | |||
75 | |||
90 | |||
105 | |||
120 | |||
135 | |||
150 | |||
165 | |||
180 | |||
195 | |||
210 | |||
225 | |||
240 | |||
255 | |||
270 | |||
285 | |||
300 | |||
315 | |||
330 | |||
345 | |||
360 |
度数法と弧度法との相互変換
度数法での角度の値dと弧度法での角度の値rとの関係は次の式で表すことができる。このrは半径のことではなくラジアンのこと。
ラジアンrに180を掛けて円周率πで割ると度dが求まり、度dに円周率πを掛けて180で割るとラジアンrが求まる。この計算には円周率が絡むので計算機や計算機言語などを利用すると便利。
例えば度数法での60°が弧度法では何radになるかをMaximaを使って計算してみた。その逆も。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net using Lisp GNU Common Lisp (GCL) GCL 2.6.12 Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. The function bug_report() provides bug reporting information. (%i1) 60*%pi/180; %pi (%o1) --- 3 (%i2) float(%o1); (%o2) 1.047197551196597 (%i3) %o2*180/%pi; 188.4955592153875 (%o3) ----------------- %pi (%i4) float(%o3); (%o4) 60.0 (%i5) quit();
このとおり、60°はおよそ1.047197551196597 radだった。逆演算をしてみると60.0°に戻った。
60°は1 radよりも僅かに大きい。
Rでも同様に計算してみた。<-はR言語での代入演算子。左へ代入するなら=も代入演算子として使えることはあまり知られていない。
$ R R version 3.5.2 (2018-12-20) -- "Eggshell Igloo" Copyright (C) 2018 The R Foundation for Statistical Computing (中略) > radian <- 60*pi/180 > radian [1] 1.047198 > degree <- radian*180/pi > degree [1] 60 > q(); Save workspace image? [y/n/c]: n
Rでも同じ結果が得られた。
1 radは何°だろうか。Maximaで計算してみた。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net (中略) (%i1) float(1*180/%pi); (%o1) 57.29577951308232 (%i2) float(%o1*%pi/180); (%o2) 1.0 (%i3) quit();
1 radはおよそ57.29577951308232°だった。60°よりも僅かに小さい。
1°は何radだろうか。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net (中略) (%i1) float(1*%pi/180); (%o1) 0.01745329251994329 (%i2) float(%o1*180/%pi); (%o2) 1.0 (%i3) quit();
1°はおよそ0.01745329251994329 radだった。
度数法とターン法との相互変換
度数法による値をdとし、ターン法による値をtとすると、それらは次のような計算によって相互変換できる。
要するに、度をターンに変換するには度の値を360で割り、ターンを度に変換するにはターンの値を360倍する。
弧度法とターン法との相互変換
弧度法の値rとターン法の値tとの相互変換は次のように計算できそう。
ターンからラジアンを求めるにはターンを2π倍する。ラジアンからターンを求めるにはラジアンを2πで割る。2πはπの2倍のこと。
各種計算機言語での度数法・弧度法変換
Juliaでの度数法と弧度法の相互変換はdeg2rad()とrad2deg()という2つの組み込みメソッドを利用することで可能。deg2rad()は度からラジアンへの変換を行ってくれ、rad2deg()はラジアンから度への変換を行ってくれる。
$ julia (中略) julia> deg2rad(1) 0.017453292519943295 julia> rad2deg(1) 57.29577951308232 julia> exit()
Python3ではmathをimportしてmath.radians()とmath.degrees()を利用できる。
$ python3 Python 3.7.3 (中略) >>> import math >>> math.radians(180) 3.141592653589793 >>> math.degrees(math.pi) 180.0
Numpyをimportすればnumpy.deg2rad()とnumpy.rad2deg()を利用できる。
>>> import numpy as np >>> np.deg2rad(360) 6.283185307179586 >>> np.rad2deg(2*math.pi) 360.0 >>> exit()
R言語ではNISTunitsというパッケージを利用できる。NISTunitsをインストールし、ライブラリーとして読み込んでNISTdegTOradian()とNISTradianTOdeg()を呼び出す。
$ R R version 3.5.2 (2018-12-20) -- "Eggshell Igloo" (中略) > install.packages("NISTunits",dependencies=T) (中略) > library(NISTunits) > NISTdegTOradian(1) [1] 0.01745329 > NISTradianTOdeg(1) [1] 57.29579
Rではunitsというパッケージを利用することもできる。
unitsをインストールし、ライブラリーとして読み込む。そしてas_units()の第1引数に数値、第2引数に単位を付加することによりその数値に単位を付けてそれを変数に代入し、今度はset_units()の第1引数にその変数を指定して第2引数に変換したい単位を指定してやると変換後の値が返ってくる。
> install.packages('units') (中略) > library(units) udunits database from /usr/share/xml/udunits/udunits2.xml > deg <- as_units(1,"degrees") > rad <- set_units(deg,"radians") > rad 0.01745329 [rad] > rad <- as_units(1,"radians") > deg <- set_units(rad,"degrees") > deg 57.29578 [°] > q() Save workspace image? [y/n/c]: n
unitsのインストールでコンフィギュレーションに失敗することがある。そのときはエラー・メッセージに指示されているとおりにする。例えばUbuntuやDebianではlibudunits2-devというdebパッケージをインストールする必要があるかもしれない。
GNU Octaveではdeg2rad()とrad2deg()を利用できる。
$ octave GNU Octave, version 4.4.1 Copyright (C) 2018 John W. Eaton and others (中略) octave:1> deg2rad([1,90,180,360]) ans = 0.017453 1.570796 3.141593 6.283185 octave:2> rad2deg([1,pi,2*pi]) ans = 57.296 180.000 360.000 octave:3> quit
LibreOffice CalcにはDEGREES()という函数とRADIANS()という函数がある。これらを利用するとラジアン単位と度単位を相互に変換することができる。1 radはGEGREES(1) ≒ 57.2957795130823°、1°はRADIANS(1) ≒ 0.0174532925199433 radという結果が得られた。
分数の約分をコンピューターで行う便利な方法についてここでちょっとしたメモ書き。
各種計算機言語での約分
分数の分母と分子を共に同じ整数で割るとき、1でしか割り切れない場合にはその分数は既約分数と呼ばれる。例えば
既約分数でない分数を既約分数にすることを約分すると言う。英語ではReducing fractions to lowest termsと表現されたりする。
約分のアルゴリズムとしては素因数分解が有用。このアルゴリズムとプログラミングについてはまた別の機会に。
ここではいくつかの計算機言語で約分を行う簡単な方法を記しておく。
Python3で分数を約分して既約分数に直すには有理数演算を支援するfractionsモジュールからFractionをインポートし、Fraction(分子,分母)を利用する。有理数とは分数によって表せる数の総称。
$ python3 Python 3.7.3(中略) >>> from fractions import Fraction >>> Fraction(15,180) Fraction(1, 12) >>> quit() $
Maximaでは割り算の形で分数を入力してEnterを押すだけで既約分数を表示してくれる。Maximaでは式の終わりにセミコロンが必要であることに要注意。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net (中略) (%i1) 90/360; 1 (%o1) - 4 (%i2) quit(); $
Juliaで分数(有理数)を扱うには//演算子を用いる。分子//分母を入力してEnterキーを押すと既約分数を自動的に表示してくれる。次の例で使用しているJuliaはバージョン1.0.3。
$ julia (中略) julia> 75//180 5//12 julia> exit() $
RubyではRationalクラスのRational(分子,分母)メソッドを利用して分数(有理数)を表せる。更に、分子/分母rという表記によっても分数を表すことができる。irb上でこれらを入力してEnterキーを押すと既約分数を自動的に表示してくれる。
$ irb irb(main):001:0> Rational(270,180) => (3/2) irb(main):002:0> 315/360r => (7/8) irb(main):003:0> quit $
R言語では例えば音声および音響分析用ツールが収められているphonToolsパッケージをインストールし、それをライブラリーとして読み込んだ上でreduce.fraction()を利用する。
reduce.fraction()の引数には2つの整数の要素を持つベクトルを与える。
$ R R version 3.5.2 (2018-12-20) -- "Eggshell Igloo" Copyright (C) 2018 The R Foundation for Statistical Computing (中略) > install.packages('phonTools',dependencies=T) (中略) > library(phonTools) > reduce.fraction(c(140,203)) [1] 20 29 > reduce.fraction(c(15,360)) [1] 1 24 > q()
install.packages()の第2引数dependencies=Tは依存関係を解決してくれるもの。
コメント
コメントを投稿