feat: Fractal generation
This commit is contained in:
parent
bdc92baf5f
commit
d814811e9a
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
julia_version = "1.11.4"
|
julia_version = "1.11.4"
|
||||||
manifest_format = "2.0"
|
manifest_format = "2.0"
|
||||||
project_hash = "0a18a0873213e0e8660a5eb202a1fa9f1621a652"
|
project_hash = "6ff2a6774137725477bae8d2113d6856bc327396"
|
||||||
|
|
||||||
[[deps.AbstractFFTs]]
|
[[deps.AbstractFFTs]]
|
||||||
deps = ["LinearAlgebra"]
|
deps = ["LinearAlgebra"]
|
||||||
|
@ -1093,6 +1093,11 @@ git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5"
|
||||||
uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d"
|
uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
|
|
||||||
|
[[deps.Ranges]]
|
||||||
|
git-tree-sha1 = "b5dd6c6cba97d1fa0641797cb08d4fd913c5fcd5"
|
||||||
|
uuid = "eb7db99b-64ae-4b81-85c2-3439b6569b78"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[[deps.Ratios]]
|
[[deps.Ratios]]
|
||||||
deps = ["Requires"]
|
deps = ["Requires"]
|
||||||
git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b"
|
git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b"
|
||||||
|
|
|
@ -7,10 +7,12 @@ version = "0.1.0"
|
||||||
FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
|
FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
|
||||||
Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0"
|
Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0"
|
||||||
Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc"
|
Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc"
|
||||||
|
Ranges = "eb7db99b-64ae-4b81-85c2-3439b6569b78"
|
||||||
VideoIO = "d6d074c3-1acf-5d4c-9a43-ef38773959a2"
|
VideoIO = "d6d074c3-1acf-5d4c-9a43-ef38773959a2"
|
||||||
|
|
||||||
[compat]
|
[compat]
|
||||||
FileIO = "1.17.0"
|
FileIO = "1.17.0"
|
||||||
Images = "0.26.2"
|
Images = "0.26.2"
|
||||||
Luxor = "4.2.0"
|
Luxor = "4.2.0"
|
||||||
|
Ranges = "0.1.0"
|
||||||
VideoIO = "1.1.1"
|
VideoIO = "1.1.1"
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
using Luxor, Ranges
|
||||||
|
include("image.jl")
|
||||||
|
|
||||||
|
function sample(m, u, v)
|
||||||
|
width, height = size(m)
|
||||||
|
i = trunc(Int, u * width)
|
||||||
|
j = trunc(Int, v * height)
|
||||||
|
if i <= 0 || i > width || j <= 0 || j > height
|
||||||
|
return 0.
|
||||||
|
else
|
||||||
|
return greyscale(m[i,j])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function is_stable(m, z1, z2, z)
|
||||||
|
iter = 1000
|
||||||
|
x1 = real(z1)
|
||||||
|
y1 = imag(z1)
|
||||||
|
x2 = real(z2)
|
||||||
|
y2 = imag(z2)
|
||||||
|
c = z
|
||||||
|
for _ in 1:iter
|
||||||
|
if abs(z) > 2
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
# Sample the image at position z
|
||||||
|
u = (real(z) - x1) / (x2 - x1)
|
||||||
|
v = (imag(z) - y1) / (y2 - y1)
|
||||||
|
f = sample(m, u, v)
|
||||||
|
if f == 0
|
||||||
|
z = z^2
|
||||||
|
else
|
||||||
|
z = z^2 + c
|
||||||
|
end
|
||||||
|
end
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
function mandel(m, z1::Complex, z2::Complex)
|
||||||
|
width, height = size(m)
|
||||||
|
buffer = zeros(ARGB32, width, height)
|
||||||
|
for (i, x) in enumerate(range(real(z1), real(z2), width))
|
||||||
|
for (j, y) in enumerate(range(imag(z1), imag(z2), height))
|
||||||
|
t = greyscale(m[i,j])
|
||||||
|
s = is_stable(m, z1, z2, x + y * im)
|
||||||
|
if t > 0.5
|
||||||
|
if s
|
||||||
|
buffer[i,j] = colorant"white"
|
||||||
|
else
|
||||||
|
buffer[i,j] = colorant"blue"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if s
|
||||||
|
buffer[i,j] = colorant"red"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return buffer
|
||||||
|
end
|
|
@ -0,0 +1,8 @@
|
||||||
|
using Images
|
||||||
|
|
||||||
|
"""
|
||||||
|
Converts image to grayscale
|
||||||
|
"""
|
||||||
|
function greyscale(c::Images.RGB)::Real
|
||||||
|
return Real(c.r)
|
||||||
|
end
|
Loading…
Reference in New Issue