Slide 1

Slide 1 text

ϋτωίΤ せいほうけい育成日記 @nekonenene

Slide 2

Slide 2 text

ࣗݾ঺հ ハトネコエ • Twitter: @nekonenene • Github : nekonenene • Job : none • 無職、曲作る、ミクさんかわいい • 次やりたいもの : Unity 今日の発表物のリポジトリ↓ https://github.com/nekonenene/Square_grows_up

Slide 3

Slide 3 text

͖͔͚ͬ 中学生のときの先輩が ヒマな時にやっていた遊び

Slide 4

Slide 4 text

͖͔͚ͬ 正方形の周りに半分の大きさの 正方形をくっつける。 これをシャーペンで がしがし書いてた。 こんなあそび

Slide 5

Slide 5 text

プログラミングでやったら 正確にきれいに大規模なものが?! ϓϩάϥϜ ͠Α͏

Slide 6

Slide 6 text

ϓϩάϥϜ͠Α͏ (さっきも書きましたが)リポジトリ↓ https://github.com/nekonenene/Square_grows_up できました! ここから見られます↓ http://nekonenene.github.io/Square_grows_up

Slide 7

Slide 7 text

けっこう高校数学でした。 久しぶりに正弦定理とか使いました Ͳ͏ ࣮૷͔ͨ͠

Slide 8

Slide 8 text

Ͳ͏࣮૷͔ͨ͠ 前提: PATHで(SVGで)描きたかった。 よって、図形を作るためには順番に結ぶための座標が必要 ✔ ✗ [ [10, 10], [10, 20], [20, 20], [20, 10] ] [ [10, 10], [10, 20], [20, 10], [20, 20] ]

Slide 9

Slide 9 text

ਖ਼ଟ֯ܗΛඳ͘ 108° 1本の直線を初めに引き、 頂点角度だけ回転させた同じ長さの線を描く。 それを繰り返せば正多角形はできるので、 これを利用して座標群を求める方法 アプローチA しかし…… 辺の長さを基準に描くために、頂点数の多い正多角形ほど 出来上がる図形が大きくなり、描画領域を超えてしまう (x, y 座標で言うマイナス部分は、ブラウザで描画されない)

Slide 10

Slide 10 text

ਖ਼ଟ֯ܗΛඳ͘ アプローチB 正多角形の作り方を思い出してみる。 正n角形は円を中心で n等分して、 円とぶつかった座標をつないでいく。 この基準の円より大きい図形はできないから 図形の大きさを限定できる!

Slide 11

Slide 11 text

಺ଆͷ੒௕Λඳ͘ こっちはカンタン 作った正多角形の各頂点の中間点を結ぶと、 ひとまわり小さい正多角形ができる

Slide 12

Slide 12 text

֎ଆͷ੒௕Λඳ͘ こっちはムズカシイ まじめに徹夜してスライド作りましたが、 これを説明するとLTの時間中に終わりませんので、 ご興味のある方は GitHub のリポジトリにあるリンクから飛んで ご覧くださいますようお願いいたします。 @nekonenene

Slide 13

Slide 13 text

中心を点 c1 (cx1 , cy1 ) とする半径 r1 の円を用意する。 この中心から直線を引いて、円と交わった点が座標となっていく。 最初の直線は、x軸を水平としたとき θf 度とする。 その次の直線は 正n角形を作るとする。頂点の角度 θn は、 度となるといった具合である。 この θf は、θn / 2 とすると、底が x軸と水平な、見た目の良い図形になる。 さて、実際に図解したほうがわかりやすいので、 以降、正五角形(つまり n=5)を基に考えていく。 詳説 1/8

Slide 14

Slide 14 text

c1 : 円の中心点 r1 : 円の半径 θf : 最初の角度 p1 〜 p5 : 交点であり、  正五角形の各頂点 p'1 : p1 と p2 の中間点 q1 〜 q5 : 次に作られる  正五角形の各頂点 c2 : その正五角形を  作るための円の中心点 詳説 2/8

Slide 15

Slide 15 text

では、まず p1 〜 p5 の座標を計算する。 中心点 (0, 0) で半径 1 の円に、 中心点からx軸を水平線とする θ 度の直線を引いたときの 円との交点 (x, y) は x = cosθ, y = sinθ で表せることを利用する。 今回は円の半径は r1 で、p1 のために引く直線の角度は θf だから、 詳説 3/8

Slide 16

Slide 16 text

中心点は (0, 0) でなく c1 (cx1 , cy1 ) だが、その差はあとで各座標に プラスすればいいので、ひとまず中心点は (0, 0) としたまま続きを考える。 p1 〜 p5 の座標が求められたので、親となる正五角形の座標はわかった。 次は、子となる、一辺の長さが親の半分である正五角形を考える。 その正五角形を作るには、少なくとも 基準となる円の中心点の座標、円の半径の長さ、 最初の角度 θf を知りたい。 詳説 4/8

Slide 17

Slide 17 text

先ほどの図を見つつ、(c1 , p1 , p2 ) を結ぶ三角形と (c2 , q4 , q3 ) を結ぶ三角形を比べてみてほしい。 これはすべての角度が同じだから 合同の関係にある。 線分q3 q4 は線分p2 p1 の半分の長さだから、 線分c2 q4 は線分c1 p1 の半分の長さ。 よって r2 = r1 ÷ 2 そして、線分c1 c2 は線分c1 p1 の 倍の長さ。 c1 の座標を (0, 0) とすると、 c2 の座標は、p1 , p2 の中間点 p'1 のxy座標を それぞれ 倍すればよいだけ。 詳説 5/8

Slide 18

Slide 18 text

最初の角度 θf については図を見るとわかりやすい。 (c1 , p1 , p2 ) を結ぶ三角形は二等辺三角形で (c1 , p1 , p'1 ) はそれを二等分する三角形だから、 求める θf は と求められる。 (※わかりにくいので、最初の θf を θf1  今回求める θf を θf2 とした) 詳説 6/8

Slide 19

Slide 19 text

以上で、新しい子の正五角形を作るための計算式は得られた。 これは正五角形で中心点 c1 (cx1 , cy1 ) を (0, 0) とおいた時のものなので、 正n角形について一般化させると次のようになる。 詳説 7/8

Slide 20

Slide 20 text

子の正n角形の頂点 q1 〜 qn の座標を求めるのに必要な情報 (※なお、cos, sin の中の単位は「度」なので、必要であれば 2π で割って radian に変換する) あとは関数呼び出しを利用すれば、どんどん子供の正多角形が作れる! 詳説 8/8

Slide 21

Slide 21 text

·ͱΊ 図形ってかわいい! 子育てたのしい!

Slide 22

Slide 22 text

༨ஊ 苦労したこと • ウェブサイト作るの久しぶりだったから難しい。
 HTML も CSS も書きたくない! • 当初思っていたより複雑になってコードが難解に。
 TypeScript を使うべきでした・・・ • SVG が大きくなっても IE 以外はスクロールバーが
 出てくれないから、対応したかったけど中途半端。
 SVG 描画に関しては IE が神ブラウザでした(意外!) • スライドのために図を描くのたいへん • スライドのために数式を描くのたいへん

Slide 23

Slide 23 text

༨ஊ お世話になったツール • D3.js : Web で SVG を簡単に描くためのライブラリ • gulp : タスクランナー、強い • haml : jadeでも slimでもなく hamlの見た目が好き • SCSS : もう君のいない世界で生きていけない • TeXclip : 数式画像を生成してくれる Webサービス • Affinity Designer : このスライドの図を描くのに使用。
 買い切りのイラレみたいなものです、おすすめ(Mac専用) • GitHub : GitHub Pages の機能を初めて使いましたが
 超簡単でした。すてき