News: Visit the official fractalforums.com Youtube Channel

The All New FractalForums is now in Public Beta Testing! Visit FractalForums.org and check it out!

 Pages: [1] 2   Go Down
 Author Topic: Formula?  (Read 5908 times) Description: 0 Members and 1 Guest are viewing this topic.
lkmitch
Fractal Lover

Posts: 238

 « on: November 19, 2009, 07:04:37 PM »

Ok, I freely admit that I've only skimmed the original thread, and may have missed parts or misunderstood.  So now that we have a fresh, sparkly new board and thread, let me ask here:

What is the 3D Mandelbulb formula, in algebra (i.e., not code or implementation specific)?  And why, in words, is this THE 3D analog to the standard 2D Mandelbrot set?

Thanks, and I promise to pay better attention,
Kerry
 Logged
David Makin
Global Moderator
Fractal Senior

Posts: 2286

 « Reply #1 on: November 19, 2009, 07:40:58 PM »

Hi Kerry, first off I don't think Daniel White (twinbee) or Paul Nylander (bugman) have actually claimed it to be *the* 3D analog of the 2D Mandelbrot, it's just that Daniels investigations (see beginning of *the* thread) which produced something like what we're looking for in the case of z^2+c produced the startling results at higher "power"/degree as discovered by Paul.

As to what is it, well see Paul's post of his latest suggestion for a "correct" version of the formula:

http://www.fractalforums.com/3d-fractal-generation/true-3d-mandlebrot-type-fractal/msg8680/#msg8680

If that's not sufficiently algebraic I'm not sure exactly what you're after, here's the same thing described in a mix of complex/real form as could be coded in UF or other software that handles complex, though this is less optimum even than the trig version in some cases (depending how the compiler handles ^@mpwr):

Code:
ztemp = ((r=cabs(zri)) + flip(zj))^@mpwr
zri = real(ztemp)*(zri/r)^@mpwr + cri
zj = imag(ztemp) + cj
 Logged

The meaning and purpose of life is to give life purpose and meaning.

http://www.fractalgallery.co.uk/
"Makin' Magic Music" on Jango
fractalrebel
Fractal Lover

Posts: 211

 « Reply #2 on: November 19, 2009, 09:26:28 PM »

Kerry,

A UF 5 version is in reb.ulb (need the latest update to see it) If you do a search for spower at the top of the file the search will take you right to it.
 Logged

fractalrebel
Fractal Lover

Posts: 211

 « Reply #3 on: November 19, 2009, 10:01:50 PM »

Kerry,

Here is an example of z^5 + c rendered in Ultrafractal.
 Mandel5.jpg (128.64 KB, 640x640 - viewed 595 times.) Logged

cKleinhuis
Fractal Senior

Posts: 7044

formerly known as 'Trifox'

 « Reply #4 on: November 19, 2009, 11:02:20 PM »

@ron, where (the heck  ) do i increase the bulb iteration depth ?!

 Logged

---

divide and conquer - iterate and rule - chaos is No random!
cKleinhuis
Fractal Senior

Posts: 7044

formerly known as 'Trifox'

 « Reply #5 on: November 19, 2009, 11:43:53 PM »

@ron, additionally, i was browsing through your methods, with the goal of implementing an "alternated bulb" , i see
you are using the base class "Quat" as formula base class, i have some questions about it

for the alternate method i would like to know when a formula is first used in an iteration loop ( for reseting a counter ), or
the current iteration depth value ...

have you ever thought about using the quat class for more simple functions, like a generic add or mul? , i wanted to start, but stopped
because i have not the right math book at my fingertips for reference of derivative functions ... but i believe it could be done so
that it would work in many cases ...
 Logged

---

divide and conquer - iterate and rule - chaos is No random!
fractalrebel
Fractal Lover

Posts: 211

 « Reply #6 on: November 20, 2009, 04:48:58 AM »

@ron, additionally, i was browsing through your methods, with the goal of implementing an "alternated bulb" , i see
you are using the base class "Quat" as formula base class, i have some questions about it

for the alternate method i would like to know when a formula is first used in an iteration loop ( for reseting a counter ), or
the current iteration depth value ...

have you ever thought about using the quat class for more simple functions, like a generic add or mul? , i wanted to start, but stopped
because i have not the right math book at my fingertips for reference of derivative functions ... but i believe it could be done so
that it would work in many cases ...

The Quat class is called such because it was originally for quaternion plugins, which was almost immediately broadened to include hypercomplex, juliabrots, and most recently the twinbee formula. Don't let the name fool you. Its really a wrapper to deal with 3D/4D objects and puts no conditions on the mathematics other than representing a 3D/4D number as a vector. The wrapper has built in functions for conversion between the vector representation and complex numbers. The actual math is carried out in other classes. The nested loops you are looking at have a counter reset. The inner loop is the actual iterations loop and is the iteration depth. The outer loop is for stepping in towards the fractal surface.

I hope this helps and makes some sense.
 Logged

fractalrebel
Fractal Lover

Posts: 211

 « Reply #7 on: November 20, 2009, 04:54:09 AM »

There is a class in reb.ulb called QH which holds a large collection of static functions for quaternion and hypercomplex operations, such as multiply, power, exponential, log, etc. I recently added a new class called MD which has the static functions for power and multiply for the twinbee method and for Dave Makin's 4D number approach.
 Logged

s31415
Conqueror

Posts: 110

 « Reply #8 on: November 20, 2009, 05:02:01 AM »

To Kerry:

From what I understood (someone correct me if I'm wrong), you switch to spherical coordinates, square the radius and double the two angles (without caring if you get out of the usual range for theta), and switch back to cartesian coordinates. Then you perform a parity transformation. See this post:
http://www.fractalforums.com/3d-fractal-generation/true-3d-mandlebrot-type-fractal/msg8726/#msg8726
I could get an answer about how crucial the parity transformation is. Did any body tried to drop it?
Note that Jos Leys answered to my second question in the post above, look a little bit further in the thread.

Best,

Sam
 Logged

s31415
Conqueror

Posts: 110

 « Reply #9 on: November 20, 2009, 05:02:56 AM »

I could get...

I meant "I couldn't..."
 Logged

fractalrebel
Fractal Lover

Posts: 211

 « Reply #10 on: November 20, 2009, 05:13:06 AM »

To Kerry:

From what I understood (someone correct me if I'm wrong), you switch to spherical coordinates, square the radius and double the two angles (without caring if you get out of the usual range for theta), and switch back to cartesian coordinates. Then you perform a parity transformation. See this post:
http://www.fractalforums.com/3d-fractal-generation/true-3d-mandlebrot-type-fractal/msg8726/#msg8726
I could get an answer about how crucial the parity transformation is. Did any body tried to drop it?
Note that Jos Leys answered to my second question in the post above, look a little bit further in the thread.

Best,

Sam

Not quite (at least with my method), but close. For example, if I want the z^8 + c mandelbulb, The radius is taken to the 8th power and the two angles are multiplied by 8 before conversion back to cartesian coordinates.
 Logged

s31415
Conqueror

Posts: 110

 « Reply #11 on: November 20, 2009, 04:00:16 PM »

Not quite (at least with my method), but close. For example, if I want the z^8 + c mandelbulb, The radius is taken to the 8th power and the two angles are multiplied by 8 before conversion back to cartesian coordinates.

Of course, my explanation was only to "square" a vector. I also forgot to mention that the two angles are the usual azimut running from 0 to 2pi and the elevation, running from -pi/2 to pi/2 and equal to zero at the equator.

But this is interesting in the case of the power 8, you don't use any parity transformation?

Sam
 Logged

fractalrebel
Fractal Lover

Posts: 211

 « Reply #12 on: November 20, 2009, 07:32:09 PM »

Not quite (at least with my method), but close. For example, if I want the z^8 + c mandelbulb, The radius is taken to the 8th power and the two angles are multiplied by 8 before conversion back to cartesian coordinates.

Of course, my explanation was only to "square" a vector. I also forgot to mention that the two angles are the usual azimut running from 0 to 2pi and the elevation, running from -pi/2 to pi/2 and equal to zero at the equator.

But this is interesting in the case of the power 8, you don't use any parity transformation?

Sam

Back in one of the earlier threads there is a statement that with the corrected twinbee formula, no parity transformation is needed.
 Logged

fractalrebel
Fractal Lover

Posts: 211

 « Reply #13 on: November 20, 2009, 07:36:04 PM »

Forgot to mention, I don't worry about effects of the elevation outside its normal range. I some of my early coding, I took that into account, and it didn't seem to have any effect on the image.
 Logged

jehovajah
Global Moderator
Fractal Senior

Posts: 2749

May a trochoid in the void bring you peace

 « Reply #14 on: November 23, 2009, 02:48:31 PM »

Quote from: David Makin on November 03, 2009, 12:56:44 AM
Hi all, you may remember I had a 3D based suggestion for a "true 3D" Mandy using the following:

*  |    r    i    j
-----------------
r  |    r    i    j
i  |    i   -r  -j
j  |   j   -j   -r

Which gives a square of (x,y,z):

new x = x^2 - y^2 - z^2
new y = 2*x*y
new z = 2*z*(x-y)
==========================================================================

I attempt to be explicit and thorough.
*  x       iy     jz     -iy    -jz
------------------------------------
x:     x2   xiy   xjz   -xiy   -xjz
iy:   iyx   -y2   iyjz  -iyiy  -iyjz
jz:    jzx   jziy   -z2  -jziy   -jzjz
-iy:   -iyx  -iyiy -iyjz  -y2  -iy(-jz)
-jz:   -jzx  -jziy -jzjz  -jz(-iy)  -z2

The rules are:
i2 = j2 = (-j)2 = (-i)2 = -1

-ii = -jj = +1

The manipulations are:

yix = yxi = xyi = xiy = ixy = iyx

zjx = zxj = xzj = xjz = jxz = jzx

-yix = -yxi = -xyi = -xiy = -ixy = -iyx

-zjx = -zxj = -xzj = -xjz = -jxz = -jzx

double operator manipulations non commutative :

ziyj =zyij = yzij = yizj = iyzj = [iyjz = -iy(-jz)] = ijyz = ijzy= izjy

+y2 = -y2i2 = -yiyi = -iy2i = [-iyiy = iy(-iy)] = -i2y2 = +y2
-ziyj = -zyij = -yzij = -iyzj = [-iyjz = iy(-jz)] = -ijyz = -ijzy = -izjy

yjzi = yzji = zyji = zjyi = jzyi = [jziy = -jz(-iy)] = jizy = jiyz = jyiz

-yjzi = -yzji = -zyji = -zjyi = -jzyi = [-jziy = jz(-iy)] = -jizy = -jiyz = -jyiz

+z2 = -z2j2 = -zjzj = -jz2j = [-jzjz = jz(-jz)] = -j2z2 = +z2

summary of main manipulations:
yzij  = ijyz        (±jz)2 = -z2      yxi = iyx
-yzij = -ijyz      (±iy)2 = -y2     zxj = jzx
yzji  = jiyx     -(iy)2 = +y2     -yxi = -iyx
yzji  = jiyz     -(jz)2  = +z2     -zxj = -jzx
-yzji   = -jiyz

So (x + iy +jz)2 gives the following parts

x2 + (iy)2 + (jz)2

i(xy + yx)

j(xz + zx)

yz(ij + ji)

So for the function the last term which i am calling the handedness term is decided by the programmer.

For the geometrical space mandelbrot iteration

newx =x2 - y2 - z2

newy = 2xy

newz = 2xz

handedness term affects either x or y or z or 2 out of the 3 and has magnitude yz so:
if ij / ji

newyz =y.z.

for the handedness term
if ij = ji
newyz = 2yz

I will suggest in another post how the handedness term might be applied but i think there is enough here for you to play with.

Report to moderator    81.108.14.116

May you delight in orgasms and know peace joy vigorous health and feelings of grat
 « Last Edit: November 27, 2009, 06:15:07 AM by jehovajah, Reason: index change » Logged

May a trochoid of ¥h¶h iteratively entrain your Logos Response transforming into iridescent fractals of orgasmic delight and joy, with kindness, peace and gratitude at all scales within your experience. I beg of you to enrich others as you have been enriched, in vorticose pulsations of extravagance!
 Pages: [1] 2   Go Down