動機
Juliaで画像とか動画とか作ってみたかったから
目標
1 test Makieでエラー吐かないようにする
2 画像出力(.jpg)
3 動画出力(.mp4)
作業環境
重いらしいのでゲーミングPCの方でやってみる
julia> versioninfo() Julia Version 1.1.0 Commit 80516ca202 (2019-01-21 21:24 UTC) Platform Info: OS: Linux (x86_64-pc-linux-gnu) CPU: Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz WORD_SIZE: 64 LIBM: libopenlibm LLVM: libLLVM-6.0.1 (ORCJIT, skylake) Environment: JULIA_EDITOR = atom -a JULIA_NUM_THREADS = 6
ffmpeg等必要なので、次をターミナルで走らせておく
sudo apt-get install ffmpeg cmake xorg-dev
やってみる
julia> (v1.1) pkg> activate Makie-env (Makie-env) pkg> add AbstractPlotting Makie GLMakie FileIO CodecZlib GDAL julia> using Pkg julia> Pkg.installed() Dict{String,Union{Nothing, VersionNumber}} with 6 entries: "CodecZlib" => v"0.5.2" "FileIO" => v"1.0.5" "Makie" => v"0.9.3" "AbstractPlotting" => v"0.9.6" "GDAL" => v"0.2.0" "GLMakie" => v"0.0.5" julia> Pkg.build("CodecZlib") julia> Pkg.build("GDAL") julia> exit() Julia has exited. Press Enter to start a new session. julia> (v1,1) pkg> activate Makie-env (Makie-env) > test Makie ... Test Summary: | Pass Total Reference Image Tests | 185 185 Testing Makie tests passed julia> edit("first_scatter.jl")
散布図を書く(first_scatter.jlを編集)
色も配置もランダムにプロットする(チュートリアルそのまま)
using Makie x = rand(10) y = rand(10) colors = rand(10) scene = scatter(x, y, color = colors) Makie.save("scatterplot.jpg", scene)
REPLに戻って
shell> julia first_scatter.jl scatterplot.jpg
動画もやってみる
julia> edit("video.jl")
video.jlを編集
using Makie scene = Scene() f(t, v, s) = (sin(v + t) * s, cos(v + t) * s, (cos(v + t) + sin(v)) * s) t = Node(Base.time()) limits = FRect3D(Vec3f0(-1.5, -1.5, -3), Vec3f0(3, 3, 6)) #np.linspace的な、描画する範囲の指定 p1 = meshscatter!(scene, lift(t-> f.(t, range(0, stop = 2pi, length = 50), 1), t), markersize = 0.1, color = RGBAf0(0.2, 0.9, 0.2, 0.3))[end] p2 = meshscatter!(scene, lift(t-> f.(t * 2.0, range(0, stop = 2pi, length = 50), 1.5), t), markersize = 0.1, color = RGBAf0(0.9, 0.2, 0.4, 1))[end] #RGBAf0でカラー指定してみた lines = lift(p1[1], p2[1]) do pos1, pos2 map((a, b)-> (a, b), pos1, pos2) end linesegments!(scene, lines, linestyle = :dot, limits = limits) N = 150 #動画のコマ数指定 record(scene, "/置きたいpath/first_video.mp4", 1:N) do i #record関数でmp4出力 push!(t, Base.time()) end
REPLに戻って
shell> julia first_video julia>
できた!(.mp4の場合は結果はREPLには出ませんでした)
Julia楽しい
— (¦3ꇤ[▓▓]眠気.jl (@julialangisthe) 2019年3月12日
‹‹\(´ω` )/››‹‹\( ´)/›› ‹‹\( ´ω`)/››~♪ pic.twitter.com/XIsQHYIk8E
感想
楽しかった!!
surfaceに矢印をプロットする関数もあるようなので,微分幾何をやり直しつつ,可視化もしてみたいです!!!
参考にしたURL,書籍
Julia Programming Projects: Learn Julia 1.x by building apps for data analysis, visualization, machine learning, and the web (English Edition)
Makie.jl公式レポジトリ
Makie.jl公式ドキュメント