Edwin, I found your observations concerning the number of degrees of freedom in the different viewing spaces of the Julibrot to be _extremely_ thought provoking; I'll try to answer your queries based on what I found on closer examination of this issue, but I'm not yet certain. Also, having to deconstruct the mapping between these two spaces did lead me to speculate about what might be an important process when viewing fractal objects. I will respond in-line: [...snip my initial explanation of viewing the Julibrot object in C2 space instead of R4 space...]
Hiram,
Your approach to specifying a slice of a 4D object is very interesting. I'm not really able to say whether it works or not - my geometry's a bit hazy when it comes to this sort of thing.
I expect were all intuitively hazy on geometry in spaces with complex bases; from what I understand the human brain grasps depth perception through a "hologramatic" way, ie. we're wired to think about things as we perceive them-- arguably mostly in R3. I say "arguably" because color perception seems also to be normally three dimensional and I've wondered about the possibility of viewing mathematical objects with color and spatial dimensions treated as equivalent axes, ie. R6, and doing basis transformations in that space and then look at the object from the redefined view. Still, because we can't really visualize such spaces I think we have to fall back on mathematical tools to confirm or falsify the properties. My admittedly cursory look at this has shown that most geometrical properties hold when extending from R2 to C2, eg. a straight line can be parameterized by an anchor point, a direction and a parameter of variation, or that on that "line" (which we would probably think of as a plane in the C2 case because it has 2 degrees of freedom) there is exactly one point that either is the origin or has the property that a vector from the origin to the point is orthogonal to every vector generated by drawing from that point to any other point on the line (or "plane"). I obviously can't say "a single closest point" because the complex are unordered, but restated as orthogonality the relation holds, and according to my results all of the relations that matter for taking linear slices also hold.
However it seems to me that you don't have enough parameters to specify any view in R4.
In a certain sense that's true. There are several implicit questions in such a statement that have to be separated before it can be addressed. First, do you mean any view, or any linear view, and if the latter, linear in which space? Second, if we answer the first question, why is it necessary to view the slices of the R4 image of the Julibrot in C2 in order to say that we can view all linear slices of the Julibrot-- is R4 (rather, should it be) the natural or canonical domain for the Julibrot object? And third, most interestingly, regardless of whether we should map between C2 and R4, what happens to the slice when we do? Concerning the first question, if we don't constrain the slices to be linear then it's trivial that every slice in one of the spaces can map one-to-one with a slice in the other, since there are 4 real components uniquely associated with any given point in either space. A slice is nothing other than an arbitrary set of points in one of the spaces. The number of families of slices is infinite, so I assume we're talking about linear slices only, though curved slices generated by well known formulae are reasonable too. Concerning the second, my contention is, and maybe I didn't make the point clearly enough before, that it is not necessary to map all the R4-linear slices to C2 to say that we can view all the linear slices of the Julibrot object. The quality of linearity has to be associated with some particular space before it has meaning, and I am saying that the canonical space for viewing the Julibrot object is C2, for the simple reason that its generating process is complex in two variables, not real in four variables. IOW, if we want to look at linear slices the quality of linearity has to be defined on some space; in some sense that is a subjective choice, but I maintain that the canonical choice for that is same space as the generating process itself, in this case C2 and not R4. It is not meaningless to require such a choice: I can imagine several different kinds of space with four degrees of freedom in components where linearity of a slice would not be preserved when mapping from one to the other. It's just that the images might be nonlinear curves, plausibly even disconnected, on the other end. Regarding the third question, I don't know precisely what the mapping does at this point. Definitely some of the planes in R4 map into nonlinear curves in C2. Their form (product terms of the coordinates) suggests to me they are a subset of the hyperboloids in C2. If we take C2 as the natural space for the Julibrot object, its image in R4 is stretched and distorted so that some curved surfaces are flattened into planes. Unfortunately the only approach I know to pin down the mapping is write an equivalent (I mean use same general method of generating slice) general slicing algorithm in each and then trying to figure out appropriate changes of variable to go from one to the other. The C2 case is easy, but the general R4 planes are tedious. I did manage to come up with one for fractint, copied below, though it is not efficient (I mean by this that it uses more than the minimum number of degrees of freedom, or that two different sets of parameters can generate the same slice). I haven't yet figured out how to write the C2 version generating the same real coefficients (associating (x,y,z,w)<->(x+yi,z+wi)).
I think you have p1, p2 and (implicitly) #pixel = 6 real parameters. However it takes 6 real parameters to uniquely specify a location + an orientation in 3D (or R3, as you put it) (x,y,z,yaw,pitch,roll). So I can't see how 6 would be sufficient in R4 - surely more information is required. Does your C2-based disallow some orientations which are possible in R4?
That's what I suspected at first too. But it turns out to be more prosaic than that. As I tried to state above, planes in one space have curvature when mapped into the other. It just looks like a stretching for some parts of the slices, though topology is _apparently_ maintained. I include a .par with this message that shows what looks very much like stretching of a mostly M-like section of the Julibrot on a hyperboloid surface (apparent stretching in more than 2 directions). This was rendered from a planar slice in R4, which I think adds some slight validity to my notion that C2 should be the canonical space for manipulating Julibrots; I've not seen that kind of distortion in the C2 based slices.
FWIW I specify an image in R4 with 10 real parameters: (x,y,z,w) coords or the image center and angles around the xy, xz, xw, yz, yw and zw planes. The angles aren't all that intuitive so I'd be interested to find a more intuitively graspable way to specify a view. Well, the way I look at the R4 slicing and d.o.f. is like this: a plane can be specified by 3 noncolinear points whether it's in R3 or R4, right? So we've got 4dof for each point = 12 dof. Now the plane allows 2dof of movement for each point, so the definition of the plane is redundant by 3*2 = 6dof; end result is it should be possible to specify a plane in R4 with 12-6 = 6 coefficients. Every plane has a single point closest to the R4 origin and we can project some axis of R4 onto the plane to serve as an orientation, so formally there are only 2dof in choosing a point's position (but practically could be a problem since any particular axis might be perpindicular to the plane) and those are the parameters of variation. Like you though, I found it a whole lot easier to understand and to use with 10 parameters for the plane definition, though I didn't use direction cosines to the planes. The views are of course highly redundant with the extra 4dof, ie. lots of skewed, magnified and translated pictures of the same plane, but the method seems easily graspable. My approach was to define the plane by an arbitrary anchor point (x,y,z,w) and two unit directions (angle,angle,angle). You might find this approach more intuitive, or there might be holes in it that I didn't see, but I reasoned that when specifying directions in R4 one could extend the idea of {longitude,latitude} to {longitude,latitude,ternitude} (name chosen arbitrarily for the third angle. The idea is that any arbitrary point on the sphere of radius 1 in R4 could be specified by some combination of the three angles by scaling up the polar coordinate relations: w = sin(alpha) z = cos(alpha)*sin(phi) y = cos(alpha)*cos(phi)*sin(theta) x = cos(alpha)*cos(phi)*cos(theta), theta=longitude, phi=latitude, alpha=ternitude and that an arbitrary point is just the unit vector (x,y,z,w) times its (real) magnitude. So for the plane the points are the anchor point plus linear combinations of the unit vectors generated from each angle triplet.
PS http://research.microsoft.com/~hollasch/thesis/ lists another method of specifying a view of an R4 object, using 4D "from" and "to" points and 2 4D "up" and "over" vectors.
I look forward to reading that; there would reasonably be several different ways to specify general planar slices in R4. Now that I think about it, your description sounds similar to what I did in the .frm; it may be the same method. My next step is to use the same approach in C2, then look at the code of both and see if a transformation of parameters can be made in the C2 formula to make its parameters match the R4 code in number and role. A further point I'd like to make is that it's obvious from this process that the seemingly trivial mapping from one space to another with the exact same number of real dof, even with a one-to-one mapping between components of the dimensions, has distinctly nontrivial consequences. We take each complex dimension in C2 where two subcomponents are associated (say it has o rder 2), and break it into two independent dimensions, each with one component (say those dimensions have order 1). An innocent operation without many interesting results, right? And yet this very simple act of dimension breaking generates curvature in the target image where once there was linearity. I suspect that dimensions can be broken in ways where the resultant dimensions have non-integer order-- which ought to be a fallow field of inquiry for generating fractals. Regards, Hiram /*********************FRM for general R4 slices possibly follows*******************************/ JulibrotSlice_R4 { ;p1: origin_x, origin_y; Mset init 0,0 ;p2: origin_z, origin_w; Mset init 0,0 ;p3: vector N longitude(deg), latitude(deg); Mset init 90,90 ;p4: vec N ternitude(deg), vec M longitude(deg): Mset init 90,90 ;p5: vec M latitude(deg), vec M ternitude(deg): Mset init 90,0 ; this does all R2 planar slices of the R4 mapping ; via dimension-splitting of the C2 Julibrot process phase space ; the origin is arbitrarily chosen, as are two unit vectors {N,M} that define ; the plane P = Origin + a * N + b * M; {a,b} = "pixel", parm of variation. ; unit vectors specified by 4-space direction:{longitude,latitude,ternitude} ; algorithm is not efficient, extraneous dof allows skewing ; in the dimension splitting, arbitrarily associate Z0=x+yi,C=z+wi IF (initflag==0) initflag=1, degtorad = pi/180.0, N_long = real(p3 * degtorad), N_lat = imag(p3 * degtorad), N_tern = real(p4 * degtorad), M_long = imag(p4 * degtorad), M_lat = real(p5 * degtorad), M_tern = imag(p5 * degtorad), N_w = sin(N_tern), N_z = cos(N_tern) * sin(N_lat), N_y = cos(N_tern) * cos(N_lat) * sin(N_long), N_x = cos(N_tern) * cos(N_lat) * cos(N_long), M_w = sin(M_tern), M_z = cos(M_tern) * sin(M_lat), M_y = cos(M_tern) * cos(M_lat) * sin(M_long), M_x = cos(M_tern) * cos(M_lat) * cos(M_long) ENDIF a = imag(pixel), b = real(pixel), z = p1 + a * N_x + b * M_x + flip(a * N_y + b * M_y), C = p2 + a * N_z + b * M_z + flip(a * N_w + b * M_w), : z=sqr(z)+C, |z|<=1024 } /*********************FRM ENDS*****************************************************/ /*********************PAR showing hyperboloid distortion in R4 slice***************************/ show_hyperboloid { ; Fractint Version 2003 Patchlevel 1 reset=2003 type=formula formulafile=exprmntl.frm formulaname=JulibrotSlice_R4 passes=1 center-mag=-1.11223/-0.214471/0.2264147 params=0/0/0/0/135/-90/135/-135/0/135 outside=tdis logmap=yes colors=000m00eee0000000L00e0<3>eL0SSLllLssLzzLzzz000555<3>HHHKKKOOO<3>cc\ chhhmmmsssU0cxzw<3>xjUxfNxbFxi8wU0<4>ZfQUiV0e0Koe<3>0zz<2>0Gz<3>rVzzVzzV\ rzVjB`0zVV<3>zzV<3>VzV<3>VzzVrzVjzLW0hhz<3>zhz<3>zhh<3>zzhvzhqzhWQ0hzh<2\
hzvm00xi8hqzhlz00S<3>S0SS0LS0EeL0000S70<2>SS0<3>0S0<3>0SS0LS0ESeee000IE\ S<2>SES<3>SEE<3>SSEPSELSELLL000ESI<2>ESS<2>EHSKKS<2>QKSSKSSKQSKOSSL000SM\ KSOKSQKSSK<2>MSKKSKKSMKSOKSQKSSKQSKOSZZL000<4>EE7HH8JJ9MMBPPC<3>__IbbKee\ L000<4>GG7JJ8NN9QQBTTC<3>eeIiiKllL000<4>II7MM8QQ9TTBXXC<3>llIooKssL000<4\ LL7PP8TT9XXB``C<3>rrIvvKzzL000<3>JJJOOOSSS<6>zzz000zzz } /*********************PAR ENDS*****************************************************/