Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
せいほうけい育成日記
Search
ハトネコエ
March 19, 2016
Programming
0
6.8k
せいほうけい育成日記
D3.js で正多角形を描きました
https://github.com/nekonenene/Square_grows_up
ハトネコエ
March 19, 2016
Tweet
Share
More Decks by ハトネコエ
See All by ハトネコエ
日経が読める?! 株式市場の基礎 / Stock Market Basics
nekonenene
0
42
プルリクエストレビューを終わらせるためのチーム体制 / The Team for Completing Pull Request Reviews
nekonenene
4
2.9k
今年こそ知るべきセキュリティー入門 / Security Basics 2025
nekonenene
0
66
Godot 4.3 と学ぶインタラクティブミュージック / Interactive Music Basics with Godot 4.3
nekonenene
0
180
Developer Consoleを使い倒そう / Use Web Browser DevTools
nekonenene
0
56
まだまだマイナー?! 未踏事業について教えます / Introduction of Mitou Project
nekonenene
1
150
Docker for Windows/macOS
nekonenene
0
42
技術的負債を防ぐには / What is the Technical Debt
nekonenene
0
350
画像処理の基礎の基礎 / Ultra Basic of Image Processing
nekonenene
0
60
Other Decks in Programming
See All in Programming
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
230
開発に寄りそう自動テストの実現
goyoki
1
740
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
20k
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
380
チームをチームにするEM
hitode909
0
290
connect-python: convenient protobuf RPC for Python
anuraaga
0
380
Go コードベースの構成と AI コンテキスト定義
andpad
0
120
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
200
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
6
920
Microservices rules: What good looks like
cer
PRO
0
1.1k
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
ゲームの物理 剛体編
fadis
0
320
Featured
See All Featured
A Tale of Four Properties
chriscoyier
162
23k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
The Invisible Side of Design
smashingmag
302
51k
Bash Introduction
62gerente
615
210k
Into the Great Unknown - MozCon
thekraken
40
2.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
710
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Building Adaptive Systems
keathley
44
2.9k
Site-Speed That Sticks
csswizardry
13
990
Music & Morning Musume
bryan
46
7k
Transcript
ϋτωίΤ せいほうけい育成日記 @nekonenene
ࣗݾհ ハトネコエ • Twitter: @nekonenene • Github : nekonenene •
Job : none • 無職、曲作る、ミクさんかわいい • 次やりたいもの : Unity 今日の発表物のリポジトリ↓ https://github.com/nekonenene/Square_grows_up
͖͔͚ͬ 中学生のときの先輩が ヒマな時にやっていた遊び
͖͔͚ͬ 正方形の周りに半分の大きさの 正方形をくっつける。 これをシャーペンで がしがし書いてた。 こんなあそび
プログラミングでやったら 正確にきれいに大規模なものが?! ϓϩάϥϜ ͠Α͏
ϓϩάϥϜ͠Α͏ (さっきも書きましたが)リポジトリ↓ https://github.com/nekonenene/Square_grows_up できました! ここから見られます↓ http://nekonenene.github.io/Square_grows_up
けっこう高校数学でした。 久しぶりに正弦定理とか使いました Ͳ͏ ࣮͔ͨ͠
Ͳ͏࣮͔ͨ͠ 前提: PATHで(SVGで)描きたかった。 よって、図形を作るためには順番に結ぶための座標が必要 ✔ ✗ [ [10, 10], [10,
20], [20, 20], [20, 10] ] [ [10, 10], [10, 20], [20, 10], [20, 20] ]
ਖ਼ଟ֯ܗΛඳ͘ 108° 1本の直線を初めに引き、 頂点角度だけ回転させた同じ長さの線を描く。 それを繰り返せば正多角形はできるので、 これを利用して座標群を求める方法 アプローチA しかし…… 辺の長さを基準に描くために、頂点数の多い正多角形ほど 出来上がる図形が大きくなり、描画領域を超えてしまう
(x, y 座標で言うマイナス部分は、ブラウザで描画されない)
ਖ਼ଟ֯ܗΛඳ͘ アプローチB 正多角形の作り方を思い出してみる。 正n角形は円を中心で n等分して、 円とぶつかった座標をつないでいく。 この基準の円より大きい図形はできないから 図形の大きさを限定できる!
ଆͷΛඳ͘ こっちはカンタン 作った正多角形の各頂点の中間点を結ぶと、 ひとまわり小さい正多角形ができる
֎ଆͷΛඳ͘ こっちはムズカシイ まじめに徹夜してスライド作りましたが、 これを説明するとLTの時間中に終わりませんので、 ご興味のある方は GitHub のリポジトリにあるリンクから飛んで ご覧くださいますようお願いいたします。 @nekonenene
中心を点 c1 (cx1 , cy1 ) とする半径 r1 の円を用意する。 この中心から直線を引いて、円と交わった点が座標となっていく。
最初の直線は、x軸を水平としたとき θf 度とする。 その次の直線は 正n角形を作るとする。頂点の角度 θn は、 度となるといった具合である。 この θf は、θn / 2 とすると、底が x軸と水平な、見た目の良い図形になる。 さて、実際に図解したほうがわかりやすいので、 以降、正五角形(つまり n=5)を基に考えていく。 詳説 1/8
c1 : 円の中心点 r1 : 円の半径 θf : 最初の角度 p1
〜 p5 : 交点であり、 正五角形の各頂点 p'1 : p1 と p2 の中間点 q1 〜 q5 : 次に作られる 正五角形の各頂点 c2 : その正五角形を 作るための円の中心点 詳説 2/8
では、まず p1 〜 p5 の座標を計算する。 中心点 (0, 0) で半径 1
の円に、 中心点からx軸を水平線とする θ 度の直線を引いたときの 円との交点 (x, y) は x = cosθ, y = sinθ で表せることを利用する。 今回は円の半径は r1 で、p1 のために引く直線の角度は θf だから、 詳説 3/8
中心点は (0, 0) でなく c1 (cx1 , cy1 ) だが、その差はあとで各座標に
プラスすればいいので、ひとまず中心点は (0, 0) としたまま続きを考える。 p1 〜 p5 の座標が求められたので、親となる正五角形の座標はわかった。 次は、子となる、一辺の長さが親の半分である正五角形を考える。 その正五角形を作るには、少なくとも 基準となる円の中心点の座標、円の半径の長さ、 最初の角度 θf を知りたい。 詳説 4/8
先ほどの図を見つつ、(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
最初の角度 θf については図を見るとわかりやすい。 (c1 , p1 , p2 ) を結ぶ三角形は二等辺三角形で
(c1 , p1 , p'1 ) はそれを二等分する三角形だから、 求める θf は と求められる。 (※わかりにくいので、最初の θf を θf1 今回求める θf を θf2 とした) 詳説 6/8
以上で、新しい子の正五角形を作るための計算式は得られた。 これは正五角形で中心点 c1 (cx1 , cy1 ) を (0, 0)
とおいた時のものなので、 正n角形について一般化させると次のようになる。 詳説 7/8
子の正n角形の頂点 q1 〜 qn の座標を求めるのに必要な情報 (※なお、cos, sin の中の単位は「度」なので、必要であれば 2π で割って
radian に変換する) あとは関数呼び出しを利用すれば、どんどん子供の正多角形が作れる! 詳説 8/8
·ͱΊ 図形ってかわいい! 子育てたのしい!
༨ஊ 苦労したこと • ウェブサイト作るの久しぶりだったから難しい。 HTML も CSS も書きたくない! • 当初思っていたより複雑になってコードが難解に。
TypeScript を使うべきでした・・・ • SVG が大きくなっても IE 以外はスクロールバーが 出てくれないから、対応したかったけど中途半端。 SVG 描画に関しては IE が神ブラウザでした(意外!) • スライドのために図を描くのたいへん • スライドのために数式を描くのたいへん
༨ஊ お世話になったツール • D3.js : Web で SVG を簡単に描くためのライブラリ •
gulp : タスクランナー、強い • haml : jadeでも slimでもなく hamlの見た目が好き • SCSS : もう君のいない世界で生きていけない • TeXclip : 数式画像を生成してくれる Webサービス • Affinity Designer : このスライドの図を描くのに使用。 買い切りのイラレみたいなものです、おすすめ(Mac専用) • GitHub : GitHub Pages の機能を初めて使いましたが 超簡単でした。すてき