ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ございません。

このブログでは広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLaTeXのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

角度とそれを測る単位系(度数法や弧度法等)を理解する

角度

平面上の角度は時計の針のようにモデル化することができる。つまり、1つの回転軸を共有する2本の半直線の回転量の差として表せる。

このウェブブラウザはHTML5 CanvasかJavaScriptに対応していません。
このウェブブラウザはHTML5 CanvasかJavaScriptに対応していません。

半直線は矢印の方向に無限に伸びる光線のようなイメージ。この2本の半直線は角度のアームと呼ばれることがある。

2本のアームの回転軸は頂点と呼ばれている。頂点はOやPやQなどの文字で表されることが多い。

角度それ自身はθスモールシータφスモールファイもしくはαスモールアルファβスモールベータといったギリシア文字で表されることが多い。スモールシータは数学でよく用いられており、スモールファイは工学でよく用いられる。

ちなみに、3次元の極座標系の1つである球面座標系では極角(緯度)がスモールシータで、方位角(経度)がスモールファイで表されていることが多い。

角度を記号によって表すには角を表すABCの前にmeasureのmを添えてmABCと記すことができる。

このウェブブラウザはHTML5 CanvasかJavaScriptに対応していません。

角度が度数法で0°から90°の範囲にあるとき、その角度は鋭角えいかくと呼ばれている。角度が度数法で90°から180°の範囲にあるとき、その角度は鈍角どんかくと呼ばれている。

下の図では青が鋭角、赤が鈍角。下の図では青い角と赤い角は互いに補角ほかくの関係にもある。

このウェブブラウザはHTML5 CanvasかJavaScriptに対応していません。

2つの角度の合計が180°のとき、それらの角度は互いに補角の関係にある。英語ではsupplementary anglesと呼ばれている。2つの角度の合計が90°であるとき、それらの角度は互いに余角よかくの関係にある。英語ではcomplementary anglesと呼ばれている。したがって上の図が補角(a supplementary angle)で下の図が余角(a complementary angle)の関係を表している。

このウェブブラウザはHTML5 CanvasかJavaScriptに対応していません。

頂点を共有して対称関係にある反対側の角は対頂角たいちょうかくと呼ばれている。対頂角の角度は等しい。

このウェブブラウザはHTML5 CanvasかJavaScriptに対応していません。 α=β θ=φ

また、頂点を共有する隣同士の角は線形ペアと呼ばれることがある。上の図で言えば次のペアが線形ペア。

(α,θ) (α,φ) (β,θ) (β,φ)

2本のアーム(半直線)が水平または垂直に連なり、角度が180°であるとき、その角度は特に平角へいかくと呼ばれている。

このウェブブラウザはHTML5 CanvasかJavaScriptに対応していません。

角度のアームが右に水平、言い換えると時計で言うところの3時(15時)の時点にあるとき、それを標準位置と呼ぶことがある。

このウェブブラウザはHTML5 CanvasかJavaScriptに対応していません。

その標準位置が角度のちょうど0に当たる。

平面の角度を計測するための物差しにはいくつかある。ここでは度数法と弧度法と回転法とに言及する。

度数法

一般に馴染みのある度数法では14回転で90°、12回転で180°、34回転で270°、1回転すると360°になり、0°に戻ってくる。

水平の角度を時計のように幾何学的なモデルにすると次のように描くことができるかもしれない。目盛りは度数法に従っている。0°は時計の3時(15時)を指す標準位置に定めてある。

このブラウザではHTML5 Canvasが動作しません。

度数法は古代の天文学に基づいているという説がある。360度は地球の公転周期のおよそ365日に近い。Wikipediaによれば、古代のバビロニア暦やペルシア暦では1年を360日と見なしていたらしい。

ちなみに、地球の公転周期はより正しくは365.242199日。

10進法が人の両手の指の標準的な数の合計に由来するように、度数法は地球の公転周期に由来する。

同じくWikipediaによれば、古代バビロニア人は数のシステムとして60進法を用いていた。更に正三角形で円を分割し、正三角形の内角を60進法で分割することで60分の1を角度1(すなわち1°)と見なしていたとする説もあるらしい。

つまり、1角を60とする正三角形を6つ組み合わせると角度は1周し、60×6=360になる。

このブラウザではHTML5 Canvasが動作しません。

正三角形と60進法の考え方を使うと、正三角形の内角を1°と見なし、それが3つで半回転することになり、それを3°と見なせたし、それが6つで1回転して6°と見なすことができたかもしれない。そうすると次に挙げる弧度法に近い角度の値になっていた。

この考え方に基づくと、1周を6等分し、その1角を60進法に従って60等分し、その60分の1を更に60等分する。それが度数法であると見なすことができる。

しかし実際の度数法は1回転で360°なので、正凸360角形であると考えることができるかもしれない。

正凸360角形をコンピューター・グラーフィクスによって描いてみた。それが次の図形。ディスプレイの解像度によるだろうけれども、この図形の大きさだと人の視覚では円とほとんど等しく見える。

このブラウザではHTML5 Canvasが動作しません。

※3から360までの整数値をフォームに入力して描画ボタンを押すと正凸n角形が作図される。この値が50以下でないと放射状に描いた線分なしには多角形であると判別し難い。

360分の1である1°よりも更に小さい値は、度数法では60進法に基づいて60分の1に分割され、ふんと呼ばれている。そしてそのまた更に小さい単位も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と定めるのが弧度法の考え方。

このブラウザではHTML5 Canvasが動作しません。 (r=a)θ=1c

弧度法での角度の値は、単に数値だけが記されることが多いが、意味を明確にするために数値の後にradを添えたり数値の右肩にcを付けて記されることも少なくない。

したがって1ラジアンは、単に1、もしくは1 rad、または1cのように書かれるかもしれない。

弧度法ではこのように線分の長さの測定と角度の測定とを結び付けている。

ちなみに、中心角の角度θと円弧の長さsと半径の長さrとの間には次の代数式に示す関係がある。

θ=sr s=rθ r=sθ

ただしこの式での角度θはラジアン。角度θが度数法のときにはその値にπ180を掛けてラジアンに直す必要がある。

弧度法は自然な測定単位であり、度数法は恣意的であると言われることが多いが、正三角形の内角60°を利用した度数法の考え方では、半周の180°は内角が60°となる正三角形が3つ分なので60°を1と定めると円周率である3.1415926535897...に近くなる。1周の360°は正三角形が6つ分であるので円周率の2倍である6.283185307179586...とそれほど大きく隔たっていない。

1 rad刻みの弧度法と60°刻みの度数法とを重ねて作図してみた。度数法が青い矢印、弧度法が赤い矢印。

このブラウザではHTML5 Canvasが動作しません。

このように見てみると、60°は弧度法の1 rad = 57.29577951308232...に近いので、正三角形に基づいた度数法の考え方は惜しいところまで来ていた。

もっとも角度の場合、半径が大きくなるほど誤差によって生ずる距離が拡がってゆくので、たとえ僅かな誤差であっても無視できなくなる。

ラジアンは円の半径の長さrに対する円弧の長さaの比率(割合)であると言うこともできる。この観点は三角比と似ている。この比率を中心角の大きさとして定めるのが弧度法であるというわけだ。

θ=ar

例えば円の半径の長さrが1の場合、次のような式になるから円弧の長さaがそのまま角度の値になる。

θ=a1=a

このため、半径1の円を用いた幾何学的モデルを考えると便利。半径が1の円は単位円たんいえんと呼ばれている。

このブラウザではHTML5 Canvasが動作しません。

単位円という名称は単位元を連想させる。

弧度法では円の半径rに対する円周の長さcの比率(割合)が円周率πの2倍と等しくなる。

2= 2π=cr

円周率(π)とは円の直径と比べた円周の比率(割合)のこと。

==2 π=cd=c2r

弧度法では、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倍になる。

このブラウザではHTML5 Canvasが動作しません。

1 radの更に1000分の1はミリラジアンないしミルと呼ばれている。その単位の記号はmradまたはmil。1 mradは小数点が左に3桁移動するので0.001 radに当たる。

ターン法(回転法)

ターンとは英語の綴りではturnであり、日本語では一回りや一周のことを意味する。ターン法は英語でrotationと呼ばれていることもあり、回転を意味する。したがってこれを回転法と呼ぶことができるかもしれない。

ターン法(回転法)の単位記号はギリシャ文字の小文字のτタウによって記されている。ただしτではなくrやtrやrotが用いられていることもある。

ターン法では角度が1回転(1周)すると1τターンとなる。

このブラウザではHTML5 Canvasが動作しません。

グラジアン法

角度を表す単位系としてこの他にも例えばグラジアン法(Gradians)がある。その単位記号はgonによって記されている。グラジアン法では直角を100分の1に分割する100進法を用いている。よってグラジアン法での1周は400 gonとなる。

このブラウザではHTML5 Canvasが動作しません。

1 gonを更に細分化したdgonは0.1 gonを意味しており、更に細分化したcgonは0.01 gonを意味しており、mgonは0.001 gonを意味している。

度数法による値dとグラジアン法による値gとを相互変換するには次のような計算をする。

g=10090d=d×100÷90 d=90100g=g×90÷100

英語では、度数法がsexagesimal systemまたはsexagesimal measure、弧度法がcircular systemまたはcircular measure、グラジアン法がcentesimal systemまたはcentesimal measureとも呼ばれていることがある。

sexagesimalは「60進法の」、circularは「円形の」、centesimalは「100進法の」という意味。measureは「尺度」「計量法」を意味しており、数学用語では「測度」を意味している。

度数法は英国式とも呼ばれており、グラジアン法はフランス式とも呼ばれている。

角度が1周するといくつになるか、度数法と弧度法とターン法とグラジアン法とを比較してみた。

1周(1回転)の角度
測定法 数値
度数法 360°
弧度法 2π = 6.283185...
ターン法 1 τ
グラジアン法 400 gon

度数法に対する各種角度単位系の関係表

度とその他の単位との関係表を作ってみた。ただし15°毎。分数は便宜上約分していない。πは円周率。は乗算記号。

° rad τ gon
0 0 0 0
15 15180π 15360 1590100
30 30180π 30360 3090100
45 45180π 45360 4590100
60 60180π 60360 6090100
75 75180π 75360 7590100
90 90180π 90360 9090100
105 105180π 105360 10590100
120 120180π 120360 12090100
135 135180π 135360 13590100
150 150180π 150360 15090100
165 165180π 165360 16590100
180 180180π 180360 18090100
195 195180π 195360 19590100
210 210180π 210360 21090100
225 225180π 225360 22590100
240 240180π 240360 24090100
255 255180π 255360 25590100
270 270180π 270360 27090100
285 285180π 285360 28590100
300 300180π 300360 30090100
315 315180π 315360 31590100
330 330180π 330360 33090100
345 345180π 345360 34590100
360 360180π 360360 36090100

度数法と弧度法との相互変換

度数法での角度の値dと弧度法での角度の値rとの関係は次の式で表すことができる。このrは半径のことではなくラジアンのこと。

d=180πr=r×180÷π r=π180d=d×π÷180

ラジアン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とすると、それらは次のような計算によって相互変換できる。

t=1360d=d360=d÷360 d=3601t=t×360

要するに、度をターンに変換するには度の値を360で割り、ターンを度に変換するにはターンの値を360倍する。

弧度法とターン法との相互変換

弧度法の値rとターン法の値tとの相互変換は次のように計算できそう。

r=2πt=t×2×π t=r2π=r÷(2×π)

ターンからラジアンを求めるにはターンを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でしか割り切れない場合にはその分数は既約分数と呼ばれる。例えば232÷13÷1のように1でしか割り切れないので既約分数。例えば24のような分数は2÷24÷2のように2で割り切れるので既約分数ではない。

既約分数でない分数を既約分数にすることを約分すると言う。英語では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は依存関係を解決してくれるもの。

コメント

このブログの人気の投稿

LATEXで数式:指数と順列などで使う添数・添字

10の補数と9の補数と2の補数と1の補数

LibreOffice 6 Calcでフォーム(ダイアログ)を作成してマクロで表示