Skip to content

Instantly share code, notes, and snippets.

@lungben
Created December 26, 2020 18:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lungben/07d342d0c7dfd4e655cccc1ecfa2922c to your computer and use it in GitHub Desktop.
Save lungben/07d342d0c7dfd4e655cccc1ecfa2922c to your computer and use it in GitHub Desktop.
Mandelbrot with Pluto.jl
### A Pluto.jl notebook ###
# v0.12.17
using Markdown
using InteractiveUtils
# This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error).
macro bind(def, element)
quote
local el = $(esc(element))
global $(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : missing
el
end
end
# ╔═╡ e2eb2374-4229-11eb-3d66-1de9c8d2e7af
begin
using PlutoUI, Plots
default(fmt=:png)
end
# ╔═╡ ee196024-422b-11eb-16f0-b17863ff0fec
function mandel(z:: Complex)
c = z
maxiter = 20
for n = 1:maxiter
if abs2(z) > 4
return n-1
end
z = z^2 + c
end
return maxiter
end
# ╔═╡ ddd7a2f8-4240-11eb-3cce-e509cf98436b
function mandel_slice!(grid, ix, x, yrange)
@inbounds for (iy, y) in enumerate(yrange)
grid[iy, ix] = mandel(Complex(x,y))
end
end
# ╔═╡ cf3f7448-4241-11eb-0bb6-ffe2c208371c
function mandel_grid(xrange, yrange)
grid = Matrix{UInt8}(undef, length(xrange), length(yrange))
futures = Vector{Task}(undef, length(xrange))
@inbounds for (ix, x) in enumerate(xrange)
futures[ix] = Threads.@spawn mandel_slice!(grid, ix, x, yrange)
end
wait.(futures)
grid
end
# ╔═╡ e1e97930-4292-11eb-0e0e-5dd58e94b6e2
to_range(raw_range, n) = range(minimum(raw_range), maximum(raw_range); length=n)
# ╔═╡ 8eb0b0b2-4292-11eb-04fd-318b6d9d1a60
md"n"
# ╔═╡ 698e22e2-4233-11eb-053c-959b7f8bc4b9
@bind n Slider(10:10:1000; show_value=true)
# ╔═╡ 939efc0a-4292-11eb-2c31-8b6bfbebae01
@bind xrange_raw RangeSlider(-1.0:0.01:1.0)
# ╔═╡ 24712b3e-4293-11eb-3c3d-778c33287afb
@bind yrange_raw RangeSlider(-1.0:0.01:1.0)
# ╔═╡ 5f22c10c-4231-11eb-0f07-ab4ffe3a8834
mandelbrot_values = mandel_grid(to_range(xrange_raw, n), to_range(yrange_raw, n));
# ╔═╡ 7765b0ec-4231-11eb-1569-0135b8418995
heatmap(mandelbrot_values; size=(2000,2000))
# ╔═╡ Cell order:
# ╠═ee196024-422b-11eb-16f0-b17863ff0fec
# ╠═cf3f7448-4241-11eb-0bb6-ffe2c208371c
# ╠═ddd7a2f8-4240-11eb-3cce-e509cf98436b
# ╠═5f22c10c-4231-11eb-0f07-ab4ffe3a8834
# ╠═e1e97930-4292-11eb-0e0e-5dd58e94b6e2
# ╟─8eb0b0b2-4292-11eb-04fd-318b6d9d1a60
# ╠═698e22e2-4233-11eb-053c-959b7f8bc4b9
# ╠═939efc0a-4292-11eb-2c31-8b6bfbebae01
# ╠═24712b3e-4293-11eb-3c3d-778c33287afb
# ╠═7765b0ec-4231-11eb-1569-0135b8418995
# ╠═e2eb2374-4229-11eb-3d66-1de9c8d2e7af
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment