sinとはなにか

はじめに

先日、かの有名なバーチャルのじゃロリ狐娘youtuberおじさん(ねこますさん)が、このようなツイートをしていた。

バーチャルYouTuberについて無限に詳しい読者諸氏であれば当然ご存知あるだろうが、ねこますさんは、元々アルバイトの傍らでモデリングなどを一人でこなし、自身がバズった直後にVRChatの宣伝動画を投稿し、その後も精力的にVRの普及活動に貢献し続けている、1億人に1人いるかいないかのスーパーつよつよHumanだ。

そんなねこますさんが上記のようなツイートをしたということは、僕としては大変な驚きを伴う出来事だった。
なぜなら \sinは、一度理解すれば絶対に忘れないくらい、めちゃめちゃシンプルでわかりやすいものだからだ。


もくじ

関数とは何か

 \sinは、数学における関数の一つだ。 \sinの話をする前に、まずは関数の話をしよう。

(もしあなたがプログラミングの経験を持っていて、関数という言葉にピンときてしまったとしたら、申し訳ないが一度頭を空にしていただきたい。その理解は半分正しくて半分間違っている。数学の関数は副作用も状態も持たない。)


数学における関数(以降、単に関数)は、物を入れると物が出てくる箱だ。

f:id:kriver2135:20180807172127p:plain

物は基本的に値でなければならない。例えば、1を入れると5が出てきて、2を入れると10が出てくるといった感じだ。
入れるものは何でもいいというわけではなく、入れてもいい値が関数によって決まっている。

例えば、関数 f(x) = 2x + 1は、どんな数字でも入れることができて、1を入れると3が、2を入れると5が出てくる。

f:id:kriver2135:20180807172233p:plain


新しい箱を作ったときに、その箱について「1を入れると3が、2を入れると5が出てくる箱です」と記述してもいい。
だが、入れられる値が無数にある場合、「1を入れると3が出て、2を入れると5が出て、3を入れると7が出て…」と書いていては、いつまでたっても箱の全体像を記述することができない。

そこで、 f(x) = 2x + 1という表記を使う。
これは、「この箱に値 xが入ると、値 2x+1が出てきます」ということを表している。
 2x+1を計算するのは簡単なので、これでこの箱の全ての入出力について書き尽くすことができた。

f:id:kriver2135:20180807172429p:plain

絵では xという値がそのまま箱に入っているように見えるが、実際のところこの xはなにかの値であって、 xという文字ではない(この辺りは踏み込みすぎるとよくないマサカリが飛んでくるので、あまり触れない)。
どんな値が入ってくるかまだわからないから、とりあえず xと書いておいただけだ。


だから、関数とは本質的には「値が入って値が出る箱」なのであって、その表記がどうなっているかは大した問題ではない。
どういう値が入る可能性があって、それぞれの値が入った時にどういう値が出てくるかがわかれば、それで十分なのである。

直角三角形の底辺と角度が決まれば、長さの比は一意に決まる

さて、いよいよ \sinの話に入ろう。
もしよければ、手元に紙とペンを用意してから続きを読んでほしい。もちろん、iPadでも構わない。


1. まず、原点(これはただの点だが、名前が付いていたほうが呼びやすいので、原点と呼ぶことにする)と、その点から横に長い線を引く。
この線の右上にはいろいろ書き加えていくつもりだから、線や点はできるだけ紙の左下の方に書いてほしい。

f:id:kriver2135:20180807175719p:plain

2. 次に、90度未満の好きな角度を決めて、原点を中心にその角度だけ反時計回りに回転させた線を引く。(適当で構わない。)

f:id:kriver2135:20180807175812p:plain

3. 最後に、この2つの線と原点を含むような、適当な直角三角形を書く。本当に適当で構わないが、直角三角形になるようにうまく書いてほしい。(最初に引いた線と垂直な線を引くのが楽だと思う。)

f:id:kriver2135:20180807175825p:plain

さて、いま、あなたが書いた直角三角形の直角になっているところを A、原点を Oとし、たぶん Oから右上かつ Aから真上にあるであろう、三角形の最後の頂点を Bとしよう。(名前を付けただけなのでビビらないでほしい。呼びづらくなければ別に Aでも \mathbb{R}でもポチでも構わない。)

f:id:kriver2135:20180807175834p:plain

このとき、線分 ABの長さを、線分 OBの長さで割った値は、実は角度に依らず一定になる。
ステップ2. をやり直さなければ、ステップ3. でどう直角三角形を作っても、「線分 ABの長さを、線分 OBの長さで割った値」は同じ値になるということだ。


実際にやってみよう。まずは、この例。

f:id:kriver2135:20180807175834p:plain

線分 ABの長さは143ピクセル、線分 OBの長さは287ピクセルであった。
ゆえに、「線分 ABの長さを、線分 OBの長さで割った値」はおよそ0.5になる。

次に、同じ角度で、異なる直角三角形を書く。

f:id:kriver2135:20180807180157p:plain

線分 ABの長さは312ピクセル、線分 OBの長さは628ピクセルであった。
ゆえに、「線分 ABの長さを、線分 OBの長さで割った値」はおよそ0.5になる。


なぜこのようになるかは、三角形の相似(中学生で習う内容だったと思う)を用いて示すことができる。
何にせよ、このように構成すれば、線分の長さの比が等しくなるというわけだ。


この比はしかし、角度を変えると変わってしまう。
実例をやってみよう。

f:id:kriver2135:20180807180742p:plain

今度はさっきより小さめの角度を取ってみた。
ここに、直角三角形を作る。

f:id:kriver2135:20180807180802p:plain

長さを測ったところ、線分 ABの長さは68ピクセル、線分 OBの長さは243ピクセルであった。
ゆえに、「線分 ABの長さを、線分 OBの長さで割った値」はおよそ0.28となり、先ほどとは大きく異なっている。

再び、同じ角度で別の直角三角形を作ってみる。

f:id:kriver2135:20180807180932p:plain

線分 ABの長さは149ピクセル、線分 OBの長さは537ピクセルであった。
ゆえに、「線分 ABの長さを、線分 OBで割った長さ」はおよそ0.28になる。


というわけで、どうやらこの比は、「角度を変えれば違う値になるが、角度が同じでさえあれば常に同じ」ような値であるようだ。
つまりこの比は、「角度を与えれば値が決まる」値である。

これは入れる値を角度、出てくる値をこの比だと思えば、先述した関数の話と全く同じである(流し読みせず、ここをよく考えてみてほしい)。

「角度を入れると、『その角度を用いて上のステップ1. 2. 3. を実行した時の、直角三角形の線分 ABの長さを線分 OBの長さで割った値』が出てくる」関数を考えてもよいということだ。
このような関数は具体的に計算するのは大変かもしれないが、角度を決めれば値は数直線上のどこかに必ず決まり、変化したりはしない。なので、この箱を関数としたっていいはずだ。


実はこれが、高校数学で出てくる \sinの正体なのである。

ややこしすぎるでしょ

この \sin、分かりづらいかも知れないが、実は様々な場面で登場している。
例えば、円の上に点を取って、中心からの距離を計算しよう。

f:id:kriver2135:20180807182010p:plain

この距離を測ったところ、192ピクセルであった。
いま、この点が右方向から40度だけ上に向いていたとしよう。

f:id:kriver2135:20180807182246p:plain

すると、この点が中心から横・縦にいくらずれているかは、 \sinを用いて計算で求めることができるのである。

なぜそうなるかわからなければ、この点から真下に線を引いて、直角三角形を作ればよい。

f:id:kriver2135:20180807182552p:plain

点の名前は何でもよいので、ポチ・タマ・クロとした。
いま、 \sin の定義から、線分(クロ, タマ)の長さを線分(ポチ, タマ)の長さで割った値は、 \sin 40^\circとなる。

 \displaystyle \text{(クロ, タマ)} / \text{(ポチ, タマ)} = \sin 40^\circ

線分(ポチ, タマ)の長さは、先ほど測った192ピクセルであるから、線分(クロ, タマ)の長さは

 \displaystyle \text{(クロ, タマ)} = \text{(ポチ, タマ)} \times \sin 40^\circ = 192 \times \sin 40^\circ

となる。

この値が、実際どのくらいの値なのかは、計算してみないとわからない。しかし、 \sin 40^\circはれっきとした1つの値であって、複数の値を取ったり、状況に応じて値が変わったりするわけではないし、もはや関数でもない。 \sinという箱に 40^\circという値を入れた結果出てきた、ただの値だからである。数直線上に置くことだってできる。


この例が使いやすいのは、ゲームを作るときである。
ゲーム内では、すべての等速直線運動するオブジェクトは速さと方向を持っていて、ある速さである方向に進んでいく。しかしながら、ゲーム内で位置を管理するのはx座標やy座標と呼ばれるものであって、好きな方向に好き勝手に進もうと思ったら、その進み方が1フレームにx座標をいくつ、y座標をいくつ動かすかを計算しなくてはならない。

これは、まさにいまの円の話と全く同じだ。

f:id:kriver2135:20180807183747p:plain



関数 \sinには、他にも面白い性質がたくさんある。
高校数学で初登場した段階では、あまり面白い使い道は見つからないかもしれないが、実は様々な数学的・工学的応用があって(実際は \sin xというより e^{ix}に価値があるのだが、それは知らなくても十分生きていける)、そういうわけで \sinはよく用いられるし話題にのぼるのである。

まとめ

 \sinは関数であり、角度を入れると高さと斜辺の比が出てくる箱である。

 \sinが多くの人の頭を悩ませるのは、それまでの 2x^2 + 1のような関数と違って実際の値が具体的に求まるわけではない、という点が一番の原因であるように思う。
実際そこは分かりづらい話ではあるのだが、 \sin xに具体的な角度を入れた結果は、(実際どういう値なのかはよく分からないにせよ)ある一つの値であって、 1 \frac{2}{3} \sqrt{2}と同じように扱ってもらって構わない。

あと、三角関数は公式や覚えるべき定数が多く、その点も分かりづらさを助長しているように思う。
これについても深く考える必要はない。 \sin 30^\circ = \frac{1}{2}などの定数については、つまり「1を入れると3が出てくる」のように一部のわかりやすい入出力を覚えているだけなので、忘れたらググればいいんだし、円を書けばなんとなくの値はわかる(直角を3等分して直角三角形を書けばよい)。
公式については、加法定理だけ覚えておけば、残りの全ての公式は導出できる。というかこの公式を覚えなきゃいけないのは学術を生業にする人と学生くらいで、この記事を読んでいるほとんどの人は公式なんてググればよく、公式があることだけ知っていればよい。


そういうわけで、 \sinのエッセンス、関数のエッセンスを記事にしてみた。
この記事がみなさんの理解の一助になれば幸いである。