Provided by: xscreensaver-gl_6.08+dfsg1-1ubuntu3_amd64 bug

NAME

       cubocteversion - Displays a cuboctahedron eversion.

SYNOPSIS

       cubocteversion   [--display   host:display.screen]  [--install]  [--visual  visual]  [--window]  [--root]
       [--window-id number]  [--delay  usecs]  [--fps]  [--eversion-method  method]  [--morin-denner]  [--apery]
       [--mode   display-mode]  [--surface]  [--transparent]  [--edges  edge-mode]  [--self-intersections  self-
       intersection-mode]   [--colors   color-scheme]   [--twosided-colors]   [--face-colors]   [--earth-colors]
       [--deformation-speed    float]    [--projection    projection-mode]    [--perspective]   [--orthographic]
       [--transparency transparency-method] [--correct-transparency]  [--approximate-transparency]  [--standard-
       transparency] [--speed-x float] [--speed-y float] [--speed-z float]

DESCRIPTION

       The  cubocteversion  program  shows  a cuboctahedron eversion, i.e., a smooth deformation (homotopy) that
       turns a cuboctahedron inside out.   During  the  eversion,  the  deformed  cuboctahedron  is  allowed  to
       intersect  itself  transversally.   However, no fold edges or non-injective neighborhoods of vertices are
       allowed to occur.

       The cuboctahedron can be deformed with two eversion methods: Morin-Denner  or  Apéry.   The  Morin-Denner
       cuboctahedron  eversion  method  is  described  in  the  following  two papers: Richard Denner: "Versions
       polyédriques du retournement de la sphère", L'Ouvert 94:32-45,  March  1999;  Richard  Denner:  "Versions
       polyédriques  du  retournement  de la sphère, retournement du cuboctaèdre", L'Ouvert 95:15-36, June 1999.
       The Apéry cuboctahedron eversion method  is  described  in  the  following  paper:  François  Apéry:  "Le
       retournement  du cuboctaèdre", Prépublication de l'institut de recherche mathématique avancée, Université
       Louis Pasteur et C.N.R.S., Strasbourg, 1994.

       The deformed cuboctahedron can be projected to the screen either perspectively or orthographically.

       There are three display modes for the cuboctahedron: solid, transparent, or random.  If  random  mode  is
       selected, the mode is changed each time an eversion has been completed.

       The  edges  of  the faces of the cuboctahedron can be visualized in three modes: without edge tubes, with
       edge tubes, or random.  If edge tubes are selected, solid gray tubes are displayed around  the  edges  of
       the cuboctahedron.  This makes them more prominent.  If random mode is selected, the mode is changed each
       time an eversion has been completed.

       During  the  eversion,  the  cuboctahedron  must  intersect  itself.   It can be selected how these self-
       intersections are displayed: without self-intersection tubes, with self-intersection  tubes,  or  random.
       If  self-intersection  tubes are selected, solid orange tubes are displayed around the self-intersections
       of the cuboctahedron.  This makes them more prominent.  If random mode is selected, the mode  is  changed
       each time an eversion has been completed.

       The colors with with the cuboctahedron is drawn can be set to two-sided, face, earth, or random.  In two-
       sided  mode,  the  cuboctahedron  is  drawn with magenta on one side and cyan on the other side.  In face
       mode, the cuboctahedron is displayed with different colors for each face.  The colors of  the  faces  are
       identical  on the inside and outside of the cuboctahedron.  Colors on the northern hemi-cuboctahedron are
       brighter than those on the southern hemi-cuboctahedron.  In earth mode, the cuboctahedron is drawn with a
       texture of earth by day on one side and with a texture of earth by night on the other  side.   Initially,
       the  earth  by day is on the outside and the earth by night on the inside.  After the first eversion, the
       earth by night will be on the outside.  All points of the earth on the inside and outside are at the same
       positions on the cuboctahedron.  Since an eversion transforms the cuboctahedron  into  its  inverse,  the
       earth  by  night  will appear with all continents mirror reversed.  If random mode is selected, the color
       scheme is changed each time an eversion has been completed.

       It is possible to rotate the cuboctahedron while it is deforming.  The rotation speed  for  each  of  the
       three coordinate axes around which the cuboctahedron rotates can be chosen arbitrarily.

BRIEF DESCRIPTION OF THE CUBOCTAHEDRON EVERSION BASICS

       A  sphere  eversion  turns  the  standard  embedding  of  the  unit sphere inside-out in a smooth manner.
       Creases, pinch points, holes, etc. may not occur during the eversion.  However, the sphere may  intersect
       itself during the eversion.  In mathematical terms, the eversion is a regular homotopy between the sphere
       and  the  sphere point reflected at its center.  A convex bounded polyhedron of Euler characteristic 2 is
       homeomorphic to a sphere. Since a polyhedron does not have a continuous  tangent  bundle,  it  cannot  be
       everted  by  a  regular  homotopy,  which  requires  the  tangent  bundle  induced  by the homotopy to be
       continuous.  Instead, it is required that polyhedron does not develop fold edges during the eversion  and
       that  a  neighborhood of each vertex is injective throughout the eversion.  Fold edges occur whenever two
       faces that share an edge become coplanar and all vertices of the two faces lie on the same  side  of  the
       edge  in  the  plane in which they are coplanar.  Furthermore, it is required that all self-intersections
       between edges that occur during the eversion are transversal, which means that they must not occur at the
       vertices of the edges.

       Any eversion of the sphere (smooth or polyhedral) must contain a quadruple point.  This  is  a  point  in
       which  four different parts of the deformed sphere intersect transversally.  For a polyhedron, this means
       that four different faces must intersect transversally.  Four faces are defined by four planes,  each  of
       which,  in  turn,  is  defined by three vertices.  By the above requirements, none of the twelve vertices
       that define the four planes may coincide.  Therefore, the minimum number of vertices of a polyhedron that
       allows it to be everted is twelve. The cuboctahedron has twelve vertices and the papers cited above  show
       that a cuboctahedron can indeed be everted.

       A  cuboctahedron has 14 faces: six squares and eight equilateral triangles.  To perform the eversion, the
       cuboctahedron is oriented  such  that  two  opposite  squares  are  horizontal.   One  of  these  squares
       corresponds to the north polar region and one to the south polar region if the cubctahedron is identified
       with the round sphere.  The four remaining squares are vertical and lie in the tropical region around the
       equator.   Each square is then divided into two isosceles right triangles.  The four tropical squares are
       divided along the equator and the north and south pole squares are divided in orthogonal directions:  the
       edge introduced in the north pole square is orthogonal to that introduced in the south pole square.  This
       results  in  a  triangulated  version  of the cuboctahedron with 12 vertices, 30 edges, and 20 triangular
       faces.  This is the version of the cuboctahedron that can be everted.

BRIEF DESCRIPTION OF THE MORIN-DENNER CUBOCTAHEDRON EVERSION METHOD

       The approach of Morin and Denner is to evert the cuboctahedron in 44 steps,  resulting  in  45  different
       polyhedra  that occur as models.  The eversion is symmetric in time, so the 44 steps can be visualized by
       time running from -22 to 22.  Of the 45 models, 44 possess a twofold rotational  symmetry.   The  halfway
       model  at  time  0 possesses a fourfold rotational symmetry.  The halfway model is the model at which the
       cuboctahedron is turned halfway inside-out.  In each of the 44 steps, two vertices of  the  cuboctahedron
       are moved along two respective straight lines, each of which is an edge or an extension of an edge of the
       cuboctahedron.   After  the  eversion  has  been  completed,  the inside of the cuboctahedron lies on the
       outside.  Furthermore, all points of the everted  cuboctahedron  lie  at  the  antipodal  points  of  the
       original cuboctahedron.

       The  following  description assumes that the cuboctahedron is visualized in two-sided color mode.  In the
       first 16 steps, the magenta cuboctahedron is deformed into a magenta polyhedron  that  Morin  and  Denner
       call  the  bicorne.  During this phase, no self-intersections occur.  Topologically, the bicorne is still
       an embedded sphere.  The next twelve steps, from time -6 to 6, are the  most  interesting  steps  of  the
       eversion:  the  cuboctahedron intersects itself.  It no longer is an embedding but an immersion.  In this
       phase, progressively more of the cyan inside becomes visible.  These steps  are  shown  at  a  two  times
       slower speed compared to the rest of the steps.  At time 6, the eversion has produced a cyan bicorne.  At
       this  step,  the  cuboctahetron  has  been  everted:  it  is  an embedding of the everted sphere.  In the
       remaining 16 steps, the cyan bicorne is deformed to the everted cuboctahedron.

BRIEF DESCRIPTION OF THE APÉRY CUBOCTAHEDRON EVERSION METHOD

       The original approach of Apéry is to evert the cuboctahedron in four steps, resulting in  five  different
       polyhedra  that  occur as models.  The eversion is symmetric in time, so the four steps can be visualized
       by time running from -2 to 2.  Of the five models, four  possess  a  twofold  rotational  symmetry.   The
       halfway  model  at  time  0  possesses a fourfold rotational symmetry.  The halfway model is the model at
       which the cuboctahedron is turned halfway inside-out.  In addition to the start and end models  at  times
       -2  and  2,  which both are cuboctahedra, and the halfway model at time 0, the two intermediate models at
       times -1 and 1 are embeddings of the cuboctahedron.  Apéry calls them gastrula because they correspond to
       a cuboctahedron in which the northern hemi-cuboctahedron has been pushed downwards so that it lies inside
       the southern hemi-cuboctahedron.  In each of the four steps, the cuboctahedron is  deformed  by  linearly
       interpolating  the  corresponding  vertices  between  two successive models.  After the eversion has been
       completed, the inside of the cuboctahedron lies on the outside.  Furthermore, all points of  the  everted
       cuboctahedron lie at the antipodal points of the original cuboctahedron.

       During  the  development  of  this  program,  it was discovered that the linear interpolation between the
       cuboctahedron and the gastrula causes the deformed cuboctahedron to intersect itself for a  brief  period
       of  time  shortly  before  the  gastrula is reached.  Therefore, an additional model, devised by François
       Apéry and called pre-gastrula by him, was inserted at times -1.25 and 1.25.  This additional model avoids
       the self-intersections before the gastrula is reached.  The rest of Apéry's approach remains  unaffected:
       the vertices are interpolated linearly between successive models.

       The  following  description assumes that the cuboctahedron is visualized in two-sided color mode.  In the
       first two steps, the magenta cuboctahedron is deformed into a magenta gastrula.  During  this  phase,  no
       self-intersections  occur.  Topologically, the gastrula is still an embedded sphere.  The next two steps,
       from time -1 to 1, are the most interesting steps of the eversion: the cuboctahedron  intersects  itself.
       It  no  longer  is  an  embedding but an immersion.  In this phase, progressively more of the cyan inside
       becomes visible.  At time 1, the eversion has produced a cyan gastrula.  At this step, the  cuboctahetron
       has  been  everted:  it  is  an  embedding  of  the everted sphere.  In the remaining two steps, the cyan
       gastrula is deformed to the everted cuboctahedron.

OPTIONS

       cubocteversion 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 20000, or
               1/50th second.

       --fps   Display the current frame rate, CPU load, and polygon count.

       The following three options are mutually exclusive.  They determine which cuboctahedron  eversion  method
       is used.

       --eversion-method random
               Use a random cuboctahedron eversion method (default).

       --eversion-method morin-denner (Shortcut: --morin-denner)
               Use the Morin-Denner cuboctahedron eversion method.

       --eversion-method apery (Shortcut: --apery)
               Use the Apéry cuboctahedron eversion method.

       The  following  three  options  are mutually exclusive.  They determine how the deformed cuboctahedron is
       displayed.

       --mode random
               Display the cuboctahedron in a random display mode (default).

       --mode surface (Shortcut: --surface)
               Display the cuboctahedron as a solid surface.

       --mode transparent (Shortcut: --transparent)
               Display the cuboctahedron as a transparent surface.

       The  following  three  options  are  mutually  exclusive.   They  determine  whether  the  edges  of  the
       cuboctahedron are displayed as solid gray tubes.

       --edges random
               Randomly choose whether to display edge tubes (default).

       --edges on
               Display the cuboctahedron with edge tubes.

       --edges off
               Display the cuboctahedron without edge tubes.

       The following three options are mutually exclusive.  They determine whether the self-intersections of the
       deformed cuboctahedron are displayed as solid orange tubes.

       --self-intersections random
               Randomly choose whether to display self-intersection tubes (default).

       --self-intersections on
               Display the cuboctahedron with self-intersection tubes.

       --self-intersections off
               Display the cuboctahedron without self-intersection tubes.

       The  following  four  options  are  mutually  exclusive.   They  determine  how  to  color  the  deformed
       cuboctahedron.

       --colors random
               Display the cuboctahedron with a random color scheme (default).

       --colors twosided (Shortcut: --twosided-colors)
               Display the cuboctahedron with two colors: magenta on one side and cyan on the other side.

       --colors face (Shortcut: --face-colors)
               Display the cuboctahedron with different colors for each  face.  The  colors  of  the  faces  are
               identical  on  the  inside  and  outside  of  the  cuboctahedron.   Colors  on the northern hemi-
               cuboctahedron are brighter than those on the southern hemi-cuboctahedron.

       --colors earth (Shortcut: --earth-colors)
               Display the cuboctahedron with a texture of earth by day on one side and with a texture of  earth
               by night on the other side.  Initially, the earth by day is on the outside and the earth by night
               on  the inside.  After the first eversion, the earth by night will be on the outside.  All points
               of the earth on the inside and outside are at the same positions on the cuboctahedron.  Since  an
               eversion  transforms  the cuboctahedron into its inverse, the earth by night will appear with all
               continents mirror reversed.

       The following option determines the deformation speed.

       --deformation-speed float
               The deformation speed is measured in percent of some sensible maximum speed (default: 20.0).

       The following three options are mutually exclusive.  They determine how  the  deformed  cuboctahedron  is
       projected from 3d to 2d (i.e., to the screen).

       --projection random
               Project the cuboctahedron from 3d to 2d using a random projection mode (default).

       --projection perspective (Shortcut: --perspective)
               Project the cuboctahedron from 3d to 2d using a perspective projection.

       --projection orthographic (Shortcut: --orthographic)
               Project the cuboctahedron from 3d to 2d using an orthographic projection.

       The  following three options are mutually exclusive.  They determine which transparency algorithm is used
       to display the transparent faces of the cuboctahedron.  If correct transparency is  selected,  a  correct
       but slower algorithm is used to render the transparent faces.  If the frame rate of this algorithm is too
       slow  and  results  in  a  jerky  animation, it can be set to one of the other two modes.  If approximate
       transparency is selected, an transparency  algorithm  that  provides  an  approximation  to  the  correct
       transparency  is used.  Finally, if standard transparency is selected, a transparency algorithm that only
       uses standard OpenGL transparency rendering features is used.  It results in a lower-quality rendering of
       the transparent faces in which the appearance depends on the order in which the  faces  are  drawn.   The
       approximate  and  standard  transparency  algorithms  are  equally fast and, depending on the GPU, can be
       significantly faster than the correct transparency algorithm.  The correct and  approximate  transparency
       algorithms  are  automatically  switched off if the OpenGL version supported by the operating system does
       not support them (for example, on iOS and iPadOS).

       --transparency correct (Shortcut: --correct-transparency)
               Use a transparency algorithm  that  results  in  a  correct  rendering  of  transparent  surfaces
               (default).

       --transparency approximate (Shortcut: --approximate-transparency)
               Use  a  transparency  algorithm that results in an approximately correct rendering of transparent
               surfaces.

       --transparency standard (Shortcut: --standard-transparency)
               Use a transparency algorithm that uses  only  standard  OpenGL  features  for  the  rendering  of
               transparent surfaces.

       The  following  three options determine the rotation speed of the deformed cuboctahedron 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.

       --speed-x float
               Rotation speed around the x axis (default: 0.0).

       --speed-y float
               Rotation speed around the y axis (default: 0.0).

       --speed-z float
               Rotation speed around the z axis (default: 0.0).

INTERACTION

       If  you  run  this  program in standalone mode, you can rotate the deformed cuboctahedron by dragging the
       mouse while pressing the left mouse button.  This rotates  the  cuboctahedron  in  3d.   To  examine  the
       deformed  cuboctahedron  at  your  leisure,  it  is best to set all speeds to 0.  Otherwise, the deformed
       cuboctahedron will rotate while the left mouse button is not pressed.

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

COPYRIGHT

       Copyright  © 2023 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>, 06-mar-2023.

X Version 11                                   6.08 (10-Oct-2023)                             cubocteversion(6x)