etruscanvenus(6)

πŸ“¦
version 6.15 Β· 2 versions
, in alpine 3.24, arch rolling, nixpkgs unstable

hey bestie πŸ’– this is the XScreenSaver manual entry for etruscanvenus (section 6), and it's literally a Klein bottle glow-up simulator. no preamble, we're going straight in.

πŸ’– NAME πŸ’–

etruscanvenus β€” Draws a 3d immersion of a Klein bottle that smoothly deforms between the Etruscan Venus surface, the Roman surface, the Boy surface surface, and the Ida surface.

πŸŽ€ SYNOPSIS πŸŽ€

okay so you run it like this, and yes every bracket is doing its job:

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]

🌈 DESCRIPTION 🌈

okay so etruscanvenus is literally showing you a 3d immersion of a Klein bottle, and it smoothly deforms between the Etruscan Venus surface, the Roman surface, the Boy surface, and the Ida surface β€” the way it morphs is such a slay. 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. periodt.

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. no cap, that's just how it is.

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. iykyk πŸŒ€

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. that's the vibe check for projections.

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. obsessed πŸ’…

the rotation speed for each of the three coordinate axes around which the Klein bottle rotates can be chosen. yes, all three axes get their own speed moment.

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. so like, respect the Ida surface's main character energy.

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. numbers are iconic, fr fr. πŸ”₯

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. the lore is immaculate. 🫢

✨ OPTIONS ✨

etruscanvenus is literally so accommodating bestie, it accepts all of these:

  • --window β€” draws on a brand-new window that just got created. this is the default, main character behaviour πŸ’…
  • --root β€” draws on the root window instead.
  • --window-id number β€” draws on the exact window you point at.
  • --install β€” installs a private colormap for the window.
  • --visual visual β€” tells it which visual to use. legal values are either the name of a visual class, or the id number (decimal or hex) of a specific visual. iykyk 🎨
  • --delay microseconds β€” how much of a delay gets introduced between steps of the animation. default is 10000, aka 1/100th of a second ⏱️
  • --fps β€” displays the current frame rate, CPU load, and polygon count. stats girlies rise πŸ”₯

πŸŒ€ the display modes (these four are mutually exclusive!)

they determine how the Klein bottle is displayed, and ngl the page really does keep saying Klein bottle even though we're here for the Etruscan Venus β€” not me, that's just what it says πŸ™ˆ

  • --mode random β€” displays the Klein bottle in a random display mode (default).
  • --mode wireframe (Shortcut: --wireframe) β€” displays the Klein bottle as a wireframe mesh.
  • --mode surface (Shortcut: --surface) β€” displays the Klein bottle as a solid surface.
  • --mode transparent (Shortcut: --transparent) β€” displays the Klein bottle as a transparent surface. see-through slay ✨

πŸŽ€ the appearance options (also mutually exclusive!)

these four decide how the Klein bottle looks:

  • --appearance random β€” displays the Klein bottle with a random appearance (default).
  • --appearance solid (Shortcut: --solid) β€” displays the Klein bottle as a solid object.
  • --appearance distance-bands (Shortcut: --distance-bands) β€” displays 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) β€” displays the Klein bottle as see-through bands that lie at increasing angles with respect to the origin (see above for an explanation).

🌈 the color options (mutually exclusive, all five of them!)

they determine how to color the Klein bottle:

  • --colors random β€” displays the Klein bottle with a random color scheme (default).
  • --colors onesided (Shortcut: --onesided-colors) β€” displays the Klein bottle with a single color.
  • --colors twosided (Shortcut: --twosided-colors) β€” displays the Klein bottle with two colors: one color on one "side" and the complementary color on the "other side." iconic complementary moment 🫢
  • --colors distance (Shortcut: --distance-colors) β€” displays 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) β€” displays 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.

πŸ’« static vs. dynamic colors

these next ones decide whether the colors are static or changing dynamically:

  • --change-colors β€” changes the colors with which the Klein bottle is displayed dynamically (default). it's giving living color 😭
  • --no-change-colors β€” uses static colors to display the Klein bottle.

πŸ‘€ how to view it (three mutually exclusive options!)

  • --view-mode random β€” views 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) β€” views the Klein bottle while it turns in 3d. spinny queen πŸŒ€
  • --view-mode walk (Shortcut: --walk) β€” views the Klein bottle as if walking on its surface.

πŸ¦‹ deformation, or: the glow-up options

these determine whether the surface is being deformed:

  • --deform β€” deforms the surface smoothly between the Etruscan Venus surface, the Roman surface, the Boy surface surface, and the Ida surface (default). (yes, "Boy surface surface" β€” the page said it twice, i'm just the messenger πŸ’€)
  • --no-deform β€” doesn't deform the surface.

the next one sets the deformation speed:

  • --deformation-speed float β€” the deformation speed is measured in percent of some sensible maximum speed (default: 10.0).

🎚️ initial deformation

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

and the shortcut squad, one per surface πŸŽ€:

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

🧭 orientation marks

whether orientation marks are shown on the Klein bottle:

  • --orientation-marks β€” displays orientation marks on the Klein bottle.
  • --no-orientation-marks β€” doesn't display orientation marks on the Klein bottle (default).

πŸ“ projection (three more mutually exclusive ones!)

these determine how the Klain bottle is projected from 3d to 2d (i.e., to the screen). yes, "Klain" β€” she said what she said πŸ’€

  • --projection random β€” projects the Klein bottle from 3d to 2d using a random projection mode (default).
  • --projection perspective (Shortcut: --perspective) β€” projects the Klein bottle from 3d to 2d using a perspective projection.
  • --projection orthographic (Shortcut: --orthographic) β€” projects the Klein bottle from 3d to 2d using an orthographic projection.

🎑 rotation speed

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

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

🌸 INTERACTION 🌸

okay so 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, fr fr.

to examine the Klein bottle at your leisure, it's best to set all speeds to 0. otherwise, the Klein bottle will rotate while the left mouse button is not pressed. lowkey chaotic but we respect it.

heads up bestie: this kind of interaction is not available in the walk mode. πŸ’€

πŸ¦‹ ENVIRONMENT πŸ¦‹

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

🌈 SEE ALSO 🌈

X(1), xscreensaver(1) β€” go read those too, they're the supporting cast 🫢


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.


πŸ’œ AUTHOR πŸ’œ

Carsten Steger <carsten@mirsanmir.org>, 05-jan-2020.


and that's the whole page, bestie πŸŽ€βœ¨ this is X Version 11, version 6.15, dated 30-Mar-2026 β€” go forth and deform some surfaces, ily πŸ’–

πŸ“¦ where this page comes from