##### 27/11/2023

Today in Pwllycrochan Woods

- Home
- United Kingdom
- Colwyn Bay
- Makin' Magic Fractals

I became interested in fractals and fractal art when I first used "Fractint" in April 1999.

My Fractal Art studio is open at all times by appointment plus for special events such as Helfa Gelf (the North Wales Open Studios Art Trail).

Today in Pwllycrochan Woods

Just tried an idea out - modification of the multiplex.

Normally the squaring function rotates the magnitudes of Z and W in (Z,W) by the angle of the complex (magZ,magW) and rotates Z and W as complexes by their own angles and of course squares the magnitude of the whole.

In the modification Z and W themselves are also rotated by the angle of the magnitudes as the complex (magZ,magW).

This destroys the "bulbs" but I think the results are interesting ;)

I suspect there may be some very nice Julias to be had in particular.

Attached are images from Mandelbrots, z^2 whole, z^2 detail, z^4 whole, z^8 and z^8 detail.

From a somewhat modified bicomplex z^3+c Mandy.

"Amongst the Rings"

More Math play, rather pleased with this z^4+c Mandy - 3D slice using 4D math.

This one's using 3 angles plus modifiers - the latter could be applied generically to any formula.

Ultra Fractal code for the power (plain multiply is fairly straightforward, just multiply magniudes and add angles ;)

func angles(complex &z,complex &w)

complex t = z

if

t = z = flip(z)

endif

if

w = flip(w)

endif

if

z = w

w = t

t = z

endif

if

z = real(z)+flip(real(w))

w = imag(t)+flip(imag(w))

endif

float mz = |z|

float mw = |w|

float m = (mz + mw)^(0.5*)

float a1 = atan2(z)*(2.0*/ )

float a2 = atan2(w)*(2.0*/ )

complex t = m*(0,1)^(atan2(sqrt(mz)+flip(sqrt(mw)))*(2.0*/ ))

z = real(t)*(0,1)^a1

if

w = flip(imag(t))*(0,1)^a2

else

w = imag(t)*(0,1)^a2

endif

t = z

if

z = real(z)+flip(real(w))

w = imag(t)+flip(imag(w))

t = z

endif

if

z = w

w = t

endif

if

w = flip(w)

endif

if

z = flip(z)

endif

endfunc

Slight change - this is a z^2+c again, using:

__r__i__j

r__r__i__j

i__i__j_-r

j__j_-r_-i

With the addition that the magnitude due to squaring is forced to be correct - I wasn't expecting it to look like an iteration height map !!

And it is the Mandy from the Plates/Benoit render

See reply for reveal...

“Martian Space Station 2142”

In 2142 the state of the Mars Space Station (originally just designed as temporary living quarters for 12 in 2037) prompted us to realise that allowing growth of space residences by need rather than by design was a bad idea and there was indeed a need for town planning even in space.

This is actually from a z^2+c Mandelbrot using a true3D Math form given by the following unit vector multiplication table:

___r__i__j

r__r__i__j

i__i_-j_-r

j__j_-r__i

Originally I had the bottom-right “i” as negative trying to find a decent “true3D” Mandy, what happened when I tried the positive version was a tad unexpected ;)

Code for this from UF - input complex z and w but imag(w) always zero:

complex t = imag(z)*(imag(z)+2*flip(real(w))) ; i^2, 2ij

w = real(w)*(real(w)+2*flip(real(z))) ; j^2, 2rj

z = real(z)*(real(z)+2*flip(imag(z))) - imag(t) - flip(real(w)) ; r^2-2ij, 2ri-j^2

w = imag(w)+real(t) ; 2rj+i^2

Just change the sign of real(t) (i.e. i^2) on the last line for the other form ;)

Just realised something:

At heart we are all the primary part of the Mandelbrot Set. ;)

Been meaning to make and post these for literally years, so finally here are the augmented quaternions and reverse augmented quaternions - Mandelbrots from ^2 to ^9 with slices.

The gif starting with the thin z^2 Mandy is the reversed version, the set with the fatter z^2 is the "normal" one and is in the replies because I didn't realise FB only allows one gif per post.

Code for these, input complexes z and w:

Augmented:

float mz = |z|

float mw = |w|

if mz+mw>0

float m3 = sqr(imag(z))+mw

if m3>0

if mw>0

complex t = (real(z)+flip(m3=sqrt(m3)))^

complex u = ((imag(z)+flip(mw=sqrt(mw)))/m3)^

w = -imag(t)*imag(u)*(w/mw)^

z = real(t)+flip(imag(t))*real(u)

else

z = z^

endif

else

z = real(z)^

endif

endif

Reversed Augmented:

float mz = |z|

float mw = |w|

if mz+mw>0

m3 = mz+sqr(real(w))

if m3>0

complex t = ((m3=sqrt(m3))+flip(imag(w)))^

if mz>0

complex u = (((mz=sqrt(mz))+flip(real(w)))/m3)^

z = real(t)*real(u)*(z/mz)^

w = real(t)*imag(u)+flip(imag(t))

else

z = real(t)*flip(real(w)/abs(real(w)))^

w = real(t)*imag(u)+flip(imag(t))

endif

else

w = flip(imag(w))^

endif

endif

New fractal from playing with math again.

The math:

I tried splitting the imaginary to go 3D like this:

* r i j

r r i j

i i j -r

j j -r i

Which was intereting but I then converted it to 4D by using the above as the 3D "vector" (for i,j,k instead of r,i,j) in a quaternion style method such that the above * table gave the square of the vector but I also squared the main real plus the magnitude of the 3D vector as a complex and then scaled the vector to the magnitude of the imaginary from the complex.

The image is "I had too much to dream last night"

Music: https://www.youtube.com/watch?v=-xRRT92Fpgs

Just playin' - for those interested these are both bicomplexes but with extra rotation of (x,y)/(z,w) based on the magnitudes of each, one is bicomplex z^2+c with extra *3 rotation and the other is z^4+c with extra *5 rotation.

As displayed by FB for me the top one is "OMG call Health and Safety" and the other is "Ghosts in the Machine".

Another bit of Martian Flora from 2073.

This one using the (3D) reversed augmented quaternion math with an angle to avoid the /0 i.e. in UF code with z and w complex:

float a = atan2(z)*2.0*/

w = (cabs(z) + flip(real(w)))^

z = real(w)*(0,1)^a

w = imag(w)

It's my favourite version of the 'bulb math so far in terms of producing a 3D version of normal 'brots.

DLA on my car this morning ;)

From a z^8 Mandelbrot using a version of the "multiplex" but angles instead of unit vectors...

"Martian flora 2073"

This should run at 30fps on the latest iPads - am now generalising to allow Sierpinski buildings etc. - for Parys Technografx "i.Candy" on the iPad -> animating 3D fractals to sound from the mike.

Updating i.Candy with *3D* fractals to music for iPad - just working on the basic rendering atmo, here's some fun with a Menger ;)

"The Imperial Planetoid"

Full size version with full magnitude correction, using (x, mag(y.z)) and (mag(x,y),z) as 2 complexes...this is the z^8+c Mandelbrot.

Attached pic "The Imperial Planetoid" is an artificial mobile self-sufficient planetoid housing billions and was created using yet another version of 3D math...will post detail in a reply later ;)

Updating Parys Technografx "i.Candy" for iOS - currently just WIP - adding 3D fractals.

Test example using analytically found normal to the fractal DE surface for the lighting and also to speed up the DE stepping in cases where the viewing ray is close to a near parallel surface area.

In this render there are no backward correction steps or extra steps for accuracy etc.

View from running the wip version on one of the iPad simulators - unfortunately we don't yet have an actual "M1" iPad to test it on :(

Multiplex animation using the cross product (of points in each of the planes in 4D (Z,W) each as a user specified complex number and the current corresponding value from the iteration) to determine the sign of the magnitudes used as the complex for the top row in the multiplex tree.

Very jerky as it's a 360 rotate of the numbers used in just 50 frames (but would not be smooth anyway),

Here using the same point in W as in Z - the 2D cross-section is the 2D Mandy when the points are the same and at multiples of 90 degrees in their respective planes.

This is a view looking straight down on a z^6+c Multiplex Mandelbulb (the 3D is left-hand rule).

The astute will have noticed that the "reverse augmented quaternions" are just a different cut-down version of the "Multiplex"....however with the added extra of using signed magnitudes based on the current 4D cartesian value - something I ignored when playing with the multiplex math - it turns out that using a signed value on the magnitudes based on the current 4D value is much better, basically because although signs are sort-of preserved by the unit vectors, the lack of signs on the magnitudes for the full complex row restricts (at least the first) calculation to 180 degrees instead of 360.

I am now just rendering various tests using different methods of obtaining signs for the magnitudes, here's a result that's consistent across two or three methods....

"Lichen or Broccolli ?"

(Top of a ^4 Mandy)

^2+c Mandy using the "backwards" or "reversed" augmented quaternion maths with the sign of x used for the magniude in (mag(x,y),z)^power (along with the extra twist powerrot(x,y)), i.e. result from (x,y,z) is: (newmag*powerrot(x,y), newz)...as mentioned if z is zero then it's plain complex...and of course it is also plain complex if y is zero rather than z ;)

Using complex powerrot(x,y) is ((x,y)/mag(x,y))^power...in this case the signed magnitude is also used here.

It's quite clear that the ^2 is disconnected with an additional hard break (vertically (planar?) perpendicular to x near the Mandy's rear) but it's still my favourite 3D ^2+c so far ;)

Still playing with the sign of the magnitude in the "backwards" quaternions....

Currently trying out basing sign usage on the cross product (normal) of before and after values of (x,y) i.e. x1*y2-x2*y1, currently using changes in this to change the sign used for the mag. (Sometimes combined with other ideas atmo - still WIP)

Here's the top of one of the ^7 Mandy's using the cross-product method.

Latest try at "true 3D", using (x,y) and (mag(x,y),z)

Note to self....

https://www.ebay.co.uk/itm/254618476365?hash=item3b48719f4d:g:t8kAAOSwfB9g3DT4

https://www.ebay.co.uk/itm/381695150684?_trkparms=ispr%3D1&hash=item58decdca5c:g:2PgAAOSwDcNf2yRT&amdata=enc%3AAQAGAAACoPYe5NmHp%252B2JMhMi7yxGiTJkPrKr5t53CooMSQt2orsSQuF9OYLb3wphIAOfpJK8RlewZrOqfB%252Bc6VAcE4u%252BmGoorjatXHBr6K3OtaWOX9uRwdvQJ8VWjhlDRRniTmCo7OpwJCiufyOXwh3pdTC6SEc0YBcjQngnVRTfmJ2e3VbdesVxx4ceWFQxEFuOeUhaF7O5tjSxIO37dvUGJppQ1i5WqNgaOkr6R3GKnCjs4CSFA4R0Tx6sSJiieLHKItQlWnnE4N0zkD7RoUwDvGR2ADhHI1KuN0%252FnQdRMf688LF5VAJSZYyMaH%252B1Q6UErcrp5bzIc8rrIJzWu47H7dxmRrdiD9F%252BjyrdKvXvxd8P%252FLfW3nVEeIkaEH4M3Hp2sUNpiTaO9zp7Pbu8lgaET65mfIQ6w04oV%252BuaPk9I5xTOaJG5MboY6kgvwpm8y9zxqRbQuVNmaHVMd1cKxEgoaJhFMLreY%252FHyfpybTrLQ6g%252FbFT664f6Av1FIbVGzE2ldrje4PZbwjyNTVDeyNGg%252F9s2We4tLT3TqPBoZZM541mNHD4M%252BF9Se3OPuy8A8uijfLfnXmTt5fJEV5nq90mxHsehA8dlLO0onU%252B5zI7UL%252FWxRr9cgaoEBr4Oy%252FfZT9ampcrIJxrblfDiuy5KWE6GArC7RG%252Ff22uvS1HDIRWzxEqjLKRZbBtqNTjuN2l7x8mDrw3p0PbWswVatuW8JDoodjL4hYNwPa7W22u4suD%252B0qnTB%252Bela8G9iNSJd42s7PIGbh63M7TEDcIkv8LN%252Fx0uFD%252FUYVWUW1B8n2tzGhssHqVxJwsU1D8Ln3AsTrKl5LpMh6RWmQ0iS6rwRTfJNe4z5myUHWEDsCFyMa308PspQU4MueIcEMxYO3sfjHETawHE3R98NYvQ%253D%253D%7Cclp%3A2334524%7Ctkp%3ABFBMlr6K3uZf

Available in portrait or landscape colour, black and white or sepia. -A0 40"x30". -A2 20"x16". -A3 16"x12". -A4 16"x12". Object Wall Stickers. -A1 30"x20". How to Apply.

Was just browsing some older work and this caught my eye, so hope you like ;)

"The Nest" (2007, all layers same place, same z^2+c Julia)

New 3D power function.

This uses just two multiplies/powers, one for (x,y) in (x,y,z) and one for (m,z) in (x,y,z) where m is the magnitude of (x,y) however the *sign* of m which changes under multiply/power is *remembered* for that calculation throghout but for normalising the (x,y) it's used unsigned.

func newpow(complex &z, complex &w, bool &ms)

float t = |z|

if t>0

if ms

t = -sqrt(t)

else

t = sqrt(t)

endif

w = (t+flip(real(w)))^

if real(w)

Next test - try a max/min sort of all axes i.e. so the "real" is always the max or the min for multiplies/powers....with or without order restoration.

5 Llannerch Road West

Colwyn Bay

LL284BB

http://www.fractalgallery.co.uk/, http://website.lineone.net/~dave_makin/

Be the first to know and let us send you an email when Makin' Magic Fractals posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Send a message to Makin' Magic Fractals:

“Martian Space Station 2142” In 2142 the state of the Mars Space Station (originally just designed as temporary living quarters for 12 in 2037) prompted us to realise that allowing growth of space residences by need rather than by design was a bad idea and there was indeed a need for town planning even in space. This is actually from a z^2+c Mandelbrot using a true3D Math form given by the following unit vector multiplication table: ___r__i__j r__r__i__j i__i_-j_-r j__j_-r__i Originally I had the bottom-right “i” as negative trying to find a decent “true3D” Mandy, what happened when I tried the positive version was a tad unexpected ;) Code for this from UF - input complex z and w but imag(w) always zero: complex t = imag(z)*(imag(z)+2*flip(real(w))) ; i^2, 2ij w = real(w)*(real(w)+2*flip(real(z))) ; j^2, 2rj z = real(z)*(real(z)+2*flip(imag(z))) - imag(t) - flip(real(w)) ; r^2-2ij, 2ri-j^2 w = imag(w)+real(t) ; 2rj+i^2 Just change the sign of real(t) (i.e. i^2) on the last line for the other form ;)

Been meaning to make and post these for literally years, so finally here are the augmented quaternions and reverse augmented quaternions - Mandelbrots from ^2 to ^9 with slices. The gif starting with the thin z^2 Mandy is the reversed version, the set with the fatter z^2 is the "normal" one and is in the replies because I didn't realise FB only allows one gif per post. Code for these, input complexes z and w: Augmented: float mz = |z| float mw = |w| if mz+mw>0 float m3 = sqr(imag(z))+mw if m3>0 if mw>0 complex t = (real(z)+flip(m3=sqrt(m3)))^@mpwr complex u = ((imag(z)+flip(mw=sqrt(mw)))/m3)^@mpwr w = -imag(t)*imag(u)*(w/mw)^@mpwr z = real(t)+flip(imag(t))*real(u) else z = z^@mpwr endif else z = real(z)^@mpwr endif endif Reversed Augmented: float mz = |z| float mw = |w| if mz+mw>0 m3 = mz+sqr(real(w)) if m3>0 complex t = ((m3=sqrt(m3))+flip(imag(w)))^@mpwr if mz>0 complex u = (((mz=sqrt(mz))+flip(real(w)))/m3)^@mpwr z = real(t)*real(u)*(z/mz)^@mpwr w = real(t)*imag(u)+flip(imag(t)) else z = real(t)*flip(real(w)/abs(real(w)))^@mpwr w = real(t)*imag(u)+flip(imag(t)) endif else w = flip(imag(w))^@mpwr endif endif

This should run at 30fps on the latest iPads - am now generalising to allow Sierpinski buildings etc. - for Parys Technografx "i.Candy" on the iPad -> animating 3D fractals to sound from the mike.

Updating i.Candy with *3D* fractals to music for iPad - just working on the basic rendering atmo, here's some fun with a Menger ;)

Updating Parys Technografx "i.Candy" for iOS - currently just WIP - adding 3D fractals. Test example using analytically found normal to the fractal DE surface for the lighting and also to speed up the DE stepping in cases where the viewing ray is close to a near parallel surface area. In this render there are no backward correction steps or extra steps for accuracy etc. View from running the wip version on one of the iPad simulators - unfortunately we don't yet have an actual "M1" iPad to test it on :(

Multiplex animation using the cross product (of points in each of the planes in 4D (Z,W) each as a user specified complex number and the current corresponding value from the iteration) to determine the sign of the magnitudes used as the complex for the top row in the multiplex tree. Very jerky as it's a 360 rotate of the numbers used in just 50 frames (but would not be smooth anyway), Here using the same point in W as in Z - the 2D cross-section is the 2D Mandy when the points are the same and at multiples of 90 degrees in their respective planes. This is a view looking straight down on a z^6+c Multiplex Mandelbulb (the 3D is left-hand rule).

^2+c Mandy using the "backwards" or "reversed" augmented quaternion maths with the sign of x used for the magniude in (mag(x,y),z)^power (along with the extra twist powerrot(x,y)), i.e. result from (x,y,z) is: (newmag*powerrot(x,y), newz)...as mentioned if z is zero then it's plain complex...and of course it is also plain complex if y is zero rather than z ;) Using complex powerrot(x,y) is ((x,y)/mag(x,y))^power...in this case the signed magnitude is also used here. It's quite clear that the ^2 is disconnected with an additional hard break (vertically (planar?) perpendicular to x near the Mandy's rear) but it's still my favourite 3D ^2+c so far ;)

This is z^2 to z^12 for the new multiplex variant but with flip(conj( rather than just flip( Next step is find the optimum way to calculate this ;)

Here are the z^2 to z^12 in steps of .5 using the variant of the multiplex in this case just using "w = flip(v)*w". The flip(conj(v)) version is cooking as I write......