etruscanvenus [--display host:display.screen]
[--install] [--visual visual] [--window] [--root] [--window-id
number] [--delay usecs] [--fps] [--mode display-mode]
[--wireframe] [--surface] [--transparent] [--appearance appearance]
[--solid] [--distance-bands] [--direction-bands] [--colors
color-scheme] [--onesided-colors] [--twosided-colors]
[--distance-colors] [--direction-colors] [--no-change-colors] [--view-mode
view-mode] [--walk] [--turn] [--no-deform] [--deformation-speed
float] [--initial-deformation float] [--etruscan-venus]
[--roman] [--boy] [--ida] [--orientation-marks] [--projection mode]
[--perspective] [--orthographic] [--speed-x float] [--speed-y
float] [--speed-z float] [--walk-direction float]
[--walk-speed float]
The etruscanvenus program shows a 3d immersion of a Klein
bottle that smoothly deforms between the Etruscan Venus surface, the Roman
surface, the Boy surface, and the Ida surface. You can walk on the Klein
bottle or turn it in 3d. Topologically, all surfaces are Klein bottles, even
the Roman and Boy surfaces, which are doubly covered and therefore appear to
be an immersed real projective plane. The smooth deformation between these
surfaces was constructed by George K. Francis.
The Klein bottle is a non-orientable surface. To make this
apparent, the two-sided color mode can be used. Alternatively, orientation
markers (curling arrows) can be drawn as a texture map on the surface of the
Klein bottle. While walking on the Klein bottle, you will notice that the
orientation of the curling arrows changes (which it must because the Klein
bottle is non-orientable). Since all the surfaces except the Ida surface
have points where the surface normal is not well defined for some points,
walking is only performed on the Ida surface.
As mentioned above, the Roman and Boy surfaces are doubly covered
and therefore appear to be an immersed real projective plane. Since some of
the parameter names are based on this interpretation of the surface, the
geometry of the real projective plane will be briefly disussed. The real
projective plane is a model for the projective geometry in 2d space. One
point can be singled out as the origin. A line can be singled out as the
line at infinity, i.e., a line that lies at an infinite distance to the
origin. The line at infinity is topologically a circle. Points on the line
at infinity are also used to model directions in projective geometry.
Direction and distance bands refer to this interpretation of the surface. If
direction bands are used, the bands extend from the origin of the projective
plane in different directions to the line at infinity and back to the
origin. If distance bands are used, the bands lie at constant distances to
the origin. The same interpretation is used for distance and direction
colors. Although there is no conceptually equivalent geometric
interpretation for the two Klein bottle surfaces (the Etruscan Venus and Ida
surfaces), the smooth deformation between the surfaces results in a natural
extension of these concepts to the Klein bottle surfaces.
The immersed surfaces can be projected to the screen either
perspectively or orthographically. When using the walking mode, perspective
projection to the screen will be used.
There are three display modes for the Klein bottle: mesh
(wireframe), solid, or transparent. Furthermore, the appearance of the
surface can be as a solid object or as a set of see-through bands. The bands
can be distance bands or direction bands, as explained above.
The colors with with the surface is drawn can be set to one-sided,
two-sided, distance, or direction. In one-sided mode, the surface is drawn
with the same color on both sides of the underlying triangles. In two-sided
mode, the surface is drawn with one color on one side of the underlying
triangles and the complementary color on the other side. Since the surface
actually only has one side, the color jumps from red to green along a line
on the surface. This mode enables you to see that the surface is
non-orientable. In distance mode, the surface is displayed with fully
saturated colors that depend on the distance of the points on the projective
plane to the origin, as described above. If the surface is displayed as
distance bands, each band will be displayed with a different color. In
direction mode, the surface is displayed with fully saturated colors that
depend on the angle of the points on the projective plane with respect to
the origin (see above for an explanation). If the surface is displayed as
direction bands, each band will be displayed with a different color. The
colors used to color the surface can either be static or can be changed
dynamically.
The rotation speed for each of the three coordinate axes around
which the Klein bottle rotates can be chosen.
Furthermore, in the walking mode the walking direction in the 2d
base square of the surface and the walking speed can be chosen. The walking
direction is measured as an angle in degrees in the 2d square that forms the
coordinate system of the surface. A value of 0 or 180 means that the walk is
along a circle at a randomly chosen distance from the origin (parallel to a
distance band). A value of 90 or 270 means that the walk is directly along a
direction band. Any other value results in a curved path along the surface.
As noted above, walking is performed only on the Ida surface.
By default, the immersion of the Klein bottle smoothly deforms
between the Etruscan Venus surface, the Roman surface, the Boy surface, and
the Ida surface. It is possible to choose the speed of the deformation.
Furthermore, it is possible to switch the deformation off. It is also
possible to determine the initial deformation of the immersion. This is
mostly useful if the deformation is switched off, in which case it will
determine the appearance of the surface. A value of 0 corresponds to the
Etruscan Venus surface, a value of 1000 to the Roman surface, a value of
2000 to the Boy surface, and a value of 3000 to the Ida surface.
This program is inspired by George K. Francis's book "A
Topological Picturebook", Springer, 1987, by George K. Francis's paper
"The Etruscan Venus" in P. Concus, R. Finn, and D. A. Hoffman:
"Geometric Analysis and Computer Graphics", Springer, 1991, and by
a video entitled "The Etruscan Venus" by Donna J. Cox, George K.
Francis, and Raymond L. Idaszak, presented at SIGGRAPH 1989.
etruscanvenus accepts the following options:
- --window
- Draw on a newly-created window. This is the default.
- --root
- Draw on the root window.
- --window-id number
- Draw on the specified window.
- --install
- Install a private colormap for the window.
- --visual
visual
- Specify which visual to use. Legal values are the name of a visual class,
or the id number (decimal or hex) of a specific visual.
- --delay
microseconds
- How much of a delay should be introduced between steps of the animation.
Default 10000, or 1/100th second.
- --fps
- Display the current frame rate, CPU load, and polygon count.
The following four options are mutually exclusive. They determine
how the Klein bottle is displayed.
- --mode random
- Display the Klein bottle in a random display mode (default).
- --mode wireframe
(Shortcut: --wireframe)
- Display the Klein bottle as a wireframe mesh.
- --mode surface
(Shortcut: --surface)
- Display the Klein bottle as a solid surface.
- --mode transparent
(Shortcut: --transparent)
- Display the Klein bottle as a transparent surface.
The following four options are mutually exclusive. They determine
the appearance of the Klein bottle.
- --appearance
random
- Display the Klein bottle with a random appearance (default).
- --appearance
solid (Shortcut: --solid)
- Display the Klein bottle as a solid object.
- --appearance
distance-bands (Shortcut:
--distance-bands)
- Display the Klein bottle as see-through bands that lie at increasing
distances from the origin (see above for an explanation).
- --appearance
direction-bands (Shortcut:
--direction-bands)
- Display the Klein bottle as see-through bands that lie at increasing
angles with respect to the origin (see above for an explanation).
The following five options are mutually exclusive. They determine
how to color the Klein bottle.
- --colors
random
- Display the Klein bottle with a random color scheme (default).
- --colors onesided
(Shortcut: --onesided-colors)
- Display the Klein bottle with a single color.
- --colors twosided
(Shortcut: --twosided-colors)
- Display the Klein bottle with two colors: one color on one
"side" and the complementary color on the "other
side."
- --colors distance
(Shortcut: --distance-colors)
- Display the Klein bottle with fully saturated colors that depend on the
distance of the points on the projective plane to the origin (see above
for an explanation). If the Klein bottle is displayed as distance bands,
each band will be displayed with a different color.
- --colors direction
(Shortcut: --direction-colors)
- Display the Klein bottle with fully saturated colors that depend on the
angle of the points on the projective plane with respect to the origin
(see above for an explanation). If the Klein bottle is displayed as
direction bands, each band will be displayed with a different color.
The following options determine whether the colors with which the
Klein bottle are displayed are static or are changing dynamically.
- --change-colors
- Change the colors with which the Klein bottle is displayed dynamically
(default).
- --no-change-colors
- Use static colors to display the Klein bottle.
The following three options are mutually exclusive. They determine
how to view the Klein bottle.
- --view-mode
random
- View the Klein bottle in a random view mode (default). The walking mode
will be randomly selected in approximately 10% of the cases.
- --view-mode
turn (Shortcut: --turn)
- View the Klein bottle while it turns in 3d.
- --view-mode
walk (Shortcut: --walk)
- View the Klein bottle as if walking on its surface.
The following options determine whether the surface is being
deformed.
- --deform
- Deform the surface smoothly between the Etruscan Venus surface, the Roman
surface, the Boy surface surface, and the Ida surface (default).
- --no-deform
- Don't deform the surface.
The following option determines the deformation speed.
- --deformation-speed
float
- The deformation speed is measured in percent of some sensible maximum
speed (default: 10.0).
The following options determine the initial deformation of the
surface. As described above, this is mostly useful if --no-deform is
specified.
- --initial-deformation
float
- The initial deformation is specified as a number between 0 and 4000. A
value of 0 corresponds to the Etruscan Venus surface, a value of 1000 to
the Roman surface, a value of 2000 to the Boy surface, and a value of 3000
to the Ida surface. The default value is 0.
- --etruscan-venus
- This is a shortcut for --initial-deformation 0.
- --roman
- This is a shortcut for --initial-deformation 1000.
- --boy
- This is a shortcut for --initial-deformation 2000.
- --ida
- This is a shortcut for --initial-deformation 3000.
The following options determine whether orientation marks are
shown on the Klein bottle.
- --orientation-marks
- Display orientation marks on the Klein bottle.
- --no-orientation-marks
- Don't display orientation marks on the Klein bottle (default).
The following three options are mutually exclusive. They determine
how the Klain bottle is projected from 3d to 2d (i.e., to the screen).
- --projection
random
- Project the Klein bottle from 3d to 2d using a random projection mode
(default).
- --projection
perspective (Shortcut: --perspective)
- Project the Klein bottle from 3d to 2d using a perspective
projection.
- --projection
orthographic (Shortcut: --orthographic)
- Project the Klein bottle from 3d to 2d using an orthographic
projection.
The following three options determine the rotation speed of the
Klein bottle around the three possible axes. The rotation speed is measured
in degrees per frame. The speeds should be set to relatively small values,
e.g., less than 4 in magnitude. In walk mode, all speeds are ignored.
- --speed-x
float
- Rotation speed around the x axis (default: 1.1).
- --speed-y
float
- Rotation speed around the y axis (default: 1.3).
- --speed-z
float
- Rotation speed around the z axis (default: 1.5).
The following two options determine the walking speed and
direction.
- --walk-direction
float
- The walking direction is measured as an angle in degrees in the 2d square
that forms the coordinate system of the surface of the Klein bottle
(default: 83.0). A value of 0 or 180 means that the walk is along a circle
at a randomly chosen distance from the origin (parallel to a distance
band). A value of 90 or 270 means that the walk is directly along a
direction band. Any other value results in a curved path along the
surface. As noted above, walking is performed only on the Ida
surface.
- --walk-speed
float
- The walking speed is measured in percent of some sensible maximum speed
(default: 20.0).
If you run this program in standalone mode in its turn mode, you
can rotate the Klein bottle by dragging the mouse while pressing the left
mouse button. This rotates the Klein bottle in 3d. To examine the Klein
bottle at your leisure, it is best to set all speeds to 0. Otherwise, the
Klein bottle will rotate while the left mouse button is not pressed. This
kind of interaction is not available in the walk mode.
- DISPLAY
- to get the default host and display number.
- XENVIRONMENT
- to get the name of a resource file that overrides the global resources
stored in the RESOURCE_MANAGER property.
- XSCREENSAVER_WINDOW
- The window ID to use with --root.
Copyright © 2019-2020 by Carsten Steger. Permission to use,
copy, modify, distribute, and sell this software and its documentation for
any purpose is hereby granted without fee, provided that the above copyright
notice appear in all copies and that both that copyright notice and this
permission notice appear in supporting documentation. No representations are
made about the suitability of this software for any purpose. It is provided
"as is" without express or implied warranty.
Carsten Steger <carsten@mirsanmir.org>, 05-jan-2020.