Mandelbrot set: Difference between revisions
Content added Content deleted
(→Normalized Iteration Count, Distance Estimation and Mercator Maps: Fixed: Duplicate file type) |
(→Normalized Iteration Count, Distance Estimation and Mercator Maps: Added: e^(-|z|)-smoothing) |
||
Line 5,280: | Line 5,280: | ||
d, h = 800, 600 # pixel density (= image width) and image height |
d, h = 800, 600 # pixel density (= image width) and image height |
||
n, r = |
n, r = 100, 500 # number of iterations and escape radius (r > 2) |
||
x = range(0, 2, length=d+1) |
x = range(0, 2, length=d+1) |
||
Line 5,289: | Line 5,289: | ||
Z, dZ = zero(C), zero(C) |
Z, dZ = zero(C), zero(C) |
||
T, D = zeros(size(C)), zeros(size(C)) |
T, S, D = zeros(size(C)), zeros(size(C)), zeros(size(C)) |
||
for k = 1:n |
for k = 1:n |
||
M = abs.(Z) .< r |
M = abs.(Z) .< r |
||
T[M], S[M] = T[M] .+ 1, S[M] + exp.(-abs.(Z[M])) |
|||
Z[M], dZ[M] = Z[M] .^ 2 + C[M], 2 * Z[M] .* dZ[M] .+ 1 |
Z[M], dZ[M] = Z[M] .^ 2 + C[M], 2 * Z[M] .* dZ[M] .+ 1 |
||
T[M] = T[M] .+ 1 |
|||
end |
end |
||
heatmap(T .^ 0.1, c=:jet) |
heatmap(T .^ 0.1, c=:jet) |
||
savefig("Mandelbrot_set_1.png") |
savefig("Mandelbrot_set_1.png") |
||
heatmap(S .^ 0.1, c=:jet) |
|||
savefig("Mandelbrot_set_2.png") |
|||
N = abs.(Z) .> r # normalized iteration count |
N = abs.(Z) .> r # normalized iteration count |
||
Line 5,304: | Line 5,307: | ||
heatmap(T .^ 0.1, c=:jet) |
heatmap(T .^ 0.1, c=:jet) |
||
savefig(" |
savefig("Mandelbrot_set_3.png") |
||
N = abs.(Z) .> 2 # exterior distance estimation |
N = abs.(Z) .> 2 # exterior distance estimation |
||
Line 5,310: | Line 5,313: | ||
heatmap(D .^ 0.1, c=:jet) |
heatmap(D .^ 0.1, c=:jet) |
||
savefig(" |
savefig("Mandelbrot_set_4.png")</lang> |
||
A small change in the |
A small change in the code above creates Mercator maps of the Mandelbrot set. |
||
<lang julia>using Plots |
<lang julia>using Plots |
||
gr(aspect_ratio=:equal, legend=false, dpi=250) |
gr(aspect_ratio=:equal, legend=false, dpi=250) |
||
Line 5,326: | Line 5,329: | ||
Z, dZ = zero(C), zero(C) |
Z, dZ = zero(C), zero(C) |
||
T, D = zeros(size(C)), zeros(size(C)) |
T, S, D = zeros(size(C)), zeros(size(C)), zeros(size(C)) |
||
for k = 1:n |
for k = 1:n |
||
M = abs.(Z) .< r |
M = abs.(Z) .< r |
||
T[M], S[M] = T[M] .+ 1, S[M] + exp.(-abs.(Z[M])) |
|||
Z[M], dZ[M] = Z[M] .^ 2 + C[M], 2 * Z[M] .* dZ[M] .+ 1 |
Z[M], dZ[M] = Z[M] .^ 2 + C[M], 2 * Z[M] .* dZ[M] .+ 1 |
||
T[M] = T[M] .+ 1 |
|||
end |
end |
||
heatmap(-T' .^ 0.1, c=:nipy_spectral) |
heatmap(-T' .^ 0.1, c=:nipy_spectral) |
||
savefig("Mercator_map_1.png") |
savefig("Mercator_map_1.png") |
||
heatmap(-S' .^ 0.1, c=:nipy_spectral) |
|||
savefig("Mercator_map_2.png") |
|||
N = abs.(Z) .> r # normalized iteration count |
N = abs.(Z) .> r # normalized iteration count |
||
Line 5,341: | Line 5,347: | ||
heatmap(-T' .^ 0.1, c=:nipy_spectral) |
heatmap(-T' .^ 0.1, c=:nipy_spectral) |
||
savefig(" |
savefig("Mercator_map_3.png") |
||
N = abs.(Z) .> 2 # exterior distance estimation |
N = abs.(Z) .> 2 # exterior distance estimation |
||
Line 5,347: | Line 5,353: | ||
heatmap(D' .^ 0.1, c=:nipy_spectral) |
heatmap(D' .^ 0.1, c=:nipy_spectral) |
||
savefig(" |
savefig("Mercator_map_4.png")</lang> |
||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |