目次

まえがき

本書の見方
ソースコード
確認済み動作環境
免責事項

第1章 マンデルブロ集合

1.1 生みの親
1.2 定義
1.3 描画
1.4 色付け
1.5 "飛び地"
1.6 マンデルブロ集合で遊ぶ
1.7 ズーム動画
1.8 ズーム動画をつくる

第2章 静止画

2.1 実行手順
2.2 解説

第3章 ズーム動画

3.1 実行手順
3.2 解説
3.3 ちらつき問題
3.4 ちらつき対策 : 実行手順
3.5 ちらつき対策 : 解説

第4章 高速化 その1

4.1 実行手順
4.2 計算時間の比較
4.3 解説

第5章 高速化 その2

5.1 環境構築と実行手順
5.2 計算時間の比較
5.3 トラブルシューティング
5.4 解説

第6章 任意精度

6.1 実行手順
6.2 解説
6.3 高速化
6.4 環境構築&実行手順
6.5 解説(C++側)
6.6 解説(Python側)

第7章 配色、保存、読込

7.1 配色
7.2 保存
7.3 読込

第8章 "飛び地"探しの旅へ

8.1 MandelbrotSetモジュール
8.2 ワンショット
8.3 ズームデータ生成
8.4 ズーム動画生成
8.5 最後に

付録A ギャラリー

付録B 参考文献

あとがき

まえがき

 本書を開いてくださりありがとうございます。ブノワ・マンデルブロ教授がマンデルブロ集合を発表して約40年。マンデルブロ集合界隈では新参者にもかかわらず本書を出版することと相成りました。


 タイトルにあるマンデルブロ集合のズーム動画をつくろうと思ったのは2020年秋。軽い気持ちで手を出したところ、様々な障壁にぶつかり、付録のギャラリーの画像を計算できるようになるまで、1ヶ月もの月日を費やしました。そんな苦労を後人の同士が味わなくてすむように、一連のノウハウを世に出そう。そんな想いでこの本を書くことにしました。


 どんな方に読んでもらえるのか分かりませんが、いろんな方に本書やマンデルブロ集合を楽しんで頂けたら幸いです。


本書の見方

 ・ソースコードは章ごとに独立しています。そのため、どの章から読んでもスクリプトを実行できるようになっています。

 ・ソースコードをダウンロードできるようにしています(次節)ので、ダウンロードしたソースコードを何かしら画面に開きながら読まれることを推奨いたします。

 ・共通する変数やアルゴリズムは最初に登場する章で説明しています。お手数ですが、必要に応じて章を戻ってお読みください。

 ・筆者がWindows環境のため、実行・インストール・C++のコンパイルに関してはwindows前提で解説しています。予めご了承ください。

ソースコード

 本文中のソースコードをGitHubに置いています。


 https://github.com/Shiki-mc2/MandelbrotSetZoomVideo_for_izumibooks

確認済み動作環境

 ソースコードが読者様のPC環境で動く保証はできませんが、参考までに筆者の方で動作したPC環境を記載しておきます。

PC1

 ・Python 3.7.3

 ・Windows 10 Home, OSビルド 19041.1052

 ・メモリ : 16GB

 ・CPU : インテル® Core™ i5-6500

 ・GPU : NVIDIA GeForce GT 520

PC2

 ・Python 3.7.3

 ・Windows 10 Home, OSビルド 19041.1052

 ・メモリ : 16GB

 ・CPU : インテル® Core™ i7-7700HQ

 ・GPU : NVIDIA GeForce GTX 1050

免責事項

 本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。本書に記載の全てのリンクは初版発行時にリンク先が生きていることを確認しておりますが、その後も生きている保証はありません。

第1章 マンデルブロ集合

1.1 生みの親

 マンデルブロ集合の生みの親について、少し触れたいと思います。生みの親であるブノワ・マンデルブロ(Benoît B. Mandelbrot)さんは、フラクタルを考案した学者で、フラクタルの性質をもつジュリア集合を研究する中でマンデルブロ集合を発見(1980年)しました。当時、IBMに勤めていたマンデルブロさんは、コンピュータグラフィクスを使って様々なジュリア集合を見るのを楽しんでいたそうです。

1.2 定義

 マンデルブロ集合は漸化式

 に対して

 となる集合Mと定義されます。z,cは複素数です。これは、漸化式を無限回反復しても|Zn|が無限大に発散しない集合を意味します。

1.3 描画

 式を一見するだけでは面白さがわかりませんが、これを描画すると次のようになります。式からでは想像もつかないような不思議な図を描きます。

図1.1: 複素平面上に描いたマンデルブロ集合

 この図は複素数cを座標とした複素平面上に描いたマンデルブロ集合です。横軸が実部、縦軸が虚部で、図の黒い部分がマンデルブロ集合で、黒以外の部分がマンデルブロ集合の補集合(マンデルブロ集合ではない集合)です。

1.4 色付け

 マンデルブロ集合アート界隈で最も一般的な色の付け方を紹介します。

エスケープタイムアルゴリズム(Escape Time Algorithm)

 これは、|Zn|が脱出半径Rを超えた時の反復回数nによって色を塗り分ける方法です。マンデルブロ集合が任意のnで|Zn| ≦ 2であることが証明されており、|Zn|が2を超えたら無限大に発散することが確定するため、Rは2に設定するのが一般的です。

1.5 "飛び地"

 複素平面を拡大していくと、また似たような形のマンデルブロ集合が現れます。これを"飛び地"(Island)と呼んだり、ミニマンデルブロ集合と呼んだりします。

図1.2: 拡大して現れる"飛び地"

1.6 マンデルブロ集合で遊ぶ

 マンデルブロ集合で遊びたい。そんなとき、最も手軽な方法はフリーソフトやアプリを使うことです。40年もの歴史ある人気ジャンルなので、フリーソフトがweb上にたくさん転がっていますし、GitHubにも誰かのつくったオーブンソースがいくつもアップされています。最近はスマホのアプリでもつくられていて、誰でも簡単に遊べるようになっています。

1.7 ズーム動画

 マンデルブロ集合は静止画・動画ともに世界の誰かが今日もweb上に投稿していますが、動画で圧倒的に多いのが、どこかの1点をズームしていく動画(以下、ズーム動画)です。YouTubeで「Mandelbrot set zoom」と検索すると、多くのズーム動画を見ることができます。


 マンデルブロ集合アート界隈では新参者ですが、私もズーム動画クリエイターとして月1ペースで投稿しています。下にそのひとつを紹介します。

図1.3:

 ・動画(YouTube) 【マンデルブロ集合】1兆×1兆倍の彼方

  ─https://youtu.be/gva-evKs_8A/

1.8 ズーム動画をつくる

 ズーム動画をつくる手段は、以下のようにいろいろとあります。

 ・フリーソフト(アプリも含む)でつくる

 ・有料ソフトでつくる

 ・フリーのプログラム言語でつくる

 ・有料のプログラム言語(Mathematica, MATLABなど)でつくる

 ・誰かにつくってもらう

 本書では「フリーのプログラム言語」の内、Pythonでつくる方法を解説します(少しだけC++も使います)。マンデルブロ集合の定義はそれほど難しくないので、プログラムで数式をグラフ化したり、図形を描画した経験がある人なら、すぐにズーム動画をつくれると思うかもしれません。そう思って、軽い気持ちで手を出したら大火傷。いくつもの壁にぶち当たり、手を出してから前節の動画をつくれるようになるまで1ヶ月かかりました。どんな壁にぶつかり、どう解決してきたのか。本書ではそういったことも含めて、つくり方を紹介していきます。

試し読みはここまでです。
この続きは、製品版でお楽しみください。