kloniwotski
Forums Newbie
Posts: 3
|
|
« Reply #15 on: June 20, 2013, 01:40:41 PM » |
|
Hi, I've wondered for a long time about the relevance of GA to extending fractals like the Mandelbrot into 3 dimensions (since I first read about the mandelbulb on this site). Having little mathematical skill, I haven't been able to post anything before. But today I noticed a thesis: http://www2.eng.cam.ac.uk/~rjw57/pdf/r_wareham_pdh_thesis.pdfthat proposes a simple extension of the operation of squaring a complex number to "squaring" a vector in n dimensions courtesy of the power of GA. (It also gives a pretty good introduction to GA, as far as I can tell.) The extension is (I think) : v goes to ve 1v (using the geometric product) for some basis vector e 1 (though I'd encourage anyone interested to look at the pdf rather than go off my probably incorrect relaying of it!) pseudocode is provided to draw the generalised Mandelbrot: Require: Set I of vectors associated with image points imax := maximum number of iterations e1 := a unit vector in some preferred direction for all c in I do r := c i := 0 while (r * r) < 4 and i < imax do r := re1r + c i := i + 1 end while set pixel c to colour i end for
(The expression "re1r + c" presumes some implementation of the geometric product, I expect) From looking at the illustration given in the pdf, this allows calculation of a slice through a 3D mandelbrot, presumably depending on the set of "image points". In the illustrations, 3 orthogonal planes are shown. It looks like a 3D structure *might* be able to be rendered with a voxel approach. I've tried to search for any reference to this thesis on the fractalforums site, but came up with nothing, so I wondered if more mathematically astute members might comment on the relevance or otherwise to 3D mandelbrot extensions? I'd be very interested in this as it's something I've been wondering about (occasionally) for years! (While searching, though, I did find this page http://www.physicsforums.com/showthread.php?t=206844 where twinbee is recommended to look at a paper whose authors include the writer of the thesis, while still working towards the original mandelbulb, it seems!) ("sub" button isn't working for me in preview, btw. "e 1" is meant to be e with a subscript 1, if it doesn't appear that way.)
|
|
|
Logged
|
|
|
|
kram1032
|
|
« Reply #16 on: June 20, 2013, 01:56:15 PM » |
|
I don't have the time right now to look through this but as far as a quick glance told me, it looks amazing. Thanks for sharing that!
|
|
|
Logged
|
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #17 on: June 20, 2013, 03:06:05 PM » |
|
The squaring part is easy as I'm poorly explaining here: http://www.fractalforums.com/new-theories-and-research/do-quaternions-need-revisiting/. From a quick skim it looks like the author is missing the geometric connection and could be using a rotor in GA. The only reason I can see to jump to conformal GA would be to perform folds on some conformal mapping or to build a fractal from the various higher order supported primitives.
|
|
|
Logged
|
|
|
|
kloniwotski
Forums Newbie
Posts: 3
|
|
« Reply #18 on: June 20, 2013, 03:37:36 PM » |
|
Hi Roquen, I'm guessing you're referring to qpq* where q = sqrt(pr*)
about the squaring. Unfortunately (did I mention I'm a math noob?) I don't know what the * in this is. "p" and "q" are quaternions, right? I think Mr Wareham is doing something a bit different to this, not involving rotors, but as I may have mentioned, I'm a bit out of my depth! From what I understand, he shows a mapping from vectors in R 2 to numbers in the complex plane r => C(r), and then from that shows that C(re 1r) = (C(r)) 2. Since the dimensionality / coordinates don't enter into his mapping, the restriction that r is in R 2 is not required, so that the re 1r operation should be "geometrically analogous" to squaring a complex number for any dimensionality of r. I'm not sure, but it seems the conformal apparatus isn't necessary for the section of the thesis to do with extending the Mandelbrot. I think the important thing (which I think I stated badly) is that this isn't the same as "squaring a vector in R n", but is rather "doing something with a vector in R n that is like squaring a complex number", since it is the special things that happen when squaring complex numbers that produce interesting results in the m-set. Now for all I know, he may have just faked his picture of the 3D Mandelbrot and his formula might be piffle, but I don't think it's quaternionic anyhow Again I feel the need to plead my lack of mathematical ability - I could well be wrong, but that's how I understood it. Thanks for the link.
|
|
« Last Edit: June 20, 2013, 03:40:54 PM by kloniwotski, Reason: Forgot stuff. »
|
Logged
|
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #19 on: June 20, 2013, 04:13:00 PM » |
|
Every person on the planet is a math n00b. Looking at Fig 6.9 the method certainly appears to be equivalent to performing a proper rotation. It also not succeeding in breaking out of the plane.
|
|
|
Logged
|
|
|
|
kloniwotski
Forums Newbie
Posts: 3
|
|
« Reply #20 on: June 20, 2013, 04:40:57 PM » |
|
Looking at Fig 6.9 6.10, right? the method certainly appears to be equivalent to performing a proper rotation. It also not succeeding in breaking out of the plane.
Well, a rotation plus a dilation, it seems. (I hadn't got that far before I posted, in my excitement ) The diagram is in 2D, but it looks like for z in R 3 it might be the plane in which both e 1 and z lie, which of course wouldn't be the same plane for all z. Edit: Um, in that case it would just be a boring rotated Mandelbrot, would it? Ah well, I had such hopes... :-/
|
|
« Last Edit: June 20, 2013, 04:52:06 PM by kloniwotski, Reason: belated realization »
|
Logged
|
|
|
|
Alef
|
|
« Reply #21 on: June 29, 2013, 07:45:44 PM » |
|
Tried to do a fractal using vector cross product. I was looking into old book about math of 1967 so then I don't need to burden myself with cross product being bivector.
If creating another vector Z'=Z+Seed(x,y,z) or Z`=Z+C(x,y,z) cross product would be meaningfull. So cross product of A1(X1,Y1,Z1) and A2(X2,Y2,Z2). | Y1 Z1 | Z1 X1| X1 Y1| A1xA2=( | | , | , | ) | Y2 Z2 | Z2 X2| X2 Y2|
So X3= Y1xZ2 - Y2xZ1 Y3= X2xZ1 - X1xZ2 Z3= X1xY2 - X2-Y1
Then fractal formula of Z = ZxSeed +Pixel would be: Zx=real(z); Zy=imag(z); Zz=imag(z); Cx=real(pixel); Cy=imag(pixel); Cz=imag(pixel); Sx=real(seed); Sy=imag(seed); Sz=imag(seed);
Z2x= Zy*Sz - Sy*Zz + Cx; Z2y= Sx*Zz - Zx*Sz + Cy; Z2z= Zx*Sy - Sx*Zy + Cz;
z=quaternion (Z2x, Z2y, Z2z);
But result was simple as formula. In 3D just something like absolutely smooth stick and in 2D something not great. Don't have pics becouse there were nothing, but realy then it's more simple than quadratic in complex numbers.
|
|
|
Logged
|
fractal catalisator
|
|
|
Fracturbator
|
|
« Reply #22 on: June 30, 2013, 03:05:39 AM » |
|
This is a very interesting thread, people - I really want to set aside some time to check all this out when my day-job settles down a bit.
|
|
|
Logged
|
|
|
|
kram1032
|
|
« Reply #23 on: July 09, 2013, 05:51:27 PM » |
|
Ok, so given a vector r=a x + b y + c z and a unit-basis-vecor e, say e=y The algorithm given in the paper very straight-forwardly is: r² := r e r => (a x + b y + c z) y (a x + b y + c z) = (a xy + b + c zy) (a x + b y + c z) = -a² y + ab x + ac xyz + ab x + b² y + bc z - ac xyz + bc z - c² y = 2ab x - (a²-b²+c²) y + 2bc z + 0 xyz = And from there, you just go the classical route r²+s or z²+c or what ever you like. So: iterate: a=2ab+l b=-a 2+b 2-c 2+m c=2bc+n for a 2+b 2+c 2<4 I'm almost certain this already was tried, but unless I got some sign-error, that's what you get for normal euclidean space. The fact, that this is symmetric in a and c probably means, this will also be circularly symmetric, so it will likely be another revolution set. One cool thing the paper does, though, is also allowing for hyperbolic MSets. I'll try to extract that next. It's going to be a bit more complicated though, because it depends on a more complicated expression for distance, using hyperbolic instead of euclidean distance.
|
|
« Last Edit: July 09, 2013, 07:10:36 PM by kram1032 »
|
Logged
|
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #24 on: July 09, 2013, 08:07:45 PM » |
|
Like I thought: this yields an identical result to using quaternions. The "problem" is that the fold needs to happen in more than a single plane to do anything interesting. Does anyone have a pointer to an easy to use brute force illum framework I could use?
Indeed one advantage of GA is to change the signature to non-euclidean.
(edit: grammar mistake)
|
|
« Last Edit: July 09, 2013, 08:13:33 PM by Roquen »
|
Logged
|
|
|
|
kram1032
|
|
« Reply #25 on: July 09, 2013, 08:19:03 PM » |
|
Yeah, I'm not actually surprised about this result. It's kind of a property of rotations to always be in a single plane. You'd need rotations in more than one direction, which brings you to what typically would be a MBulb but ceases to be conformal. I'm still also thinking about that idea on having a non-conformal transformation that causes infinite smaller details which, however, are not the same as the bigger ones but rather details that keep changing. So somehow something that controlls the inevidable stretching in a way that manipulates it into aesthetically different structures. Zooming into that wouldn't give more and more variations of the same but rather just more and more variations. The hyperbolic MSet in 2 Dimensions looks like this, btw: The border of the circle is actually at infinity, which is why features seem to shrink towards the edges and to be bloated in the middle. However, if you zoom in, this distortion should become less and less notable. And due to it being different in hyperbolic space to first go straight and then go right vs. first go right and then straight (you'll end up at different points), you actually have two kinds of Julia-sets for the price of a single M-set. (All the details can be found in the paper)
|
|
« Last Edit: July 09, 2013, 08:21:39 PM by kram1032 »
|
Logged
|
|
|
|
kram1032
|
|
« Reply #26 on: July 11, 2013, 02:50:38 AM » |
|
Here's another experiment to try, if that hasn't been done yet: What if you vary the rotational direction each time? This is an example where, what would be the "real" axis alternates between the x-axis and the y-axis. Also, you're effectively doing two iterations with each iteration, because that's how I arrived at this closed form.
I differentiate the directions (x,y,z) from the coordinates (a,b,c) and the constant that is added, is denoted by (l,m,n):
x: a -> 2(a²-b²-c²+l)(2ab+m)+l y: b -> (2ab+m)²-(2ac+n)²-(a²-b²-c²+l)²+m z: c -> 2(2ab+m)(2ac+n)+n
If this ends up giving symmetry to one axis, it will be the unused z-axis. It would be straight forward to extend this to also treat the z-axis as "real" axis from time to time, which would push the iteration count one up.
If you prefer to do the two iterations seperately instead, you'll just have to add in some bit that knows, which type of iteration to take. The split iterations would be:
odd iterations:
x: a -> a²-b²-c²+l y: b -> 2ab+m z: c -> 2ac+n
even iterations:
x: a -> 2ab+l y: b -> -a²+b²-c²+m z: c -> 2bc+n
This should at least break the circle symmetry. It's likely that something like this was tried too, already, but I can't quite recall.
It would also be easy to extend this to, say, a tetrahedral version, where you alternate over four different axes that correspond to a tetraheder.
|
|
« Last Edit: July 11, 2013, 02:52:18 AM by kram1032 »
|
Logged
|
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #27 on: July 11, 2013, 08:41:48 AM » |
|
This is exactly falling into the same kind of reasoning I was working on in the quaternion thread. This is doubling the angle wrt the positive x direction & the positive y, which break the points out of being bound to a single plane.
|
|
|
Logged
|
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #28 on: July 11, 2013, 11:19:25 AM » |
|
|
|
|
Logged
|
|
|
|
kram1032
|
|
« Reply #29 on: July 11, 2013, 11:38:15 AM » |
|
So your version tries to do this in a single iteration? Also nice. I suppose, I could do this too, by just not adding the constant right away as well as choosing the square-root of a vector, rather than the vector itself... But something tells me, that would just be the same as having the whole thing be applied at an angle, rather than forcing two separate rotations. I might be wrong though. Your version lools a bit different though.
|
|
|
Logged
|
|
|
|
|