3D Reversed Julia IFS.

3D RJIFS is a demo of a method for creating a 3D Julia-set. The technology is derived from the IFS random game method. When creating a Julia-set by this method one must iterate the reversed formula: sqrt ( Z - C ) and use random to select any of the two roots, (rotate 180º or not), (the method is sometimes refered to as 'The Monte Carlo method'). Here I'm trying to do the same thing but in three dimensions. A exact method for creating a Julia-set in 3D is not possible. The root function, in 2D, returns half the previous angle or half the angle + 180º of the original vector, (scaled to the root of the previous length). But what is half the angle in 3D? I developed four diffrent methods, (Set a, b, c & d, ¹) to create something that behaves like the 2D function. The idéa is to rotate to half of what is the angle between Z and |Z|. The main attractor for a reversed formula Julia-set where C=0 is at [ 1.0, 0.0 ] (in any number of dimensions) and this is the same as X(1/ eternity) or X0, (the root of the root of the root ...) and this is to where my functions iterates if C=0 and if the root is not altered at any time. Take the three points Z, |Z| and origo, these points makes up a triangle and this triangle is in a 2D plane, most often not perpendicular to any of the two possible planes y or z, (the x-plane (all three x=0) is not possible because one of the points |Z| is always somewhere at the positive x-axis²). In this plane it's possible to find and rotate to half the angle towards the x-axis, (I tried a number of ways and those who creates good fractals are in this program). All needed then is the root of the previous length and that is easy to calculate from the absolute value of Z. The functions here also has got seven methods for selecting 'roots', (not only the 180º rotation) and some 'secret expanders' =). The diffrent combinations this creates make this program behave as a non-linear IFS-tool.

¹ update: Now also Set e, d3, 2D and 2D3.

² Exceptions must in some cases be made. If |Z| == x, then it uses x=sqrt( |Z| ) y=0, z=0 , if ( -|Z| ) == x then the root is x = 0, y=cos(random angle)*sqrt( |Z| ), z=sin(the same random angle)*sqrt( |Z| ) and that is any point on a circle in a two dimensonal imaginary plane, the y/z plane, radius == sqrt( |Z| ). (This because Z=[0, y, z]^2 gives: x = a negative real number and y & z = 0. This is also true for 2d maths if Z=[0, y] (only the imaginary part has got a value)). If one was using this system for 4D then the root from x == ( -|Z| ) (a negative real number) is any point on a sphear in a 3 dimesional imaginary part. (Square a imaginary sphear and you will see a negative real).

Click to download the latest version: 3D RJIFS.zip

Screenshots from the program: Here!

To run the demo you will need Win32 & DirectX, (my Win98se uses DirectX version 9.0c and it works fine), I'm using DirectX SDK version 5 for development, (only small parts of Direct-draw is used to create a view-port, (screen) and get a pointer to the video memory at the graphics card).

In future versions one can expect more selections possible, (the coordinate for example, only random and the "Julia finder" as it is now). Possibility to save the image to disk. A simple scene editor is a might be. An animator - you wish! soloution: download the zipfile, it contains the source-code, write your own bloody version including the animator =)

See also:

SunCode


Images:


Scaled:

Set a 8X (click to enlarge) Set d 2X (click to enlarge)
Set d 2X (click to enlarge) Set a 8X (click to enlarge)
Set d 4X (click to enlarge) Set 2D 2X (click to enlarge)

Full scale:

Set c 8X

Zoom:

Set d 6X

Legal note: The material on this site, including the downloadable program, images & texts are all part of the public domain (PD). Distribute and make copys freely.

Mail: sol_developments (try to direct it to hotmail, use subject = "RJIFS" or something like that, else it will go down the spam drain =)


free web site hit counter