projectiveplane(6x)

๐Ÿ’– projectiveplane ๐Ÿ’–

okay so bestie, gather round, because this one is a whole experience and i need you to be seated for it. this is projectiveplane from the XScreenSaver manual, and it is genuinely one of the prettiest, nerdiest things you will ever put on a screen. no cap. ๐Ÿฆ‹


โœจ NAME โœจ

projectiveplane โ€” draws a 4d embedding of the real projective plane. like, a whole four-dimensional mathematical object. on your monitor. for free. ๐Ÿ’…


๐ŸŒธ SYNOPSIS ๐ŸŒธ

projectiveplane [--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] [--change-colors] [--depth-
colors] [--view-mode view-mode] [--walk] [--turn] [--walk-turn]
[--orientation-marks] [--projection-3d mode] [--perspective-3d]
[--orthographic-3d] [--projection-4d mode] [--perspective-4d]
[--orthographic-4d] [--speed-wx float] [--speed-wy float] [--speed-wz
float] [--speed-xy float] [--speed-xz float] [--speed-yz float] [--walk-
direction float] [--walk-speed float]

(yeah that's a lot of flags. don't panic. part 2 of this page breaks them all down one by one and honestly? they all slay.) ๐ŸŽ€


๐Ÿซถ DESCRIPTION ๐Ÿซถ

okay so the projectiveplane program shows a 4d embedding of the real projective plane. that's the whole vibe. โœจ

you can do three things with it:

  1. walk on the projective plane ๐Ÿ‘Ÿ
  2. see it turn in 4d ๐Ÿ”„
  3. walk on it while it turns in 4d ๐Ÿ•บ

and the fact that this surface is genuinely an embedding of the real projective plane in 4d is something you can literally see โ€” like, with your eyes โ€” in the depth colors mode (using static colors). here's the recipe, bestie: set all rotation speeds to 0 and the projection mode to 4d orthographic projection. in its default orientation, the embedding of the real projective plane will then project to the Roman surface, which has three lines of self-intersection. but here's the tea โ˜• โ€” at those three lines of self-intersection, the parts of the surface that intersect have different colors, i.e., different 4d depths. so it's not actually touching itself. the projection is just lying to you. iconic behavior honestly. ๐Ÿ’€

the real projective plane 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 projective plane. while walking on the projective plane, you will notice that the orientation of the curling arrows changes โ€” which it must, because the projective plane is non-orientable. it literally cannot keep its arrows pointing the same way and that is not a bug, that is the whole personality. ๐Ÿ˜ญ

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, like all lines in the projective plane, is topologically a circle. points on the line at infinity are also used to model directions in projective geometry.

the origin can be visualized in different manners:

  • when using distance colors (and using static colors), the origin is the point that is displayed as fully saturated red, which is easier to see as the center of the reddish area on the projective plane. ๐Ÿ“
  • alternatively, when using distance bands, the origin is the center of the only band that projects to a disk.
  • when using direction bands, the origin is the point where all direction bands collapse to a point.
  • finally, when orientation markers are being displayed, the origin is the point where all orientation markers are compressed to a point.

the line at infinity can also be visualized in different ways:

  • when using distance colors (and using static colors), the line at infinity is the line that is displayed as fully saturated magenta. ๐Ÿ’œ
  • when two-sided (and static) colors are used, the line at infinity lies at the points where the red and green "sides" of the projective plane meet โ€” of course, the real projective plane only has one side, so this is a design choice of the visualization. ๐Ÿ™ˆ
  • alternatively, when orientation markers are being displayed, the line at infinity is the place where the orientation markers change their orientation.
note: when the projective plane is displayed with bands, the orientation markers are placed in the middle of the bands. for distance bands, the bands are chosen in such a way that the band at the origin is only half as wide as the remaining bands, which results in a disk being displayed at the origin that has the same diameter as the remaining bands. this choice, however, also implies that the band at infinity is half as wide as the other bands. since the projective plane is attached to itself (in a complicated fashion) at the line at infinity, effectively the band at infinity is again as wide as the remaining bands. however, since the orientation markers are displayed in the middle of the bands, this means that only one half of the orientation markers will be displayed twice at the line at infinity if distance bands are used. if direction bands are used, or if the projective plane is displayed as a solid surface, the orientation markers are displayed fully at the respective sides of the line at infinity.

the program projects the 4d projective plane to 3d using either a perspective or an orthographic projection. which of the two alternatives looks more appealing is up to you โ€” no judgement here, it's your screen. ๐ŸŽ€ however, two famous surfaces are obtained if orthographic 4d projection is used: the Roman surface and the cross cap. if the projective plane is rotated in 4d, the result of the projection for certain rotations is a Roman surface and for certain rotations it is a cross cap. the easiest way to see this is to set all rotation speeds to 0 and the rotation speed around the yz plane to a value different from 0. however, for any 4d rotation speeds, the projections will generally cycle between the Roman surface and the cross cap. the difference is where the origin and the line at infinity will lie with respect to the self-intersections in the projections to 3d. ๐ŸŒ€

the projected projective plane can then be projected to the screen either perspectively or orthographically. when using the walking modes, perspective projection to the screen will be used.

there are three display modes for the projective plane:

  • mesh (wireframe)
  • solid
  • transparent

furthermore, the appearance of the projective plane can be as a solid object or as a set of see-through bands. the bands can be distance bands, i.e., bands that lie at increasing distances from the origin, or direction bands, i.e., bands that lie at increasing angles with respect to the origin.

when the projective plane is displayed with direction bands, you will be able to see that each direction band (modulo the "pinching" at the origin) is a Moebius strip, which also shows that the projective plane is non-orientable. ๐Ÿฆ‹

finally, the colors with which the projective plane is drawn can be set to one-sided, two-sided, distance, direction, or depth:

  • in one-sided mode, the projective plane is drawn with the same color on both "sides."
  • in two-sided mode (using static colors), the projective plane is drawn with red on one "side" and green on the "other side." as described above, the projective plane only has one side, so the color jumps from red to green along the line at infinity. this mode enables you to see that the projective plane is non-orientable. ๐Ÿ’… if changing colors are used in two-sided mode, changing complementary colors are used on the respective "sides."
  • in distance mode, the projective plane is displayed with fully saturated colors that depend on the distance of the points on the projective plane to the origin. if static colors are used, the origin is displayed in red, while the line at infinity is displayed in magenta. if the projective plane is displayed as distance bands, each band will be displayed with a different color. ๐ŸŒˆ
  • in direction mode, the projective plane is displayed with fully saturated colors that depend on the angle of the points on the projective plane with respect to the origin. angles in opposite directions to the origin (e.g., 15 and 205 degrees) are displayed in the same color, since they are projectively equivalent. if the projective plane is displayed as direction bands, each band will be displayed with a different color.
  • finally, in depth mode the projective plane is displayed with colors chosen depending on the 4d "depth" (i.e., the w coordinate) of the points on the projective plane at its default orientation in 4d. as discussed above, this mode enables you to see that the projective plane does not intersect itself in 4d. ๐Ÿ”ฅ

the rotation speed for each of the six planes around which the projective plane rotates can be chosen. for the walk-and-turn mode, only the rotation speeds around the true 4d planes are used โ€” that's the xy, xz, and yz planes. ๐Ÿ‘‘

furthermore, in the walking modes the walking direction in the 2d base square of the projective plane 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 of the projective plane:

  • 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 from the origin to the line at infinity and back (analogous to a direction band). โžก๏ธ
  • any other value results in a curved path from the origin to the line at infinity and back. ๐ŸŒŠ

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


okay that's the whole description and honestly? we ate. but hold on bestie โ€” this is only part 1. there's a whole part 2 with every single option, flag and default coming your way, so don't go anywhere. ๐ŸŽ€โœจ

โœจ OPTIONS โœจ

okay so projectiveplane takes all of these, and there are a lot, but likeโ€ฆ we're gonna get through them together bestie ๐Ÿซถ

your basic window stuff ๐ŸชŸ

  • --window โ€” draw on a brand-new window that it makes just for you. this is the default, periodt.
  • --root โ€” draw on the root window instead. living that desktop-wallpaper life.
  • --window-id number โ€” draw on the specific window with that id. yes, that one. you know the one.
  • --install โ€” install a private colormap for the window. it's giving exclusive ๐Ÿ’…
  • --visual visual โ€” pick which visual to use. legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual.

pacing & stats โฑ๏ธ

  • --delay microseconds โ€” how much of a delay should be introduced between steps of the animation. default is 10000, which is literally 1/100th second.
  • --fps โ€” display the current frame rate, CPU load, and polygon count. number go up ๐Ÿ“ˆ

HOW IT SHOWS UP (mode) ๐ŸŒˆ

the following four options are mutually exclusive โ€” you pick one, you don't get to have all four. they decide how the projective plane gets displayed.

  • --mode random โ€” display the projective plane in a random display mode. this is the default!
  • --mode wireframe (shortcut: --wireframe) โ€” display it as a wireframe mesh. skeleton vibes, iconic.
  • --mode surface (shortcut: --surface) โ€” display it as a solid surface. solid, literally.
  • --mode transparent (shortcut: --transparent) โ€” display it as a transparent surface. see-through queen.

HOW IT LOOKS (appearance) ๐Ÿงš

these next three are also mutually exclusive. they decide what the projective plane looks like.

  • --appearance random โ€” display it with a random appearance. default, obviously.
  • --appearance solid (shortcut: --solid) โ€” display the projective plane as a solid object.
  • --appearance distance-bands (shortcut: --distance-bands) โ€” display it as see-through bands that lie at increasing distances from the origin.
  • --appearance direction-bands (shortcut: --direction-bands) โ€” display it as see-through bands that lie at increasing angles with respect to the origin.

COLORING IT ๐ŸŽจ

the following four options are mutually exclusive. (yes bestie, the page says "four" and then lists six. we don't make the rules, we just report them ๐Ÿ’€) they determine how to color the projective plane.

  • --colors random โ€” display it with a random color scheme. default, slay.
  • --colors onesided (shortcut: --onesided-colors) โ€” display it with a single color.
  • --colors twosided (shortcut: --twosided-colors) โ€” display it with two colors: one color for one "side" and the complementary color on the "other side." for static colors, those colors are red and green. worth knowing: the line at infinity lies at the points where the red and green "sides" of the projective plane meet โ€” i.e., where the orientation of the projective plane reverses. that's the tea โ˜•
  • --colors distance (shortcut: --distance-colors) โ€” display it with fully saturated colors that depend on the distance of the points on the projective plane to the origin. for static colors, the origin shows up in red, while the line at infinity shows up in magenta. and if the projective plane is displayed as distance bands, each band gets its own different color.
  • --colors direction (shortcut: --direction-colors) โ€” display it with fully saturated colors that depend on the angle of the points on the projective plane with respect to the origin. angles in opposite directions to the origin (like 15 and 205 degrees) get the same color, because they're projectively equivalent. if it's displayed as direction bands, each band gets a different color.
  • --colors depth (shortcut: --depth) โ€” display it with colors chosen depending on the 4d "depth" (i.e., the w coordinate) of the points on the projective plane at its default orientation in 4d.

static or changing? ๐Ÿ’ซ

these decide whether the colors are locked in or doing the most:

  • --change-colors โ€” change the colors with which the projective plane is displayed dynamically.
  • --no-change-colors โ€” use static colors to display it. this is the default.

HOW YOU'RE VIEWING IT ๐Ÿ‘€

the following four are mutually exclusive. they determine how to view the projective plane.

  • --view-mode random โ€” view it in a random view mode. default!
  • --view-mode turn (shortcut: --turn) โ€” view the projective plane while it turns in 4d.
  • --view-mode walk (shortcut: --walk) โ€” view it as if walking on its surface. main character energy, honestly ๐Ÿšถโ€โ™€๏ธ
  • --view-mode walk-turn (shortcut: --walk-turn) โ€” view it as if walking on its surface, and additionally the projective plane turns around the true 4d planes (the xy, xz, and yz planes).

orientation marks ๐ŸŒธ

  • --orientation-marks โ€” display orientation marks on the projective plane.
  • --no-orientation-marks โ€” don't display them. this is the default.

3D โ†’ 2D projection ๐Ÿ“

the following three are mutually exclusive. they decide how the projective plane is projected from 3d to 2d (i.e., to the screen).

  • --projection-3d random โ€” project from 3d to 2d using a random projection mode. default.
  • --projection-3d perspective (shortcut: --perspective-3d) โ€” project from 3d to 2d using a perspective projection.
  • --projection-3d orthographic (shortcut: --orthographic-3d) โ€” project from 3d to 2d using an orthographic projection.

4D โ†’ 3D projection ๐Ÿฆ‹

the following three are mutually exclusive. they decide how the projective plane is projected from 4d to 3d.

  • --projection-4d random โ€” project from 4d to 3d using a random projection mode. default.
  • --projection-4d perspective (shortcut: --perspective-4d) โ€” project from 4d to 3d using a perspective projection.
  • --projection-4d orthographic (shortcut: --orthographic-4d) โ€” project from 4d to 3d using an orthographic projection.

rotation speeds ๐ŸŒ€

the following six options set the rotation speed of the projective plane around the six possible hyperplanes. speed is measured in degrees per frame. keep them relatively small โ€” like less than 4 in magnitude, bestie. some very important notes before you go changing numbers:

  • in walk mode, all speeds are ignored.
  • in walk-and-turn mode, the 3d rotation speeds are ignored (that's the wx, wy, and wz speeds).
  • in walk-and-turn mode, you have to use smaller speeds than in turn mode to get a nice visualization. so, in walk-and-turn mode, the speeds you picked get divided by 5 internally. iconique behaviour, honestly.

the speeds:

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

walking ๐Ÿšถ

these two decide your walking speed and direction.

  • --walk-direction float โ€” the walking direction, measured as an angle in degrees in the 2d square that forms the coordinate system of the surface of the projective plane (default: 83.0). here's how the angles work:
    • 0 or 180 โ†’ the walk goes along a circle at a randomly chosen distance from the origin (parallel to a distance band).
    • 90 or 270 โ†’ the walk goes directly from the origin to the line at infinity and back (analogous to a direction band).
    • any other value โ†’ a curved path from the origin to the line at infinity and back.
  • --walk-speed float โ€” the walking speed, measured in percent of some sensible maximum speed (default: 20.0).

๐ŸŽฎ INTERACTION ๐ŸŽฎ

okay this part is fun. if you run this program in standalone mode in its turn mode, you can rotate the projective plane by dragging the mouse while pressing the left mouse button. that rotates it in 3D โ€” i.e., around the wx, wy, and wz planes.

if you press shift while dragging the mouse with the left button pressed, the projective plane is rotated in 4D โ€” i.e., around the xy, xz, and yz planes. the glow-up is real โœจ

to examine the projective plane at your leisure, it's best to set all speeds to 0. otherwise, the projective plane will rotate while the left mouse button is not pressed and it will not sit still for you. ๐Ÿ™ˆ

heads up bestie: this kind of interaction is not available in the two walk modes. no mouse-dragging for you there.

๐ŸŒ 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 ยฉ 2013-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>, 06-jan-2020.


aaaaand that's the whole page, bestie, we ate that fr fr ๐Ÿ’… this one's from X Version 11, version 6.17-1.fc44, dated 13-Oct-2026 โ€” go forth and rotate some planes in 4d, you've got this ๐Ÿฆ‹๐Ÿ’–

๐Ÿ“ฆ where this page comes from