Last edited April 29th, 2002 by Stephen Shanbaum
Find this document at http://www.ncsa.uiuc.edu/Classes/MATH198/sshanbau

illiShift: A Experiment into Changing Geometries

Abstract

This project involves using the prebuilt illiSkel and modifying it to include ability to shift geometries on demand. The three geometries involved will be Euclidian, hyperbolic, and spherical. illiShift will allow for the user to view the effect of these geometries on many different objects, the main emphasis being on lattices of varying kind. These lattices deform with respect to the kind of geometry they are in, and respond accordingly to forward and backward movement.

Here are two pictures of illishift in action. The first shows the cube latticein a non-deformed state. The second shows the unboken line lattice the has undergone a translation in the hyperbolic space. Originally, the line lattice forms proper square boxes, and the changes to its form are obvious.

Final Report

As a budding programmer, I have had very few opportunities in the past to modify pre-existing code for my own purposes. Almost all coding that I have done for my classes has involved the creation of my own programs, and they haven't yet reached the complexity of even the basic illiSkel. As such, being able to change what functionality the Skel had was a learning experience, into both programming in general and in OpenGL.

What was truly unique about this project (for myself at least) was the attempt at including non-Euclidian geometric shifts into the Skel. Having never worked with non-Euclidian space before, it was a leap to attempt understanding it. However, what I have learned from this project has been a great help at understanding why mathematics holds such an intense fascination for some, and why I should remain a programmer, rather than become a mathematician.

The largest point of what I have come across in this has been the idea that this is not the only way to view hyperbolic and spherical space. Although it is a method that is very worthwhile in viewing to learn a little bit behind these two geometries, it is no more "the one way" to view these spaces than Klein or Poincare's methods of dealing with hyperbolic space.

What the illiShift does do is use a certain matrix multiplication to enforce these hyperbolic and spherical transformations. These changes are done to the matrix holding the value of where the object is placed in space, and how it is deformed. For the reason of seeing just how this matrix is being changed, I have left all values of the affine matrix on the left edge of the screen. These multiplications are the heart of these non-Euclidian shifts, and are given here:
Hyperbolic:
mat[dir*4+dir]=mat[3*4+3]=cosh(speed)
mat[dir*4+dir]=mat[3*4+dir]=sinh(speed)
Spherical:
mat[dir*4+dir]=mat[3*4+3]=cos(speed)
mat[dir*4+3]=-sin(speed)
mat[3*4+dir]=sin(speed)

In the above cases, the variable "dir" holds the value 2, so that the matrix values changed by the formulae are changing only for the z direction. This is appropriate, as the function which is doing this transformation is only called when moving the z direction. Speed is passed in as given in the rest of the program, and determines how quickly this movement is done. This is the basic shift which is what does the hyperbolic and spherical movement.

The point of having the various objects in illiShift was to show how objects become deformed through hyperbolic and spherical transforms. One such contribution I believe this program an make is showing how the line lattice and broken line lattice react the same to all shifting done. This shows how, despite the extra points involved along the broken line lattice (the line lattice only has endpoints), all straight lines in the hyperbolic and spherical geometries remain straight. However, this is not to say that there exist straight lines in these geometries, but what appears to be straight to the viewer should remain so.

Using IlliShift (general)
The general idea of IlliShift, is that the geometry value (as shown in both the cave and the console) determines what kind of transformation will occur for forward movement. Forward movement is determined at the console by using the middle mouse button, and in the cave by pushing the joystick along its y axis. The following are the different transformations that will occur:
GeoMode - Geometry
0 - Euclidian
1 - Hyperbolic
2 - Spherical

Using IlliShift (console)
This is handled the same way as the traditional illiSkel, with a few changes that allow it to perform the non-Euclidian translations. The original illiSkel functionality has been preserved, so original key presses will also work in illiShift.
b - Toggle Broken Line Lattice
c - Toggle Shaded Cube
j - Toggle Point Lattice
l - Toggle Line Lattice
t - Toggle Torus
u - Toggle Cube Lattice
e - Change geometries
f - Toggle Frustum (default is S. Levy's Liberated, other is builtin OGL)

Using IlliShift (cave)
This uses the skelplus which is the basic noosh with re-added cave functionality. However, this version of the skel has been changed so that the program's main emphasis of non-Euclidian movement has become the main emphasis. Because of this, many of the button-presses that were present in the original skel have been replaced or removed, so that those which were incorperated could be done correctly and with a greater chance of working. One problem I noticed with the current implementation of the caveSkel is that some button presses would not be recognized, and causing a reset by hitting all three buttons at once was extremely difficult (a very necessary function in this program).

Here are the button presses which are the most appropriate for the purpose of showing non-Euclidian movement. Other combinations of button-presses can be readded as found necessary, but be warned of the difficulty of some combos.
Left Button - Cycle through objects
Middle Button - Reset Scene
Left + Right Button - Cycle through geometries.