# Julia Explorer with propane

I have just released a new version of propane, and found this dependant application `Julia Explorer`

by Jonathon Scott (aka jscottpilgrim). Which fortunately still works with my latest release. I added the gui.

#### A video of my desktop

The video explorer inspired me to have a go at the ‘Julia Set’ challenge at Rosetta Code were I used the ruby built in Complex. I tried wrote my own Complex class to see if it would be more efficient (not much more so it seems) but it was an interesting exercise:-

```
# frozen_string_literal: true
# My Attempt to create a more efficient Complex
class MyComplex
attr_accessor :real, :imag
def initialize(real, imag)
@real = real
@imag = imag
end
def square
orig_real = real
@real = real**2 - imag**2
@imag = 2 * orig_real * imag
self
end
# adds a given complex number
def +(other)
@real += other.real
@imag += other.imag
self
end
# computes the magnitude
def abs
Math.hypot(real, imag)
end
def to_s
if imag.positive?
return format('(%<real>.2f+%<imag>.2fi)', real: real, imag: imag)
end
format('(%<real>.2f%<imag>.2fi)', real: real, imag: imag)
end
end
```

Here’s my ‘julia sketch’ code:-

```
load_library :my_complex
attr_reader :max_iter
CONST = MyComplex.new(-0.835, -0.2321)
def settings
size(640, 480)
end
def setup
sketch_title 'Julia Set'
@max_iter = 360
color_mode HSB, 360, 100, 100
load_pixels
end
def draw
grid(width, height) do |x, y|
i = max_iter
z = MyComplex.new(map1d(x, 0..width, -1.4..1.4), map1d(y, 0..height, -1.0..1.0))
while z.abs < 2 && i -= 1
z = (z.square + CONST)
end
pixels[x + width * y] = color((360 * i) / max_iter, 100, i)
end
update_pixels
fill 0
text CONST.to_s, 560, 400
save_frame data_path('julia.png')
no_loop
end
```

Which I used to explore some of the classic julia sets (see Wikipedia):-