From: "Morgan L. Owens" <packrat@nznet.gen.nz>
Quaternions aren't the only way to extend complex numbers. Fractint also provides the other simple four-dimensional alternative, known there as "hypercomplex" numbers. "Simple" is a regrettable lapse into jargon - it would take us too far afield to explain here, but I feel obliged to use it as I just now cooked up a "non-simple" group of four-dimensional numbers. Where hypercomplex numbers have (see Fractint's docs):
ij=ji=k, jk=kj=-i, ki=ik=-j, ii=jj=-kk=-1, ijk=1
and quaternions have
ij=-ji=k, jk=-kj=i, ki=-ik=j, ii=jj=-kk=-1, ijk=-1
These ones I just made have
ij=ji=k, jk=kj=i, ki=ik=j, ii=-jj=-kk=-1, ijk=1
I just had to take a look! The well known Julia iteration znew = z^2 + c, implemented in, well, Owens Numbers... I hope you like it. Gerald K. Dobiasovsky ------------------------- OWENS4D.PAR ------------------------- Peek_1 { ; ...a peek into Owens Space ; reset=2002 type=formula formulafile=arch4d4.frm formulaname=RotOwensJulZiZjk corners=-1.6/1.6/-1.2/1.2 params=-0.75/0.75/30/0/0.25/0.5/0/0/50/253 float=y maxiter=1000000000 outside=summ periodicity=0 colors=@altern.map } Peek_2 { ; ...and another one ; reset=2002 type=formula formulafile=arch4d4.frm formulaname=RotOwensJulZiZjk corners=-1.6/1.6/-1.2/1.2 params=-0.5/0.5/30/90/0.25/0.5/-0.25/0.25/50/253 float=y maxiter=1000000000 outside=summ periodicity=0 colors=@altern.map } comment { For a (slightly) different point of view replace the group of variables at the start of the formula by one of the three following groups: HPixZ = (0.965925826289068,0.0) HPixZ2 = -0.258819045102521 VPixZ = (-0.0449434555275477,0.984807753012208) VPixZ2 = -0.16773125949652 NZ = (0.254887002244179,-0.17364817766693) NZ2 = 0.951251242564197 HPixZ = (0.866025403784439,0.0) HPixZ2 = -0.5 VPixZ = (-0.25,0.866025403784439) VPixZ2 = -0.43301270189222 NZ = (0.43301270189222,0.5) NZ2 = 0.75 HPixZ = -0.258819045102521 HPixZ2 = (0.965925826289068,0.0) VPixZ = -0.16773125949652 VPixZ2 = (-0.0449434555275477,0.984807753012208) NZ = 0.951251242564197 NZ2 = (0.254887002244179,-0.17364817766693) } frm:RotOwensJulZiZjk {;4d-algebra by Morgan L. Owens ; ;periodicity=no, outside=summ ;maxit > mymaxit*(stepnum+1) --> mymaxit: max. iterations per slice, ; stepnum: number_of_slices - 1 ; ;Params: p1r: depth of far clipping plane ; p1i: depth of near clipping plane ; p2r: rotation angle of 3d slice around zi ; p2i: rotation in jk-plane ; p3r: cr ; p3i: ci ; p4r: cj ; p4i: ck ; p5r: mymaxit ; p5i: stepnum ; HPixZ = (1.0,0.0) HPixZ2 = 0.0 VPixZ = (0.0,1.0) VPixZ2 = 0.0 NZ = (0.0,0.0) NZ2 = 1.0 ; bailout = 4 ; stepnum = imag(p5) delta = (real(p1)-imag(p1))/stepnum zz = NZ*imag(p1) + HPixZ*real(pixel) + VPixZ*imag(pixel) zz2 = NZ2*imag(p1) + HPixZ2*real(pixel) + VPixZ2*imag(pixel) dzz = NZ*delta, dzz2 = NZ2*delta ang = real(p2)*pi/180 si = sin(ang), co = cos(ang) tmp = real(dzz)*co + dzz2*si + flip(imag(dzz)) dzz2 = dzz2*co - real(dzz)*si dzz = tmp zz0 = real(zz)*co + zz2*si + flip(imag(zz)) zz2 = zz2*co - real(zz)*si zz = zz0 ang = exp(flip(imag(p2)*pi/180)) zz2 = zz20 = zz2*ang, dzz2 = dzz2*ang j = m = i = 0: tmp = sqr(zz) + real(zz2)*zz2 + imag(zz2)*flip(zz2) + p3 zz2 = 2*(real(zz)*zz2+imag(zz)*flip(zz2)) + p4 zz = tmp IF (bailout >= |zz|+|zz2|) i = i + 1 ELSE i = 0 m = m + 1 zz = zz0 = zz0 + dzz zz2 = zz20 = zz20 + dzz2 ENDIF z = m - j j = j + 1 stepnum >= m && p5 >= i } ------------------------- End of .PAR -------------------------