For my final project I would like to work on enhancing the already
existing
Lorenz Mask. I would like to add some features to the code to make it
more interactive,
and to be able to learn more about that dynamical system. To make it more
interactive, I
can make many of the parameters that are currently constants variables,
and enable the
user to change them from the keyboard. Those values and other options
that the user can
utilize should be printed to the display window in the "graffiti" fashion.
Another
improvement to the program is to make the program into a movie -- have it
go through
loops and continue changing as the parameters are changing, without having
the user
explicitly wipe the screen every time. The movie makes it significantly
easier to present
the system without much outside interference; only the first and perhaps
the last states
need to be specified. That could make for some interesting and perhaps
unexpected
results since the mask does not stop drawing itself to the screen. Thus
as the parameters
are changed in the middle of the execution, the mask will be changing and
evolving and
the new one will be drawn on top of the old one.
Another interesting improvement is to have the mask change colors
due to certain
conditions. That could be used for educational value, for example for
demonstrating the
bifurcation numbers -- the values at which a small additional change in a
parameter
changes the behavior of the system dramatically. The mask could change
colors as it
approaches the bifurcation numbers. Overall these improvements would make
the mask
more user-friendly, and make learning about it much simpler.
I have started adding certain features to the Lorenz mask, such as
the graffiti
function. The printing currently works for one parameter -- bifurcation
-- but adding more
parameters is very simple; it is just a matter of adding extra functions
that I want printed to the screen. Unfortunately, at this time, I cannot
change the values of
the parameters
from the keyboard (for a yet unknown to me reason that does not work, but
I'm hoping to fix
it in the nearest future.)
I am also working on replacing the single buffer of the Lorenz
mask with a circular
buffer. The point of this is to draw a set number of points (let us say
500) all at once from a 2-D array of 500x3 (500 points, each has 3
coordinates), then
update them all
simultaneously, and draw them all again. This way, there are only 500
points at once on the
screen, and the picture is significantly less dense. The circular buffer
is also "infinite"
because once the last space in it is filled up, the next point replaces
the very first
point, and so on. The problem with this approach is that there may be
flickering on the screen since the picture will be continuously erased and
drawn again, and
to fix that, I may
have to use the SwapBuffers command (with two buffers). One will be the
"screen" where all
the current points are displayed, and the other will be drawn in the
background. The
buffers are swapped, and there should be much less delay (and flickering)
that way.
Several ideas to work on in the future are to finish the graffiti
function and to
begin implementing Lorenz in 3-D.