Juliaで3Dのgifアニメを作るために格闘したのでメモ。 使用しているJuliaは**v1.5.1**で、エディタは**Atom**を使っています(筆者はWindowsユーザーです)。 #・3Dのgifアニメを作りたい! [**Julia**](https://julialang.org/)で出力された3D画像について色々と調べていると次のページに巡り合いました。 **"Depth" - cormullion’s blog** **https://cormullion.github.io/pages/2020-09-22-depth/index.html** このページの一番下には以下のようなgifムービーが掲載されていました。これは冥王星の5つの衛星の周回軌道を、カロン(Charon)が公転する分だけ3Dプロットした動画です。 ![plutoniansystem.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697094/02fa9986-b604-0b81-6aee-307b820e9cef.gif) なかなか綺麗なので自分の環境でも出力してみようと思い立ち、色々やってみました。 #・準備 これを動かすには「**Thebes**」と「**Luxor**」という2つのパッケージが必要です。 パッケージのインストールは、JuliaのREPLを起動してパッケージモードで `add Thebes` などとすれば可能です。もしくは、コードの冒頭に `import Pkg; Pkg.add("Thebes")` などと書いておけばインストールできます(※一度インストールすればそれ以降は書かなくてOKです)。 >「PyPlot」が無くても出力されるかどうかについては、試していないので分かりませんが、併せてインストールしておくのが良いと思います。 また、Juliaとは別に「**FFmpeg**」というフリーソフトウェアが必要です。これは動画・音声を記録・変換・再生するためのソフトウェアで、以下のページからzipファイルがダウンロード可能です。 [**FFmpeg Windows Builds**](https://www.gyan.dev/ffmpeg/builds/)(Windows環境の場合) ※ https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.zip を選びます。 > MacやLinuxをお使いの方は [**Download FFmpeg**](https://ffmpeg.org/download.html) のページから適するものをダウンロードして下さい。 ダウンロードしたら展開し、`C:\Program Files` の下などに `FFmpeg` などと名前を変更しつつ移動します。その後、ユーザー環境変数のPathの中に `C:\Program Files\FFmpeg\bin` とパスを通してください。これでプログラムがFFmpegを使えるようになります。 > この辺りの操作は「[**Plots.jlで動画出力するにはffmpegまたはimagemagickが必要**](https://qiita.com/STInverSpinel/items/94600300633a23512aa5)」の記事などを参考にさせて頂きました。 #・出力してみた [**元コード**](https://cormullion.github.io/pages/2020-09-22-depth/index.html#plutonian)をそのまま実行してもgifがうまく出力されないので、コードの最初の行に ```Julia using Thebes, Luxor ``` を付け加え、最後の `pathname` の部分を ```Julia pathname = "C:/Users/user/AppData/Local/Temp/plutonian.gif" ``` などと書き替えます(場所は適当。`user` の部分は適宜書き換える)。これにより `C:/Users/user/AppData/Local/Temp/` の中に `plutonian.gif` が作成されます。他人様のコードを丸ごと載せる訳にはいかないので、コード全体については[**元ページのソースコード**](https://cormullion.github.io/pages/2020-09-22-depth/index.html#plutonian)を適宜参照して下さい。 実際に自分で作成したgifも載せておきます。オリジナルとは少し配色を変えてみました。 ![plutonian2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697094/02a4ef02-01f1-3c9c-11b8-14d45ab0ee17.gif) #・他にも出力してみた いかにもJuliaのロゴマークっぽい配色です。 ![ferriswheel.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697094/cd64f529-0f60-f8f6-2580-6319e91ee696.gif) ![amovie.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697094/0b3158af-6f39-9636-134e-502055859797.gif) > コードは先ほどの [**cormullion’s blog**](https://cormullion.github.io/pages/2020-09-22-depth/index.html) のページを参考にアレンジしました。 #・Pyplotパッケージを使う場合 Pyplotパッケージを使うとPythonのmatplotlibが呼び出せます。これによりmatplotlibを用いた3Dグラフが出力可能になります。Pythonと同じ書き方ができるので非常にラクです。(ただし、使う場合はPyCall、PyPlot、matplotlib本体をインストールしておいて下さい) ![PyPlot_plot_rwalk.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697094/d1280186-4739-7fc4-ecda-c68b7471b656.gif) ![PyPlot_plot_rwalk2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697094/108bdf45-b360-18be-c56e-a014e6d01be2.gif) ![PyPlot_plot_rwalk3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697094/bc94f1df-4f9a-20df-3cf7-76ff6f9f9dd9.gif) > いずれも乱数により生成した点列をプロットしたものです。コードは[**こちらのページ**](https://nbviewer.jupyter.org/gist/genkuroki/0428f82e2291be95da7d037a8ff4e0a5)を参考にアレンジしました。 #・あとがき ・・・という訳で、表題の通りJuliaで3Dのgifアニメを色々と作ってみました。 特にPythonユーザーからしてみると、`using PyCall, PyPlot` とすればPythonと同じ書き方ができるのは嬉しいですね。Plotsパッケージを使った2Dのgif画像については「[**JuliaでグラフのGIFアニメを作ってみた**](https://qiita.com/MTNakata/items/0418ae3493a26ac44603)」や「[**Julia言語と Plots + GR で複素関数のgifアニメーションを作る**](https://optie.hatenablog.com/entry/2018/03/29/210619)」などのページに色々な例が紹介されているので、参考にしてみて下さい。 その他のJuliaの基本的な部分については「[**Julia初心者がJuliaをさわってみた**](https://qiita.com/h-nabata/items/f2849d2d1b69f2415de3)」などのページを参考にしてみて下さい。