はじめに
先日、かの有名なバーチャルのじゃロリ狐娘youtuberおじさん(ねこますさん)が、このようなツイートをしていた。
高校数学まったく分からないんだけど、sinの意味って辺の長さを表現する決まり事?
— けもみみおーこく公式 (@kemomimi_oukoku) 2018年8月7日
なんか、ピタゴラスの定理教える前にsinの求め方の公式教えられたから、何を意味してんのか全くわからなかった。(公式と問題がただあるだけ)
バーチャルYouTuberについて無限に詳しい読者諸氏であれば当然ご存知あるだろうが、ねこますさんは、元々アルバイトの傍らでモデリングなどを一人でこなし、自身がバズった直後にVRChatの宣伝動画を投稿し、その後も精力的にVRの普及活動に貢献し続けている、1億人に1人いるかいないかのスーパーつよつよHumanだ。
そんなねこますさんが上記のようなツイートをしたということは、僕としては大変な驚きを伴う出来事だった。
なぜならは、一度理解すれば絶対に忘れないくらい、めちゃめちゃシンプルでわかりやすいものだからだ。
もくじ
関数とは何か
は、数学における関数の一つだ。の話をする前に、まずは関数の話をしよう。
(もしあなたがプログラミングの経験を持っていて、関数という言葉にピンときてしまったとしたら、申し訳ないが一度頭を空にしていただきたい。その理解は半分正しくて半分間違っている。数学の関数は副作用も状態も持たない。)
数学における関数(以降、単に関数)は、物を入れると物が出てくる箱だ。
物は基本的に値でなければならない。例えば、1を入れると5が出てきて、2を入れると10が出てくるといった感じだ。
入れるものは何でもいいというわけではなく、入れてもいい値が関数によって決まっている。
例えば、関数は、どんな数字でも入れることができて、1を入れると3が、2を入れると5が出てくる。
新しい箱を作ったときに、その箱について「1を入れると3が、2を入れると5が出てくる箱です」と記述してもいい。
だが、入れられる値が無数にある場合、「1を入れると3が出て、2を入れると5が出て、3を入れると7が出て…」と書いていては、いつまでたっても箱の全体像を記述することができない。
そこで、という表記を使う。
これは、「この箱に値が入ると、値が出てきます」ということを表している。
を計算するのは簡単なので、これでこの箱の全ての入出力について書き尽くすことができた。
絵ではという値がそのまま箱に入っているように見えるが、実際のところこのはなにかの値であって、という文字ではない(この辺りは踏み込みすぎるとよくないマサカリが飛んでくるので、あまり触れない)。
どんな値が入ってくるかまだわからないから、とりあえずと書いておいただけだ。
だから、関数とは本質的には「値が入って値が出る箱」なのであって、その表記がどうなっているかは大した問題ではない。
どういう値が入る可能性があって、それぞれの値が入った時にどういう値が出てくるかがわかれば、それで十分なのである。
直角三角形の底辺と角度が決まれば、長さの比は一意に決まる
さて、いよいよの話に入ろう。
もしよければ、手元に紙とペンを用意してから続きを読んでほしい。もちろん、iPadでも構わない。
1. まず、原点(これはただの点だが、名前が付いていたほうが呼びやすいので、原点と呼ぶことにする)と、その点から横に長い線を引く。
この線の右上にはいろいろ書き加えていくつもりだから、線や点はできるだけ紙の左下の方に書いてほしい。
2. 次に、90度未満の好きな角度を決めて、原点を中心にその角度だけ反時計回りに回転させた線を引く。(適当で構わない。)
3. 最後に、この2つの線と原点を含むような、適当な直角三角形を書く。本当に適当で構わないが、直角三角形になるようにうまく書いてほしい。(最初に引いた線と垂直な線を引くのが楽だと思う。)
さて、いま、あなたが書いた直角三角形の直角になっているところを、原点をとし、たぶんから右上かつから真上にあるであろう、三角形の最後の頂点をとしよう。(名前を付けただけなのでビビらないでほしい。呼びづらくなければ別にでもでもポチでも構わない。)
このとき、線分の長さを、線分の長さで割った値は、実は角度に依らず一定になる。
ステップ2. をやり直さなければ、ステップ3. でどう直角三角形を作っても、「線分の長さを、線分の長さで割った値」は同じ値になるということだ。
実際にやってみよう。まずは、この例。
線分の長さは143ピクセル、線分の長さは287ピクセルであった。
ゆえに、「線分の長さを、線分の長さで割った値」はおよそ0.5になる。
次に、同じ角度で、異なる直角三角形を書く。
線分の長さは312ピクセル、線分の長さは628ピクセルであった。
ゆえに、「線分の長さを、線分の長さで割った値」はおよそ0.5になる。
なぜこのようになるかは、三角形の相似(中学生で習う内容だったと思う)を用いて示すことができる。
何にせよ、このように構成すれば、線分の長さの比が等しくなるというわけだ。
この比はしかし、角度を変えると変わってしまう。
実例をやってみよう。
今度はさっきより小さめの角度を取ってみた。
ここに、直角三角形を作る。
長さを測ったところ、線分の長さは68ピクセル、線分の長さは243ピクセルであった。
ゆえに、「線分の長さを、線分の長さで割った値」はおよそ0.28となり、先ほどとは大きく異なっている。
再び、同じ角度で別の直角三角形を作ってみる。
線分の長さは149ピクセル、線分の長さは537ピクセルであった。
ゆえに、「線分の長さを、線分で割った長さ」はおよそ0.28になる。
というわけで、どうやらこの比は、「角度を変えれば違う値になるが、角度が同じでさえあれば常に同じ」ような値であるようだ。
つまりこの比は、「角度を与えれば値が決まる」値である。
これは入れる値を角度、出てくる値をこの比だと思えば、先述した関数の話と全く同じである(流し読みせず、ここをよく考えてみてほしい)。
「角度を入れると、『その角度を用いて上のステップ1. 2. 3. を実行した時の、直角三角形の線分の長さを線分の長さで割った値』が出てくる」関数を考えてもよいということだ。
このような関数は具体的に計算するのは大変かもしれないが、角度を決めれば値は数直線上のどこかに必ず決まり、変化したりはしない。なので、この箱を関数としたっていいはずだ。
実はこれが、高校数学で出てくるの正体なのである。
ややこしすぎるでしょ
この、分かりづらいかも知れないが、実は様々な場面で登場している。
例えば、円の上に点を取って、中心からの距離を計算しよう。
この距離を測ったところ、192ピクセルであった。
いま、この点が右方向から40度だけ上に向いていたとしよう。
すると、この点が中心から横・縦にいくらずれているかは、を用いて計算で求めることができるのである。
なぜそうなるかわからなければ、この点から真下に線を引いて、直角三角形を作ればよい。
点の名前は何でもよいので、ポチ・タマ・クロとした。
いま、 の定義から、線分(クロ, タマ)の長さを線分(ポチ, タマ)の長さで割った値は、となる。
線分(ポチ, タマ)の長さは、先ほど測った192ピクセルであるから、線分(クロ, タマ)の長さは
となる。
この値が、実際どのくらいの値なのかは、計算してみないとわからない。しかし、はれっきとした1つの値であって、複数の値を取ったり、状況に応じて値が変わったりするわけではないし、もはや関数でもない。という箱にという値を入れた結果出てきた、ただの値だからである。数直線上に置くことだってできる。
この例が使いやすいのは、ゲームを作るときである。
ゲーム内では、すべての等速直線運動するオブジェクトは速さと方向を持っていて、ある速さである方向に進んでいく。しかしながら、ゲーム内で位置を管理するのはx座標やy座標と呼ばれるものであって、好きな方向に好き勝手に進もうと思ったら、その進み方が1フレームにx座標をいくつ、y座標をいくつ動かすかを計算しなくてはならない。
これは、まさにいまの円の話と全く同じだ。
関数には、他にも面白い性質がたくさんある。
高校数学で初登場した段階では、あまり面白い使い道は見つからないかもしれないが、実は様々な数学的・工学的応用があって(実際はというよりに価値があるのだが、それは知らなくても十分生きていける)、そういうわけではよく用いられるし話題にのぼるのである。
まとめ
は関数であり、角度を入れると高さと斜辺の比が出てくる箱である。
が多くの人の頭を悩ませるのは、それまでののような関数と違って実際の値が具体的に求まるわけではない、という点が一番の原因であるように思う。
実際そこは分かりづらい話ではあるのだが、に具体的な角度を入れた結果は、(実際どういう値なのかはよく分からないにせよ)ある一つの値であって、ややと同じように扱ってもらって構わない。
あと、三角関数は公式や覚えるべき定数が多く、その点も分かりづらさを助長しているように思う。
これについても深く考える必要はない。などの定数については、つまり「1を入れると3が出てくる」のように一部のわかりやすい入出力を覚えているだけなので、忘れたらググればいいんだし、円を書けばなんとなくの値はわかる(直角を3等分して直角三角形を書けばよい)。
公式については、加法定理だけ覚えておけば、残りの全ての公式は導出できる。というかこの公式を覚えなきゃいけないのは学術を生業にする人と学生くらいで、この記事を読んでいるほとんどの人は公式なんてググればよく、公式があることだけ知っていればよい。
そういうわけで、のエッセンス、関数のエッセンスを記事にしてみた。
この記事がみなさんの理解の一助になれば幸いである。