t-hom’s diary

主にVBAネタを扱っているブログです。

三角関数を使ってSatisfactoryでの最適な線路敷設角度を求める

最近とある政治家が学校教育で三角関数よりも金融リテラシーを教えるべきだと主張して炎上した。
数々の反論を読んで改めて三角関数の重要性に気づかされた出来事でもあったので、私も三角関数について何か書いてみようと思う。

まぁ、正直ぐたぐだしてるうちにだいぶ話題に乗り遅れたんだけど。


最近よくプレイしているSatisfactoryという工場建設ゲームで以下のようなマップがあり、海岸線にそって線路を敷設したいという要件がある。

Satisfactoryは一人称視点のゲームなので、高所から見下ろして直感で一気に線路を引くということはできない。
その代わりに東西南北の方角はゲーム内のコンパスで分かり、そこから基礎となる土台を5度単位で回転させることができる。


つまり角度が分かれば起点からまっすぐに土台を伸ばしていけるので、パワポ等で適当に直角三角形を配置して斜辺を海岸線に沿わせてやれば、あとは高さと幅の情報から逆三角関数で角度が求まる。

あ、タイトルで嘘ついたごめんなさい。
今回は三角関数の話じゃなくて、逆三角関数の話。まぁ計算順が逆なだけなのでご容赦。

計算方法は受験とかじゃないかぎり便利サイト使えば良い。
keisan.casio.jp

こんな感じで、アークタンジェントを選択して変数xに計算式を入力すると、約70度と出た。

今回の場合は西から右方向へ70度土台を傾ければ概ね海岸線に沿ったラインが引けることが分かった。


ここで、分度器があるんだからわざわざ三角関数要らないのでは?という疑問を持たれる方もいるかと思う。
しかし現在はコンピューター全盛期。たとえば角度計算をよく使うから便利ツールとしてプログラムを組もうとなったときに三角関数をそもそも知らないと早々に行き詰ることになる。

コンピューターの画面は基本的に小さな四角いドットの並びで出来ており、内部で扱えるのは基本的にX・Y座標系である。
そこから角度を求めたいとか、指定した角度で線を引きたいとか、円を描きたいとか、斜線の距離を求めたいという話になると、基本的には三角関数・逆三角関数等を使って計算で対処することになる。

角度を求めるのに分度器を当てるという発想しかなければそもそもプログラムを組めるというイメージが全く湧かないのではないだろうか。

こんな記事を書いている私も実は三角関数についてちゃんと知ったのは去年の話である。壊れない棚を作りたくて材料力学という分野を学習していたのだが、そこで初めてちゃんと調べた結果便利すぎて衝撃を受けた。電子工作でも使えるしSatisfactoryでも使えるし、マイクラでも使える。

コンピューターの登場・発展によって三角関数の面白さ・有用性を身近に味わえる事例はむしろ増えているし、プログラミング教育との相性も抜群だ。

ようやくここまで身近に感じられる時代が来たのだ。
ここで義務教育から外すというのはちょっと時代が見えてないんじゃないかと思う。

ということで今回はここまで。


あ、そうそう。。例の線路どうなったかというと、

景観の問題で直線案はボツ、結局90度と45度の組み合わせで作った。。

三角関数関係なかった。

すみませんでした!

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。