VRCLT #3空間充填曲線,その魅力と意義cannorin
View Slide
だれ● Twitter: @cannorin_vrc● Study: 数理論理学プログラム言語の理論● Job: F# プログラマ● in VRC: VOLT EnthusiastVRCLT Speaker (#2~)
空間充填曲線とはペアノ曲線 (0) ヒルベルト曲線 (1)
空間充填曲線とは(再帰的に細かくしていく)ペアノ曲線 (1) ヒルベルト曲線 (2)
空間充填曲線とは(再帰的に細かくしていく)ペアノ曲線 (2) ヒルベルト曲線 (3)
空間充填曲線とは(再帰的に細かくしていく)ペアノ曲線 (3) ヒルベルト曲線 (4)
空間充填曲線とは → 空間を充填する曲線(それはそう)ペアノ曲線 (∞) ヒルベルト曲線 (∞)
空間充填曲線とは / 一般化n 次元への一般化もできる(これは 3D ヒルベルト曲線)
空間充填曲線とは / 定義n 次元の単位(超)立方体を “埋め尽くす”(一次元の)曲線↓ 形式的には(一次元の)単位区間 [0, 1] からn 次元の単位(超)立方体 [0, 1]ⁿ への連続写像
なぜ埋め尽くせるのか?ゲオルク・カントール (1845 - 1918)実数 ℝ の濃度とn- 次元ユークリッド空間 ℝ ⁿ の濃度は等しい+( non-degenerate な)区間(単位区間 [0, 1] など)も等しい
なぜ埋め尽くせるのか? / 濃度とは?全単射が存在(=1対1対応を作れる)⇔ 濃度が等しい「濃度」=「要素の個数」概念の一般化(無限もOK)|X| = |Y|( ちなみに |ℝ| > |ℕ| )
なぜ埋め尽くせるのか?ゲオルク・カントール (1845 - 1918)| [0, 1] | = |ℝ| = |ℝⁿ|[0, 1] ℝと と ℝ ⁿ の間の全単射の存在を証明
なぜ埋め尽くせるのか?ジュゼッペ・ペアノ (1858 - 1932)全単射が存在するなら,連続にできるのだろうか?||空間を一本の曲線で埋め尽くせるのだろうか?
なぜ埋め尽くせるのか?ジュゼッペ・ペアノ (1858 - 1932)→ 全単射にはならなかったが,埋め尽くせた!(ペアノ曲線)
なぜ全単射にならない?ℝ と ℝ ² は同相ではない↓ 一点を取り除く分離する→ ← 分離しない
なぜ全単射にならない?一点を取り除いても分離しない ⇔ 自己交叉がある⇔ 同じ点を何度も通る場所がある ⇔ 単射ではない!※ 詳しくは解析学や位相空間論の知識が必要. A.P.M Kupers,On Space-Filling Curves and the Hahn-Mazurkiewicz Theorem とか参照↑実は自己交叉してる
おもしろい応用例が色々ある● Google Maps のキャッシュの最適化● 巡回セールスマン問題の高速なヒューリスティック手法● 小型で高性能なアンテナの設計● 大規模並列計算のロードバランシング● 衝突判定やレイトレーシングの高速化● etc...
応用 / Bounding Volume Hierarchy物体同士の衝突判定や,物体とレイの交差判定を効率化するために,近くにある物体同士をグループ化して扱いたい二分木にする → 判定回数を減らせる: O(n) → O(log n)
応用 / Bounding Volume Hierarchy / 二分木構築の高速化近くにある物体同士を検出して二分木を作るのが大変→ 空間充填曲線を使って走査する空間充填曲線は右から左へと走査するのに比べて,平面上で近くにあるものが直線上でも近くになりやすい→ 順番に辿ればOK!
応用 / 空間充填曲線の locality「平面上で近くにあるものが直線上でも近くになりやすい」性質 (locality) が様々な分野に応用しやすい実装が楽なのでヒルベルト曲線がよく使われるが,使う曲線によって効率化の度合いが変わることもある
ところで・・・今回のスライドで使われている空間充填曲線の画像は,私が所属している「株式会社ぺあのしすてむ」で業務の一環として開発しているスマホアプリ「 Peano Curves 」で作成されています・現在オープンベータテスト中・アプリ名 : Peano Curves・対応 OS: iOS/Android・公式 Twitter: @PeanoCurves
Thank you for listening!