summaryrefslogtreecommitdiffstats
path: root/hacks/glx/projectiveplane.man
blob: 8adea81b7557e026b6c5dc26b1cb836625ee8703 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
.TH XScreenSaver 1 "" "X Version 11"
.SH NAME
projectiveplane - Draws a 4d embedding of the real projective plane.
.SH SYNOPSIS
.B projectiveplane
[\-display \fIhost:display.screen\fP]
[\-install]
[\-visual \fIvisual\fP]
[\-window]
[\-root]
[\-delay \fIusecs\fP]
[\-fps]
[\-mode \fIdisplay-mode\fP]
[\-wireframe]
[\-surface]
[\-transparent]
[\-appearance \fIappearance\fP]
[\-solid]
[\-distance-bands]
[\-direction-bands]
[\-colors \fIcolor-scheme\fP]
[\-twosided-colors]
[\-distance-colors]
[\-direction-colors]
[\-depth-colors]
[\-view-mode \fIview-mode\fP]
[\-walk]
[\-turn]
[\-walk-turn]
[\-orientation-marks]
[\-projection-3d \fImode\fP]
[\-perspective-3d]
[\-orthographic-3d]
[\-projection-4d \fImode\fP]
[\-perspective-4d]
[\-orthographic-4d]
[\-speed-wx \fIfloat\fP]
[\-speed-wy \fIfloat\fP]
[\-speed-wz \fIfloat\fP]
[\-speed-xy \fIfloat\fP]
[\-speed-xz \fIfloat\fP]
[\-speed-yz \fIfloat\fP]
[\-walk-direction \fIfloat\fP]
[\-walk-speed \fIfloat\fP]
.SH DESCRIPTION
The \fIprojectiveplane\fP program shows a 4d embedding of the real
projective plane.  You can walk on the projective plane, see it turn
in 4d, or walk on it while it turns in 4d.  The fact that the surface
is an embedding of the real projective plane in 4d can be seen in the
depth colors mode: 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.  However, at the
three lines of self-intersection the parts of the surface that
intersect have different colors, i.e., different 4d depths.
.PP
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).
.PP
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.  The origin can be
visualized in different manners.  When using distance 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 the 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, the line at infinity is the line that is
displayed as fully saturated magenta.  When two-sided 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.
.PP
Note that 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.
.PP
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.  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.
.PP
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.
.PP
There are three display modes for the projective plane: mesh
(wireframe), solid, or 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.
.PP
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.
.PP
Finally, the colors with with the projective plane is drawn can be set
to two-sided, distance, direction, or depth.  In two-sided mode, 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.  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.  The origin is displayed in
red, 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 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.
.PP
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 (the xy,
xz, and yz planes).
.PP
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.
.PP
This program is somewhat inspired by Thomas Banchoff's book "Beyond
the Third Dimension: Geometry, Computer Graphics, and Higher
Dimensions", Scientific American Library, 1990.
.SH OPTIONS
.I projectiveplane
accepts the following options:
.TP 8
.B \-window
Draw on a newly-created window.  This is the default.
.TP 8
.B \-root
Draw on the root window.
.TP 8
.B \-install
Install a private colormap for the window.
.TP 8
.B \-visual \fIvisual\fP
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.
.TP 8
.B \-delay \fImicroseconds\fP
How much of a delay should be introduced between steps of the
animation.  Default 10000, or 1/100th second.
.TP 8
.B \-fps
Display the current frame rate, CPU load, and polygon count.
.PP
The following four options are mutually exclusive.  They determine how
the projective plane is displayed.
.TP 8
.B \-mode random
Display the projective plane in a random display mode (default).
.TP 8
.B \-mode wireframe \fP(Shortcut: \fB\-wireframe\fP)
Display the projective plane as a wireframe mesh.
.TP 8
.B \-mode surface \fP(Shortcut: \fB\-surface\fP)
Display the projective plane as a solid surface.
.TP 8
.B \-mode transparent \fP(Shortcut: \fB\-transparent\fP)
Display the projective plane as a transparent surface.
.PP
The following three options are mutually exclusive.  They determine
the appearance of the projective plane.
.TP 8
.B \-appearance random
Display the projective plane with a random appearance (default).
.TP 8
.B \-appearance solid \fP(Shortcut: \fB\-solid\fP)
Display the projective plane as a solid object.
.TP 8
.B \-appearance distance-bands \fP(Shortcut: \fB\-distance-bands\fP)
Display the projective plane as see-through bands that lie at
increasing distances from the origin.
.PP
.TP 8
.B \-appearance direction-bands \fP(Shortcut: \fB\-direction-bands\fP)
Display the projective plane as see-through bands that lie at
increasing angles with respect to the origin.
.PP
The following four options are mutually exclusive.  They determine how
to color the projective plane.
.TP 8
.B \-colors random
Display the projective plane with a random color scheme (default).
.TP 8
.B \-colors twosided \fP(Shortcut: \fB\-twosided-colors\fP)
Display the projective plane with two colors: red on one "side" and
green on the "other side."  Note that 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.
.TP 8
.B \-colors distance \fP(Shortcut: \fB\-distance-colors\fP)
Display the projective plane with fully saturated colors that depend
on the distance of the points on the projective plane to the origin.
The origin is displayed in red, 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.
.TP 8
.B \-colors direction \fP(Shortcut: \fB\-direction-colors\fP)
Display the projective plane 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.
.TP 8
.B \-colors depth \fP(Shortcut: \fB\-depth\fP)
Display the projective plane 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.
.PP
The following four options are mutually exclusive.  They determine how
to view the projective plane.
.TP 8
.B \-view-mode random
View the projective plane in a random view mode (default).
.TP 8
.B \-view-mode turn \fP(Shortcut: \fB\-turn\fP)
View the projective plane while it turns in 4d.
.TP 8
.B \-view-mode walk \fP(Shortcut: \fB\-walk\fP)
View the projective plane as if walking on its surface.
.TP 8
.B \-view-mode walk-turn \fP(Shortcut: \fB\-walk-turn\fP)
View the projective plane as if walking on its surface.  Additionally,
the projective plane turns around the true 4d planes (the xy, xz, and
yz planes).
.PP
The following options determine whether orientation marks are shown on
the projective plane.
.TP 8
.B \-orientation-marks
Display orientation marks on the projective plane.
.TP 8
.B \-no-orientation-marks
Don't display orientation marks on the projective plane (default).
.PP
The following three options are mutually exclusive.  They determine
how the projective plane is projected from 3d to 2d (i.e., to the
screen).
.TP 8
.B \-projection-3d random
Project the projective plane from 3d to 2d using a random projection
mode (default).
.TP 8
.B \-projection-3d perspective \fP(Shortcut: \fB\-perspective-3d\fP)
Project the projective plane from 3d to 2d using a perspective
projection.
.TP 8
.B \-projection-3d orthographic \fP(Shortcut: \fB\-orthographic-3d\fP)
Project the projective plane from 3d to 2d using an orthographic
projection.
.PP
The following three options are mutually exclusive.  They determine
how the projective plane is projected from 4d to 3d.
.TP 8
.B \-projection-4d random
Project the projective plane from 4d to 3d using a random projection
mode (default).
.TP 8
.B \-projection-4d perspective \fP(Shortcut: \fB\-perspective-4d\fP)
Project the projective plane from 4d to 3d using a perspective
projection.
.TP 8
.B \-projection-4d orthographic \fP(Shortcut: \fB\-orthographic-4d\fP)
Project the projective plane from 4d to 3d using an orthographic
projection.
.PP
The following six options determine the rotation speed of the
projective plane 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.
.TP 8
.B \-speed-wx \fIfloat\fP
Rotation speed around the wx plane (default: 1.1).
.TP 8
.B \-speed-wy \fIfloat\fP
Rotation speed around the wy plane (default: 1.3).
.TP 8
.B \-speed-wz \fIfloat\fP
Rotation speed around the wz plane (default: 1.5).
.TP 8
.B \-speed-xy \fIfloat\fP
Rotation speed around the xy plane (default: 1.7).
.TP 8
.B \-speed-xz \fIfloat\fP
Rotation speed around the xz plane (default: 1.9).
.TP 8
.B \-speed-yz \fIfloat\fP
Rotation speed around the yz plane (default: 2.1).
.PP
The following two options determine the walking speed and direction.
.TP 8
.B \-walk-direction \fIfloat\fP
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 (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 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.
.TP 8
.B \-walk-speed \fIfloat\fP
The walking speed is measured in percent of some sensible maximum
speed (default: 20.0).
.SH INTERACTION
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.  This rotates the projective plane in 3D, i.e.,
around the wx, wy, and wz planes.  If you press the shift key 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.  To examine
the projective plane at your leisure, it is best to set all speeds to
0.  Otherwise, the projective plane will rotate while the left mouse
button is not pressed.  This kind of interaction is not available in
the two walk modes.
.SH ENVIRONMENT
.PP
.TP 8
.B DISPLAY
to get the default host and display number.
.TP 8
.B XENVIRONMENT
to get the name of a resource file that overrides the global resources
stored in the RESOURCE_MANAGER property.
.SH SEE ALSO
.BR X (1),
.BR xscreensaver (1)
.SH COPYRIGHT
Copyright \(co 2005-2014 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.
.SH AUTHOR
Carsten Steger <carsten@mirsanmir.org>, 03-oct-2014.