Updated: 6.00-1.fc34 (02-Apr-2021)

Page Index

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).

The program projects the 4d Klein bottle to 3d using either a perspective or an orthographic projection. Which of the two alternatives looks more appealing depends on the viewing mode and the Klein bottle. For example, the Lawson Klein bottle looks nicest when projected perspectively. The figure-8 Klein bottle, on the other hand, looks nicer while walking when projected orthographically from 4d. For the pinched torus Klein bottle, both projection modes give equally acceptable projections.

The projected Klein bottle can then be projected to the screen either perspectively or orthographically. When using the walking modes, perspective projection to the screen should be used.

There are three display modes for the Klein bottle: mesh (wireframe), solid, or transparent. Furthermore, the appearance of the Klein bottle can be as a solid object or as a set of see-through bands. Finally, the colors with with the Klein bottle is drawn can be set to one-sided, two-sided, rainbow, or depth. In one-sided mode, the Klein bottle is drawn with the same color on both "sides." In two-sided mode (using static colors), the Klein bottle is drawn with red on one "side" and green on the "other side." Of course, the Klein bottle only has one side, so the color jumps from red to green along a curve on the surface of the Klein bottle. This mode enables you to see that the Klein bottle is non-orientable. If changing colors are used in two-sided mode, changing complementary colors are used on the respective "sides." The rainbow color mode (using static colors) draws the Klein bottle with a color wheel of fully saturated rainbow colors. If changing colors are used, the color wheel's colors change dynamically. The rainbow color mode gives a very nice effect when combined with the see-through bands mode or with the orientation markers drawn. The depth color mode draws the Klein bottle with colors that are chosen according to the 4d "depth" of the points. If static colors are used, this mode enables you to see that the figure-8 and pinched torus Klein bottles do not intersect themselves in 4d, while the Lawson Klein bottle does intersect itself.

The rotation speed for each of the six planes around which the Klein bottle rotates can be chosen. For the walk-and-turn mode, only the rotation speeds around the true 4d planes are used (the xy, xz, and yz planes).

Furthermore, in the walking modes the walking direction in the 2d base square of the Klein bottle and the walking speed can be chosen.

This program is somewhat inspired by Thomas Banchoff's book "Beyond the Third Dimension: Geometry, Computer Graphics, and Higher Dimensions", Scientific American Library, 1990.

**-window**- Draw on a newly-created window. This is the default.
**-root**- Draw on the root 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 three options are mutually exclusive. They determine which Klein bottle is displayed.

**-klein-bottle random**- Display a random Klein bottle (default).
**-klein-bottle figure-8**(Shortcut:**-figure-8**)- Display the figure-8 Klein bottle.
**-klein-bottle pinched-torus**(Shortcut:**-pinched-torus**)- Display the pinched torus Klein bottle.
**-klein-bottle lawson**(Shortcut:**-lawson**)- Display the Lawson Klein bottle.

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 three 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 bands**(Shortcut:**-bands**)- Display the Klein bottle as see-through bands.

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 one-sided**(Shortcut:**-onesided**)- Display the Klein bottle with a single color.
**-colors two-sided**(Shortcut:**-twosided**)- Display the Klein bottle with two colors: one color one "side" and the complementary color on the "other side." For static colors, the colors are red and green.
**-colors rainbow**(Shortcut:**-rainbow**)- Display the Klein bottle with fully saturated rainbow colors. If the Klein bottle is displayed as see-through bands, each band will be displayed with a different color.
**-colors depth**(Shortcut:**-depth**)- Display the Klein bottle with colors chosen depending on the 4d "depth" of the points.

The following options determine whether the colors with which the Klein bottle is displayed are static or are changing dynamically.

**-change-colors**- Change the colors with which the Klein bottle is displayed dynamically.
**-no-change-colors**- Use static colors to display the Klein bottle (default).

The following four 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).
**-view-mode walk**(Shortcut:**-walk**)- View the Klein bottle as if walking on its surface.
**-view-mode turn**(Shortcut:**-turn**)- View the Klein bottle while it turns in 4d.
**-view-mode walk-turn**(Shortcut:**-walk-turn**)- View the Klein bottle as if walking on its surface. Additionally, the Klein bottle turns around the true 4d planes (the xy, xz, and yz planes).

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 Klein bottle is projected from 3d to 2d (i.e., to the screen).

**-projection-3d random**- Project the Klein bottle from 3d to 2d using a random projection mode (default).
**-projection-3d perspective**(Shortcut:**-perspective-3d**)- Project the Klein bottle from 3d to 2d using a perspective projection.
**-projection-3d orthographic**(Shortcut:**-orthographic-3d**)- Project the Klein bottle from 3d to 2d using an orthographic projection.

The following three options are mutually exclusive. They determine how the Klein bottle is projected from 4d to 3d.

**-projection-4d random**- Project the Klein bottle from 4d to 3d using a random projection mode (default).
**-projection-4d perspective**(Shortcut:**-perspective-4d**)- Project the Klein bottle from 4d to 3d using a perspective projection.
**-projection-4d orthographic**(Shortcut:**-orthographic-4d**)- Project the Klein bottle from 4d to 3d using an orthographic projection.

The following six options determine the rotation speed of the Klein bottle around the six possible hyperplanes. 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. In walk-and-turn mode, the 3d rotation speeds are ignored (i.e., the wx, wy, and wz speeds). In walk-and-turn mode, smaller speeds must be used than in the turn mode to achieve a nice visualization. Therefore, in walk-and-turn mode the speeds you have selected are divided by 5 internally.

**-speed-wx***float*- Rotation speed around the wx plane (default: 1.1).
**-speed-wy***float*- Rotation speed around the wy plane (default: 1.3).
**-speed-wz***float*- Rotation speed around the wz plane (default: 1.5).
**-speed-xy***float*- Rotation speed around the xy plane (default: 1.7).
**-speed-xz***float*- Rotation speed around the xz plane (default: 1.9).
**-speed-yz***float*- Rotation speed around the yz plane (default: 2.1).

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: 7.0).
**-walk-speed***float*- The walking speed is measured in percent of some sensible maximum speed (default: 20.0).

**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.