<<

Appendix A

OpenGL Function Reference

The graphics routines of OPEN are based on OPENGL. In order to use OPEN GEOMETRY you need do not need to know anything about OPENGL, but still it may be interesting to get a more profound insight in the background of the OPEN GEOMETRY class library. If you want to use OPEN GEOMETRY for a certain specific task, you might feel the need to adapt some of its drawing and shading routines. In this case you will need to know a few basics about OPENGL. Therefore, we give a very short description of the most important OPENG L functions. Of course, this list is far from complete. If you need more information, please refer to "pure" OPENGL books (e.g., [1], [17], or [36]). We have sorted the routines according to the following groups:

1. Coordinate Transformations glFrustum, glLoadldentity, glLoadMatrix, glMatrixMode, glMultMatrix, glPopMatrix, glPusbMatrix, glRotate, glScale, glTranslate 2. Primitives (Lines, Polygons, Points, ... ) glBegin, glCullFace, glEdgeFIag, glEnd, glFrontFace, glGetPolygonStripple, glLineStrippIe, glLine Widtb, glPointSize, glPolygonMode, glPolygonStrip• pIe, glVertex 3. Color glClearColor, glClearlndex, glColor, glColorv, glColorMask, glIndex, glIn• dexMask, glLogicOp, glSbadeModel 622 Appendix A. OpenGL Function Reference

4. Lighting glColorMaterial, glGetMaterial, glGetLight, glLight, glLightModel, glMate• rial, glNorma13

5. Texture Mapping glTexCoord, glTexEnv, glTexGen, glTexlmage2D, glTexImagelD, glTexPa• rameter, glEnable

6. Raster Graphics glCopyPixels, glDrawPixels, glPixelMap, glPixelStore, glPixelTransfer, glPix• elZoom, glReadPixels, glRasterPos

A.I Coordinate Transformations Whenever you write OPENGL code, it is important to have an understanding of how coordinate transformations in OPENGL work. In particular, you have to think about the order of the transformations if you apply several in a row. Always keep in mind that OPENG L transformations will not change the coordinates of your objects, whereas many OPEN GEOMETRy-transformations will actually change them.

void glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); <> Multiplies the current matrix by a matrix <> for a perspective-view frustum.

left, right define left and right clipping planes bottom, top define bottom and top clipping planes near, far distance to the near and far clipping planes I

I void glLoadldentity( void ); <> Sets the current matrix to Identity.

void glLoadMatrix ( const TYPE* m ); <> Sets the current matrix to the one specified. m 4x4 matrix I

I void glMatrixMode( GLenum mode ); Section A.I. Coordinate Transformations 623

o Specifies the current matrix mode. mode can be GLMODELVIEW, GL_PROJECION, GLTEXTURE

I void glMultMatrix ( TYPE *m ); o Multiplies the current matrix by the one specified. m 4x4 matrix I

I void glPopMatrix( void ); o Pops the current matrix off the matrix stack.

I void glPushMatrix( void ); o Pushes the current matrix onto the matrix stack.

I void glRotate ( TYPE angle, TYPE x, TYPE y, TYPE z ); o Rotates the current matrix by a rotation matrix.

angle specifies the angle of rotation in degrees x,y,z vector from the origin that is used as the axis of rotation.

I void glScale ( TYPE x, TYPE y, TYPE z ); o Multiplies the current matrix by a matrix that o scales an object along the x,y,z axes. x,y,z Scale factors along the x,y, and z axes I

I void glTranslate ( TYPE x, TYPE y, TYPE z ); o Multiplies the current matrix by a matrix that o translates an object along the axes. x,y,z translation vector I

A.2 Primitives OPENGL offers only a few geometrical primitives to be drawn: lines, polygons, and points. The auxiliary libraries provide the programmer with some other "primitives" like spheres and teapots. 624 Appendix A. OpenGL Function Reference

void glBegin( GLenum mode ); o Sets the beginning of a group of vertices o that build one or more primitives. mode type of primitive operation GLPOINTS individual points GL_LINES simple lines GL_LINKSTRlP series of connected lines GL_LINKLOOP same as above with first and last vertices connected GLTRlANGLES simple triangle GL_TRlANGLESYAN linked fan of triangles GL_TRlANGLES_STRIP linked strip of triangles GLPOLYGON convex polygon GLQUADS four-sided polygon GLQUAD_STRlP linked strip of four-sided polygons

I void glCullFace( GLenum mode ); mode GLYRONT, GL_BACK, GLYRONLAND_BACK;

I void glEdgeFlag ( GLbooleanflag ); o Indicates whether a vertex should be considered o as initializing a boundary edge of a polygon. flag Sets the edge flag to this value. GL_TRUE (default) or GLFALSE

I void glEnd ( ); o Terminates a group of vertices specified by glBegin ( ).

I void glFrontFace( GLenum mode ); o Defines the front and back sides of a polygon. mode GL_CCW faces with counterclockwise orientation are considered front-facing. (default) GL_CW faces with clockwise orientation are considered front-facing.

I void glGetPolygonStipple( GLubyte *mask ); o Returns the stipple pattern of a polygon. Section A.2. Primitives 625

Pointer to the polygon stipple pattern.

I void glLineStipple( GLint factor, GLushort pattern ); o Specifies the stipple pattern for GLLINE... o primitive operations. First enable strip piing o by calling glEnable( GLLINKSTIPPLE ). factor The pattern is stretched out by this factor. pattern Sets the 16-bit long strippling pattern. I~------~

I void glLine Width ( GLBoat width ); o Sets the current line width. width width of line in pixels (default is 1.0)

I void glPointSize( GLBoat size) ; o Sets the current point size. size size of point (default is 1.0) I

I void glPolygonMode( GLenum face, GLenum mode) ; o Sets the drawing mode for the front faces and back faces of a polygon. face Specifies which faces are affected by the mode change. GLFRONT, GL_BACK, GL_FRONT_AND_BACK mode can be GL_POINT, GL_LINE, GL_FILL

I void glPolygonStipple( const GLubyte* mask ) o Specifies the stipple pattern used to fill polygons. *mask pointer to a 32 * 32-bit array that contains the stipple pattern.

I void gIVertex<2,3,4> ( TYPE coords ) o Specifies the 3D coordinates of a vertex. o Example: glVertex3f( 1.0 , 1.5 , 4.0 ); coords can be 1-4 dimensional (x,y,z,w) w coordinate for scaling purposes 626 Appendix A. OpenGL Function Reference

(default is 1.0)

I void glClearColor( GLc1ampf red, GLc1ampf green, GLc1ampf blue, GLc1ampf alpha ) o Specifies the current clear color for glClear.

I void glClearlndex( GLfloat index) ; o Specifies the clearing value for the color index buffer. index clear color value

I void glColor<3,4> ( TYPE red, TYPE green, TYPE blue, TYPE alpha ); o Sets the current drawing color.

I void glColor<3,4>v( const TYPE *v); o Sets the current drawing color. v points to an array with four elements

I void glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); o Defines the current mask used to control o writing in RGBA mode.

I void glIndex ( TYPE index); o Sets the current drawing index color. index color index; I

I void glIndexMask( GLuint mask ); o Sets the mask used to control writing into the color o index buffer by protecting individual bits from being set. mask bit mask;

I void glLogicOp( GLenum opcode ); Section A.2. Primitives 627

(> Defines the current logical pixel operation for color o index mode. opcode can be GLCLEAR, GLCOPY (default), GLNOOP, GL_SET, GL_COPY_INVERTED, GLINVERT, GL_AND, GLOR, GLNOR, GL_XOR, GL_EQUIV, GLAND_INVERTED, GLOKINVERTED;

I void glShadeModel( GLenum mode); o Specifies the current shade model mode GLFLAT or GLSMOOTH (default) ;

A.3 Color OPENGL allows you to set RGB colors. Furthermore, it enables the programmer to set a-values for transparency.

void glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) (> Specifies the current clear color for glClear.

I void glClearIndex( GLf-loat index) ; o Specifies the clearing value for the color index buffer. index clear color value I

I void glColor<3,4> ( TYPE red, TYPE green, TYPE blue, TYPE alpha ); (> Sets the current drawing color.

I void glColor<3,4>v( const TYPE *v); o Sets the current drawing color. v points to an array with four elements

I void glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) ; 628 Appendix A. OpenGL Function Reference

<> Defines the current mask used to control <> writing in RGBA mode.

I void glIndex ( TYPE index); <> Sets the current drawing index color. index color index

I void glIndexMask( GLuint mask ); <> Sets the mask used to control writing into the color <> index buffer by protecting individual bits from being set. mask bit mask

I void glLogicOp( GLenum opcode ); <> Defines the current logical pixel operation for color <> index mode. opcode can be GLCLEAR, GLCOPY (default), GLNOOP, GL_SET, GL_COPYJNVERTED, GLJNVERT, GL-AND, GL_OR, GLNOR, GL_XOR, GL-EQUIV, GL_ANDJNVERTED, GLOKINVERTED;

I void glShadeModel ( GLenum mode ); <> Specifies the current shade model mode GLYLAT or GL_SMOOTH (default) ;

A.4 Lighting

When it comes to lighting, OPENG L offers a palette of functions that allow you to use a number of light sources and to provide the objects with physical properties like shininess, etc. Remember that OPEN GEOMETRY does not use those functions by default, and that it is up to the programmer to introduce the corresponding code. Section A.4. Lighting 629

void glColorMaterial( GLenum face, GLenum mode); <> Allows material colors to track the color set by glColor. face GLFRONT, GLJ3ACK or GLFRONT-AND_BACK mode GLEMISSION, GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR or GL_AMBIENT-AND_DIFFUSE

I void glGetMaterialv( GLenum face, GLenum pname, TYPE param ) <> Returns the current material property settings. face GLFRONT, GLJ3ACK or GLYRONT_AND_BACK pname: param: GL_EMISSION RGBA values GL_AMBIENT RGBA values GL-.DIFFUSE RGBA values GLSPECULAR RGBA values GL_SHININESS specular exponent GL_COLORJNDEXES 3 values ( ambient, diffuse, specular components )

I void glGetLightv( GLenum light, GLenum pname, TYPE *params ); <> Returns information about the current light source settings. light light-source GL_LIGHTO to GL-LIGHT7 pname specifies which information about the light source is being queried params array of integer or floating-point where the return values are stored pname: params: GL_AMBIENT RGBA values GL_DIFFUSE RGBA values GLSPECULAR RGBA values GLYOSITION X,y,z coordinates of light source plus one element ( usually 1.0 ) direction vector for spot light GL_SPOT_EXPONENT spot exponent GL_SPOT_CUTOFF cutoff angle of the spot source 630 Appendix A. OpenGL Function Reference

GL_SPOT_CONSTANT_ATTENUATION constant attenuation GL_SPOTLINEAKATTENUATION linear attenuation GL_SPOT_QUADRATIC~TTENUATION quadratic attenuation

I void glLight ( GLenum light, GLenum pname, TYPE param ); o Sets the parameters of a light source.

light light source GL-LIGHTO to GL_LIGHT7 pname defines which lighting parameter is to be set ( see glGetlight-pname ) param one or more values that are required to set the lighting parameter

I void glLightModel ( GLenum pname, TYPE param ); o Sets the lighting model parameters.

pname: params: model parameter value(s) for model parameter GL-LIGHT_MODEL~MBIENT array that points to four RGBA components GL-LIGHT_MODEL-LOCAL_ VIEWER GL-LIGHT_MODEL_TWO_SIDED 0.0 indicates that only fronts of polygons are included in illumination calculations

I void glMaterial ( GLenum face, GLenum pname, TYPE param ); o Sets the material parameters.

face GL_FRONT, GL_BACK or GL_FRONT~NDJ3ACK pname: param: GL_EMISSION RGBA values GL_AMBIENT RGBA values GL_DIFFUSE RGBA values GL_SPECULAR RGBA values GL_AMBIENT~ND-DIFFUSE RGBA values GL_SHININESS specular exponent (1 value) GLCOLOKINDEXES 3 values ( ambient, diffuse, specular components ) Section A.4. Lighting 631

void glNorma13 ( TYPE nx, TYPE ny, TYPE nz ); <> Defines a normal vector whose direction is up and <> perpendicular to the surface of the polygon. nx, ny, nz x, y, z magnitudes of the normal vector I

I void glNorma13v( const TYPE *v ); v array of three elements where normal vector is stored

A.5 Texture Mapping Texture mapping is one of the best features that OPENGL offers. If the mapping is done by hardware, one can produce realistic images in a very short time.

void glTexCoord< 1,2,3,4> ( TYPE 5 , TYPE t , TYPE r , TYPE q ); <> Specifies the current texture image coordinates (lD-4D) <> for the following vertex of a textured polygon.

s,t x,y coordinates on texture image (0.0 - 1.0) texture image depth coordinate q texture image "time" coordinate I

I void glTexEnv ( GLenum target, GLenum pname , TYPE ); <> Sets parameters for texture-mapping environment.

target must be GL_TEXTURKENV

pname: param: GL_TEXTURKENV_COLOR param is a pointer to an RGBA color value. GL_TEXTURE_ENV_MODE to define type of texture mapping GLDECAL texture is directly mapped GL_BLEND texture is blended by constant color GL_MODULATE texture is shaded 632 Appendix A. OpenGL Function Reference

I void glTexGen ( GLenum coord, GLenum pname, TYPE param ); o Defines parameters for automatic o texture coordinate generation.

coord

pname: param: GL_TEXTURKGENMODE - GLOBJECT~INEAR - GL-EYKLINEAR - GL_SPHERKMAP GL_OBJECTYLANE GL_EYEYLANE

I void glTexlmage2D( GLenum target, GLint level, GLint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); o Describes a two-dimensional texture image

target must be GL_TEXTURK2D level usually 0 (these are multiple texture resolutions (mip mapping)) width texture image width (must be a power of 2 ) + 2*border height texture image height (must be a power of 2 ) + 2*border border width of border (0,1, or 2) format usually GL-RGB(A) or GL_COLOR-INDEX, GL_RED, GL_GREEN, GL_BLUE, GLALPHA, GL~UMINANCE (grayscale), GLALPHA_LUMINANCE type data type of pixel value usually GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GLUNSIGNEDJNT, GLYLOAT pixels array for pixel data I

I void glTexlmagelD( GLenum target, GLint level, GLint components, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); o Describes a one-dimensional texture image

target must be GL_TEXTURK1D Section A.5. Texture Mapping 633

see glTexlmage2D I

I void glTexParameter ( GLenum target, GLenum pname, TYPE param ); <> Defines how the texture image is mapped onto the polygon.

target must be GLTEXTURK1D or GLTEXTURK2D

pname: param: mapping parameters GL_TEXTURK WRAP_S GLCLAMP to clamp texture GL_TEXTURK WRAP_T GL_REPEAT repeat texture until the end of the polygon

GL_TEXTUREMAG_FILTER GL.NEAREST no filtering GL_TEXTUREMINYILTER GL_LINEAR filtering

GLTEXTURKBORDEKCOLOR RGBA value

for mip mapping use GL_NEAREST_MIPMAP _NEAREST _

I void glEnable( parameter) <> This enables texture mapping. parameter GL_TEXTURK2D or GL_TEXTURK1D I

A.6 Raster Graphics Raster graphics are a powerful link between pure mathematical calculations and the actual drawing window. Nevertheless, we tried to avoid them whenever pos• sible, namely, because OPEN GEOMETRY must not rely on the screen resolution: For example, if we produce a print of an image, the resolution of the printing device is usually quite different from of the window size. 634 Appendix A. OpenGL Function Reference

void glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, Glenum type ); <> Copies a block of pixels into the frame buffer at <> a position defined by glRasterPos.

type GL_COLOR to copy color values GL_STENCIL to copy stencil values GL_DEPTH to copy depth values

I void glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); <> Draws a block of pixels into the frame buffer <> at a position defined by glRasterPos.

format usually GL_RGBA or GL_RGB, GL_COLORINDEX, GLRED, GLGREEN, GLBLUE, GLALPHA, GL_LUMINANCE (grayscale) , GL_ALPHA_LUMINANCE type data type of pixel value GLUNSIGNED_BYTE, GL_BYTE, GLBITMAP, GLSHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GLFLOAT

I void glPixelMap ( GLenum map, GLint mapsize, TYPE values) ; <> Sets a lookup table for glCopyPixels, glDrawPixels, glReadPixcls, <> glTexlmage2D, glTexlmagelD. GL_MAP_COLOR or GL_MAP_STENCIL <> have to be enabled with glPixelTransfer.

map: Define a lookup table for GL_PIXELMAP_LTO_I color indices GLPIXEL_MAP_S_TO_S stencil values GL_PIXEL_MAP_LTO_R color indices to red values GL_PIXEL_MAP_LTO_G color indices to green values GL_PIXELMAP_LTO_B color indices to blue values GLPIXEL_MAP_LTO_A color indices to alpha values GL_PIXEL_MAP_KTO_R red values GL_PIXEL_MAP_G_TO_G green values GLPIXEL_MAP_RTO_B blue values GL_PIXEL_MAP_A_ TO_A alpha values

mapsize size of lookup table (must be power of 2) values pointer to lookup table I Section A.6. Raster Graphics 635

I void giPixelStore ( GLenum pname, TYPE param ); o Defines how glDrawPixels, glTexlmagelD, glTexlmage2D, o glReadPixels read and store pixel data. pname: param: result: bytes are swapped when GL_PACK_SWAP_BYTES GLTRUE stored in memory GLUNPACK_SWAP_BYTES GLTRUE read from memory leftmost pixel of bitmap GLPACK_LSRFIRST GL_FALSE is stored/read in bit 0 GLUNPACK_LSRFIRST GL_FALSE instead of bit 7 GLPACK_ROW_LENGTH integer GL_UNPACK_ROW_LENGTH integer GLPACK_SKIP_PIXELS integer GL_ UNPACK_SKIP _PIXELS integer GL_PACK_SKIP _ROWS integer GLUNPACK_SKIP_ROWS integer GL_PACK_ALIGNMENT integer GL_UNPACK_ALIGNMENT integer

I void glPixelTransfer ( GLenum pname, TYPE param ) o Sets pixel-transfer modes that affect the operations o of glDrawPixels( ), glReadPixels( ), glCopyPixels( ), o glTexImagelD( ), glTexImage2D( ) and glGetTexlmage( ). pname GLMAP_COLOR, GLMAP_STENCIL, GL_INDEX_SHIFT, GL_INDEX_OFFSET, GLRED_SCALE, GL_GREEN_SCALE, GL_BLUKSCALE, GLALPHA_SCALE, GLDEPTH_SCALE, GLRED_BIAS, GL_GREEN_BIAS, GL_BLUKBIAS, GL_ALPHA_BIAS, GLDEPTH_BIAS; param GLint, GLfloat parameter value I

I void glPixelZoom( GLfloat xfactor, GLfloat yfactor ) o Sets pixel scaling factors for pixel-transfer operations. xfactor, yfactor pixel scaling factors along the x, y axes I

I void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ) o Reads a block of pixel data from the frame buffer o and stores it in the array pointed to by pixels. 636 Appendix A. OpenGL Function Reference

format indicates the kind of pixel data elements that are read GL_RGBA, GL_RGB, GL_COLOR-INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_LUMINANCE (grayscale) or GL_ALPHA_LUMINANCE; type indicates the data type of each element GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_SHORT, GL_UNSIGNED_SHORT, GLlNT, GLUNSIGNEDJNT, GLFLOAT pixels pointer to array I

I void glRasterPos<234> ( TYPE x, TYPE y, TYPE z, TYPE w ); <> Sets the raster position at the specified coordinates. Appendix B

List of Examples

Example 2.1. Three planets ...... 28 Example 2.2. Kepler's law ...... 32 Example 2.3. Fukuta's theorem ...... 35 Example 2.4. The quadratrix ...... 37 Example 2.5. The evolute ...... 40 Example 2.6. The catacaustic ...... 41 Example 2.8. The pedal ...... 43 Example 2.9. The orthonomic ...... 44 Example 2.9. The antipedal curve and the antiorthonomic ...... 45 Example 2.10. The involute ...... 45 Example 2.12. Offset ...... 47 Example 2.12. Generalized offset curves ...... 48 Example 2.13. Pencil of circles ...... 49 Example 2.14. Confocal conics ...... 51 Example 2.15. Cassini's oval ...... 54 Example 2.16. Propagation of waves ...... 57 Example 2.17. Rolling snail ...... 61 Example 2.18. About cats, dogs, and rabbits ...... 66 Example 2.19. A comet passes a solar system ...... 71 Example 2.20. A complex window opener ...... 74 Example 2.21. Mechanical perspective ...... 79 Example 2.22. Pulley blocks ...... 82 Example 2.23. Maltesien gear ...... 87 Example 2.24. The kinametic map ...... 91 638 Appendix B. List of Examples

Example 2.25. Koch ...... 97 Example 2.26. Autumn leaves ...... 102 Example 2.27. Newton fractals ...... 103 Example 2.28. The ...... 107 Example 2.29. Focal points and catacaustic ...... 111 Example 2.30. Pole and polar ...... 114 Example 2.31. Pascal and Brianchon ...... 116 Example 2.32. Conic caustics ...... 119 Example 2.33. Focal conics ...... 123 Example 2.34. Bezier curves of CCn-continuity ...... 132 Example 2.35. A manipulator for Bezier curves ...... 136 Example 2.36. Edge-orthogonal Bezier patches ...... 139 Example 2.37. Bezier approximation ...... 147 Example 2.38. B-spline base functions ...... 152 Example 2.39. Minimize distance ...... 159 Example 2.40. The isoptic ...... 162 Example 2.41. Class curve ...... 164 Example 2.42. Angle stretch ...... 167 Example 2.43. Refraction on a straight line ...... 172 Example 2.44. Rainbow ...... 176 Example 3.1. Three planes ...... 182 Example 3.2. Some objects ...... 185 Example 3.3. Rocking horse ...... 194 Example 3.4. Tribar ...... 198 Example 3.5. Reconstruction ...... 200 Example 3.6. Impossible cube ...... 201 Example 3.7. Mirrors ...... 201 Example 3.8. Rider's surface ...... 207 Example 3.9. Right helicoid ...... 212 Example 3.10. Ruled surface of order three ...... 213 Example 3.11. Elliptical motion in 3D ...... 216 Example 3.12. A special torse ...... 218 Example 3.13. Intersection of parameterized surfaces ...... 223 Example 3.14. Confocal quadrics ...... 225 Example 3.15. Self-intersections ...... 228 Example 3.16. Cage of gold ...... 230 Example 3.17. A host of PlUcker conoids ...... 234 Example 3.18. Supercyclides ...... 248 Example 3.19. Energy spirals ...... 256 Example 3.20. Candlestick ...... 258 Example 3.21. Spiral stove ...... 261 Example 3.22. Cube corner ...... 269 Example 3.23. NUBS surface ...... 275 Example 3.24. Planetary paths ...... 277 Example 3.25. Circle caustics of higher order ...... 280 Appendix B. List of Examples 639

Example 3.26. Folding conoids ...... 285 Example 3.27. Folding torses ...... 290 Example 3.28. Minding's isometries ...... 292 Example 3.29. Spiric lines ...... 295 Example 3.30. Planar sections of a torus ...... 298 Example 4.1. Escher kaleidocycles ...... 302 Example 4.2. The peeling of an apple ...... 309 Example 4.3. The anti development of a cylinder ...... 315 Example 4.4. Rolling cone ...... 318 Example 4.5. Rolling hyperboloids ...... 321 Example 4.6. Kardan joint ...... 324 Example 4.7. Reflection on corner ...... 333 Example 4.8. How to map images onto a cylinder ...... 350 Example 4.9. Tread ...... 353 Example 4.10. A developable Mobius band ...... 358 Example 4.11. Caravan of arrows ...... 371 Example 4.12. Reflecting oloid ...... 376 Example 4.13. Multiple reflection ...... 382 Example 5.1. Top, front, and side view ...... 390 Example 5.2. Box shadow ...... 393 Example 5.3. Net projection ...... 397 Example 5.4. Projective scales ...... 415 Example 5.5. Projective map ...... 419 Example 5.6. A twisted cubic ...... 422 Example 5.7. Osculating quadric ...... 426 Example 5.8. Focal surfaces of a line congruence ...... 431 Example 6.1. Bad parametric representation ...... 570 Example 6.2. Splitting of parameterized curves ...... 572 Example 6.3. Roman surface ...... 573 Example 6.4. Fast rotation ...... 576 Example 6.5. Buggy kardan ...... 580 Example 7.1. Multiple scenes ...... 584 Appendix (

Open Geometry (lass List

OPEN GEOMETRY is an object oriented geometric library. There exist relatively few base classes that all others are built on. The most important base classes are certainly 02d and 03d. Roughly speaking, they are used to describe conglomer• ates of points in two or three dimensions (classes P2d and P3d). Both, 02d and 03d, are derived from the class 023d that contains of a number of objects of type P23d, the common ancestor of P2d and P3d. 1 As a result of this approach, many OPEN GEOMETRY classes are automatically equipped with useful methods concerning object size and color or application of geometric transformations. Compare the corresponding section on page 579 for more information. The knowledge of the hierarchic structure of OPEN GEOMETRY is of relevance to the user. It helps finding the appropriate method for a certain programming task. In addition to the detailed descriptions in Chapter 6 we decided to provide an online-help in HTML format. Just open "oghelp.html" with your favorite web browser. It will display three frames that help you finding OPEN GEOMETRY'S important classes and methods. In the leftmost frame, you can see an alphabetic list. Clicking on the desired class or methods scrolls the big main frame to the corresponding declaration2 .

lIn fact, 023d contains much more than just a pointer to a point array. It is already equipped with everything that is necessary for later drawing and shading. In general, however, not all member variables are really initialized. 2In general, this is a copy of the original declaration in the header-file of the class. 642 Appendix C. Open Geometry Class List

Note that the main frame contains links to the direct parent class. Scroll, e.g., to the declaration of Circ3d. You will see that it is derived from RegPoly3d. Click on the link and you will see the declaration of RegPoly3d. Finally, the alphabet in the top frame helps you navigating through the class list in the left frame. The "hierarchy"-link will open an hierarchic class list. The child classes of a certain level are intended by a constant amount and, again, a simple mouse click takes you to the declaration. If you want to switch back to an alphabetic view, just click on an an arbitrary letter in the top frame.

Occasionally, we erased one or the other method that is not intended for public use. Appendix D

Installation of Open Geometry

OPEN GEOMETRY does not come as an executable. Except for some demo files, you cannot start it directly from a command prompt or by double clicking on some icon. It is a programming package, and in order to use it, you need a C++ compiler. The accompanying CD-ROM contains two directories "WINDOWS/" and "LINUX/". There you find all necessary components for a WINDOWS environment and a LINUX (or UNIx) environment:

Windows

Installing OPEN GEOMETRY in a WINDOWS environment is easy: Just start "setup. exe" in the "WINDOWS/" directory on the CD-ROM. This will create a local OPEN GEOMETRY folder (by default "OPENGEOM/") on your computer. From this point on, you can follow the steps described in Section 1.4.

Linux

If you are working in a LINUX or UNIX environment, proceed as follows:

1. Copy the file into your home directory. You need not create an Open Ge• ometry directory!

2. In order to extract the file "OpenGeometry2. 0 . tar. gz", please write, e.g., 644 Appendix Chapter D. Installation of Open Geometry

gzip -d *.tar.gz tar -cf *. tar This will create a directory "OpenGeometry2. 0" 3. Switch to the directory "OpenGeometry2. 0"

4. Now you can compile with make x It should be easy to compile the source code. When it comes to the linking process, you might have to install some mesa libraries.

If you run into trouble, please read the file "read.me" on the CD-ROM. If this does not help, you can contact us via email (open.geometry(Ouni-ak.ac.at).

Updating Open Geometry 1.0

If you want to update a previous version of OPEN GEOMETRY, you can simply overwrite the existing files. If you have changed one of the files in the "e/" di• rectory, however, we recommend the following procedure:

1. Rename the existing OPEN GEOMETRY folder (e.g. "OG_10/").

2. Install the new version. 3. Copy your own demo programs into the new "USER/" directory and include them, as usual, via "try. cpp". 4. In order to integrate your own code in the new version, please, refer to page 24 and read the instructions for user contributions.

Okay. Let's assume that you have installed OPEN GEOMETRY correctly on your system. Then you should tryout a demo-executable from the "DEMOS/" directory, e.g., "demol. exe". There, you can try different buttons and menu items in order to get a feeling for a typical OPEN GEOMETRY application. If everything works correctly, the first thing you will see is a welcome message informing you that a default file "og. ini" will be created. There you can set some of OPEN GEOMETRY'S default parameters (compare Section 7.3). However, for the time being you need not care about it. Just learn how to write an OPEN GEOMETRY application of your own. References

[1] E. ANGLE: Interactive Computer Graphics: A Top-Down Approach with OpenGL. Addison• Wesley, 1999.

[2] 1. ARTOBOLEVSKII: Mechanisms of the Generation of Plane Curves. Pergamon Press, Oxford-London, 1964.

[3] E. BLUTEL: Recherches sur les surfaces qui sont en me me temps lieux de coniques et en• veloppes de cones du second degre. Ann. sci. ecole norm. super., 7(3), 1890, 155-216.

[4] J.W. BRUCE, P.J. GIBLIN, C.G. GIBSON: On Caustics of Plane Curves. Am. Math. Month. 88, 1981, 651-657.

[5] Z. CERIN: Regular Hexagons Associated to Centroid Sharing Triangles. Beitriige zu Algebra und Geometrie (Contributions to Algebra and Geometry) 39 1998263-267.

[6] B. ERNST: Magic Mirror of M. C. Escher. TASCHEN America LIc, 1995.

[7] K.J. FALCONER: Geometry. Mathematical Foundations and Applications. John Wiley & Sons Ltd., Chichester 1990.

[8] K. FLADT, A. BAUR: Analytische Geometrie spezieller Flachen und Raumkurven. Braun• schweig 1975.

[9] F. GRANERO RODRiGUEZ, F. JIMENEZ HERNANDEZ, J.J. DORIA IRIARTE: Constructing a family of conics by curvature-depending offsetting from a given conic. Computer Aided Geometric Design 16, 1999, 793-815. 646 References

[10] A. GEHRER, H. PASSRUCKER, H. JERICHA, J. LANG: Blade Design and Grid Generation for Computational Fluid Dynamics with Bezier Curves and Bezier Surfaces. Proceedings ofthe 2nd European Conference on Turbomachinery - Fluid Dynamics and Thermodynamics, Antwerpen, Belgium, March 5-7, 1997, 273-280.

[11] G. GLAESER: Objektorientiertes Graphik-Programmieren mit der Pascal-Unit Supergraph. B. G. Teubner, Stuttgart, 1992.

[12] G. GLAESER: Von Pascal zu C/C++. Markt&Technik, Miinchen, 1993.

[13] G. GLAESER: Fast Algorithms for 3D-Graphics. Springer-Verlag, New York, 1994.

[14] G. GLAESER, H. STACHEL: OPEN GEOMETRY: OpenGL and Advanced Geometry. Springer• Verlag, New York 1999.

[15] G. GLAESER: Reflections on Spheres and Cylinders of Revolution. Journal for Geometry and Graphics (JGG) 2 (2), Heldermann Verlag Berlin, 1999, 1-19.

[16] G. GLAESER, H.P. SCHROCKER: Reflections on Refractions. J. Geometry Graphics (JGG) 4 (1), Heldermann Verlag Berlin, 2000.

[17] F.J. HILL, F.S. HILL: Computer Graphics Using OpenGL. Prentice Hall, 2000.

[18] J. HOSCHEK, D. LASSER: Grundlagen der Geometrischen Datenverarbeitung. Stuttgart 1992.

[19] W. JANK: Flachen mit kongruenten Fallparabeln. Sb. sterr. Akad. Wiss. 181 1973,49-70.

[20] E. KRUPPA: Nati.irliche Geometrie der Mindingschen Verbiegungen der Strahlflachen. Mh. Math. 55, 1951.

[21] E.E. KUMMER: Gipsmodell der Steinerschen Flache. Monatsber. Akad. Wiss. Berlin 1863, 539.

[22] J. LANG, H.P. SCHROCKER: Edge-Orthogonal Patches through a Given Rational Bezier Curve. Journal for Geometry and Graphics (JGG) 2 (2), Heidemann Verlag Berlin, 1998, 109-121.

[23] B. MANDELBROT: Fractal Geometry of Nature. W.H. Freeman & Company New York, 1977.

[24] F.A. MOBIUS: Uber die Bestimmung des Inhaltes eines Polyeders. Ber. Verh. Sachs. Ges. Wiss. 17, 1865, 31-68.

[25] E. MULLER, J.L. KRAMES: Vorlesungen i.iber Darstellende Geometrie, Bd. II: Die Zyklogra• phie. Leipzig, Wien: Franz Deuticke, 1929.

[26] E. MULLER, J .L. KRAMES: Vorlesungen i.iber Darstellende Geometrie, Bd. III: Konstruktive Behandlung der Regelflachen. Leipzig, Wien: Franz Deuticke, 1931. S References 647

[27] H. POTTMANN, J. WALLNER: Computational Line Geometry. Springer-Verlag, Heidelberg 2001.

[28] M.J. PRATT: Dupin cyclides and supercyclides. In: The mathematics of surfaces VI. Glen Mullineux, editor: The Institute of Mathematics and its Applications, Oxford University Press, 1996, 43-66.

[29] M.J. PRATT: Quartic supercyclides I: Basic theory. Computer Aides Geometric Design 14(7), 1997, 671-692.

[30] H. SACHS, G. KARANE: Schall- und Brechungsfronten an eben en Kurven. Publ. Math. Debrecen 54, 1999, 189-205.

[31] M. SADOWSKY: Theorie der elastisch biegsamen undehnbaren Bander mit Anwendungen auf das Mobiussche Band. Verh. 3. Intern. Kongr. Techn. Mechanik, Stockholm, 1930.

[32] M. SADOWSKY: Ein elementarer Beweis fur die Existenz eines abwickelbaren Mobiusschen Bandes und Zuruckfuhrung des geometrischen Problems auf ein Variationsproblem. Sitzgsber. Preuss. Akad. Wiss. 22, 1930, 412-415.

[33] D. SCHATTSCHNEIDER: M. C. Escher Kaleidocycles. Pomegranate Artbooks Inc, 1987.

[34] H.P. SCHROCKER: Die von drei projektiv gekoppelten Kegelschnitten erzeugte Ebenenmenge. Dissertation an der Technischen Universitat Graz, 2000.

[35] J. SCHWARZE: Cubic and Quartic Roots. In Graphics Gems (A. GLASSNER, ed.), Academic Press, 1990, 404-407.

[36] D. SHREINER: OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.2. Addison-Wesley, 1999.

[37] G. WEISS: Raumliche Deutung von Ellipsenkonstruktionen. IBDG 2/1998.

[38] W. WUNDERLICH: Uber ein abwickelbares Mobiusband. Monatshefte fUr Mathematik 66, 1962, 276-289.

[39] W. WUNDERLICH: Uber zwei durch Zylinderrollung erzeugbare Modelle der Steiner'schen Romerflache. Archiv der Mathematik, Vol. XVIII, 1967, 325-336.

[40] W. WUNDERLICH: Darstellende Geometrie II. Mannheim: Bibliographisches Institut, 1967.

[41] W. WUNDERLICH: Ebene Kinematik. Mannheim: Bibliographisches Institut, 1970. I ndex of Fi les

001. bmp, 331 box.h, 486 002.bmp, 331 box_shadow.cpp, 393-396 003.bmp, 331 buggy_kardan.cpp, 580 3d_ell~otion.cpp,216,218 en-continuity. cpp, 135 add_code.cpp, 25, 596 cage_oLgold1. cpp, 230, 231, alloc~em. h, 599 233 alt~och_curve.cpp, 100 cage_of_gold2.cpp, 234 angle_stretch.cpp, 167-169 camera. h, 549 apple_paring.cpp, 313, 314 candlestick.cpp, 258-260 arc2d.h, 437, 473 candlestick1.1lz, 258 arc3d.h, 480, 529 candlestick2.1lz, 258 arrow2d.h, 438 cassini.cpp, 54,55,57 arrows2d.h, 438, 439 catacaustic.cpp, 4, 111-113 arrows3d.h, 480, 481 cats_and_dog1 . cpp, 66 autumn_leaves. cpp, 103 cats_and_dog2.cpp,68 circ2d.h, 441 bad_par _rep. cpp, 570 circ3d. h, 489 base_functions.cpp, 152-154 circumcircle.cpp, 8-10 bezier.h, 18, 440, 470, 482, circumcircle.exe, 9 484, 520, 522 circumference. cpp, 10, 11 bezier_approx.cpp, 147-150 circumference3d.cpp, 12-14 bezier_curve.cpp, 127-129 class_curve1. cpp, 164-166 bezier~anip.cpp, 135-138 class_curve2. cpp, 166, 167 bezier_surface.cpp, 267 comets_fate. cpp, 71, 72 Index of Files 649 complex_poly.h, 444,489 fukuta2.cpp, 37 confocal_conics.cpp, 51-53 function2d.cpp, 454 conic.h, 111,446,490 function2d.h, 452, 453, 593 conic_caustic.cpp, 119, 121, 122 gbuffer.h,543 conic_section_surface1.cpp, gc_1-continuity.cpp, 132- 571 135 conic_section_surface2.cpp, gc_2-continuity.cpp, 133 572 general_offset.cpp, 48 cube_corner1.cpp, 269-273 get_anti_ortho.cpp, 45 cube_corner2.cpp, 273, 274 get_anti_pedal.cpp, 45 cubic~ewton_fractal.cpp, 104- get_catacaustic.cpp,43 107 get_evolute.cpp, 40 get_involute.cpp, 46 d.cpp, 25, 593 get_offset.cpp,47 deception.cpp, 201-205 get_orthonomic.cpp, 44 defaults2d.h, 9, 12, 22 get_pedal.cpp, 44 defaults3d.h, 22, 197 glider. cpp, 504 demo1.exe, 5, 644 groups.h,503 diff_equation.h, 448, 491 dodecahedron.cpp, 342 h.cpp, 143,591 dodecahedron.h, 524 helical_torse2.cpp, 292, 294 dragon_filling_curve.cpp, 102 hello_world.cpp, 561 hyp-x...hyp. cpp, 225 e.cpp, 25, 593 hyperboloid.cpp, 346-349 edge_orthogonal.cpp, 139- 146, 148, 149 impossible_cube.cpp, 201 ellipse2.cpp, 216 intarray.h, 546 elliptic_compass.h,604 introduce~ew_class.cpp,593, elliptic_compasses.exe,603 594, 597 energy_spira11.cpp, 257 isoptic.cpp, 162, 163 energy_spira12.cpp,257,258 enums.h,568 kaleidocycle1.cpp, 302, 308, 309 f.cpp, 25, 40, 47,593 kaleidocycle2.cpp, 302 focaLconics. cpp, 123-126 kardan.cpp,324-327,329,580 folding_conoids1.cpp, 285- keplers_law.cpp, 32-35 287 kinemat.h, 18,450,474,475, folding_conoids2.cpp,288- 478 290 kinematic-IDap1.cpp, 92, 93 folding_torses.cpp,290-292 kinematic-IDap2.cpp, 94, 95 fourbar.cpp, 4 klein_bottle.cpp, 228, 229, fractal.h, 18,455 510 frustum.h, 525, 527 koch_curve.cpp, 98, 99 fukuta1.cpp, 35, 37 koch_snowflake.cpp, 100 650 Index of Files

line_congruence.cpp, 432- normal_surfaces.cpp,5,207- 435 211 lines2d.h,443,457,464,465 nubs2d.cpp,156 lines3d.h, 443, 494, 506, 511 nubs3d.cpp,156 lines_of_curvature.cpp,225- nubs_surf.cpp,275-277 227 nurbs. h, 156, 457, 459, 496, linsyst.h,547 498, 499, 501 nurbs2d.cpp,156 maltesian_gear.cpp,88-90 nurbs3d.cpp,156 mandelbroLset1. cpp, 108 nurbs_surf.cpp,275 mandelbrot_set2. cpp, 109 manipulate_camera1.cpp,187, o.cpp,24 188 o23d.h, 548 manipulate_camera2.cpp,190 o2d.h, 460 manipulate_camera3.cpp,190 o3d.h, 502 manipulate_camera4.cpp,191 og.ini, 23, 198, 331, 335, manipulate_camera5.cpp,192 340, 560, 590, 592, map_onto_cyl.cpp,350-352 644 marielas_building.cpp,259 oghelp.html,641 mask.pov, 336, 338, 339 oloid. cpp, 4, 376, 377, 379, milling. cpp, 546 579 minding1.cpp, 293, 294 opacity.cpp, 564, 565 minding2.cpp,294 opengeom.h, 9, 18 minimal.cpp,231 OpenGeometry2.0.tar.gz,643 minima12d.cpp, 17, 21 order_three_surface.cpp,214, minima13d.cpp,21 215 minimize_distance.cpp,160- osc_quadric.cpp,428 162 osculating_curves.cpp,261, moebius1. cpp, 358 264 moebius2.cpp, 360, 362-365 moebius3.cpp, 364-369, 371 parab~th_order.cpp, 463 moebius_wi th_arrows. cpp, 5, parabola~.h, 462 371-375 paramcurve2d.cpp, 37 mult_refl.cpp,382, 383, 385- paramsurf.cpp,575 387 paramsurface.h, 491, 507, multiple_scenes.cpp, 584, 585 539 multiple_scenes.h,585,587 pascal_brianchon.cpp,117- my_function.h, 596 119 peano_curve. cpp, 102 net_projection1.cpp, 397- pencil_of_circles.cpp,49- 400 51 net_projection2.cpp, 400, 401 perspectograph.cpp,79-81 net_projection3.cpp, 401- plane.h,512 403 planet_path. cpp, 277-279 normal_surface.cpp,210 pluecker1.cpp, 234,235 Index of Files 651 pluecker2.cpp,235-237,242 reflecting_cylinder.cpp,280- pluecker3.cpp, 237, 238 284 pluecker4.cpp,238-241 reflecting_oloidl.cpp,377- pluecker5.cpp, 242, 243 379 pluecker6.cpp,244-246 reflecting_oloid2.cpp,379- pluecker7.cpp,247 381 points.h, 461, 504, 549 refraction_on_circle.cpp,179 pole_and_polar.cpp,114 refraction_on_line.cpp,172- poly2d.h, 466, 472 175 poly3d.h, 513, 524, 526, 528 reichstag.cpp,259 polyhedron.h, 514 revol.h, 493, 538 print_stringl.cpp, 560, 561 rightJnelicoid.cpp,212,213 print_string2.cpp,561 rockingJnorse.cpp, 194, 196 proj--€;eom.h, 406, 412, 422, rolling_circle.cpp,310-313 466, 468, 515, 517 rolling_cone.cpp,318-321 proj-IDapl.cpp,419-422 rolling_cylinder.cpp,315- proj-IDap2.cpp,422 319, 321 proj_scales.cpp, 415, 417 rollingJnyperboloid.cpp,323 pulley_blockl.cpp,82-84 rollingJnyperboloids.cpp, pulley_block2.cpp,84-86 321-323 pulsing.h, 552 rOlling_snail.cpp,4, 61, 64, 65 quadratrix.cpp, 39, 40 roman_surface.cpp,575 quadric.cpp, 426, 428, 430 rotoid_surf_with_thickness.cpp, quartic~ewton_fractal.cpp, 539 104, 107 ruled_surface.h, 18,520, 528 qUickrot2d.cpp,576 scene.h, 331, 554 r6-mechanism.cpp,305,306, setup.exe,643 308 show_string.cpp,559 rabbit_and_dogs.cpp,68-70 simple.cpp,18 rainbow.cpp, 176, 178 simpson.cpp,559 randnum.h, 553 smarttext.h,555 random~och_fractall.cpp, 100 smooth_spline.cpp,496 random~och_fracta12 . cpp, 100, snaiLwith_self ... , 230 101 solid.h,480, 486,532 rat_bezier_curve.cpp,132 some_objects.cpp,185 rat_bezier_surf.cpp,268 sphere.h, 24, 535 rat_bezier_surface.cpp,267, spiral_stove.cpp,263-265 268 spiric_lines.cpp,297 read.me, 644 stones. inc, 339 realarray.h, 553, 601 stormy_ocean.cpp,4 reconstruction.cpp,200 str12d.h, 475 reflect_on_corner.cpp,333, str13d.h, 536 334 supercyclidel.cpp,249-252 652 Index of Files

supercyclide2.cpp,252,253 supercyclide3.cpp, 254, 255 surf-x_surf.cpp,223 surface. inc, 339 surface_of_parabolas.cpp,222

test~unct-.lllin-.lllax. cpp, 593, 596, 597 three_planes.cpp, 182-184 three_planets.cpp,28-31 tmp.dat, 197 torse.cpp,219-221 torus.h,540 torus_as_locus1.cpp, 14, 15 torus_as_locus2.cpp, 15, 16 torus_curves1.cpp, 295, 296, 511 torus_curves2.cpp,298,299, 511 tread.cpp, 353, 355-357 tribar.cpp, 198, 199 try.cpp, 9,18,583,644 try.log, 138, 274, 560 tubular.h,541 tWisted_cubic.cpp,422-425 two_circles.cpp,565-567 two_flight~outes.cpp,530, 532

useful.h,559

vector.h, 478,542,556 views.cpp, 391, 392

wavefront.cpp,57-61 window.cpp, 75, 77 Index

24-bit color resolution, 330 affine 2D, 22, 181 geometry, 110, 403 2D application, 22 invariance, 151 2D classes ratio, 35, 37, 128, 130 basic, 28-57 transformation, 129 2D window, 9, 12 AKELEY, vii 3D, 12, 181 algebraic 3D STUDIO MAX, 331, 503 curve, 38, 246, 295, 404 3D animation, 357 equation, 54, 162, 305, 3D application, 22 383 3D projection, 12 surface, 214, 219 3D-CAD system, 345 algorithm, 34, 129-131, 196, 4-byte real, 348 266 6-byte real, 348 ALLFACES, 195, 508, 515 64-bit floating point variables, ALLOC2D-.ARRAY, 275, 578 25 ALLOCARRAY, 233, 578 8-bit color resolution, 330 AliowAura( ... ), 566 8-byte real, 348 AllowRestart, 591 AliowRestart( ), 10, 22, 590, abstract class, 98, 448, 455, 591 464, 491, 506, 507, Almost White, 334, 568 528, 539 a-value, 564, 627 accessing object points, 579- ANGER, viii 580 angle at circumference, 12, 14 acos( ... ), 580 654 Index

angle-stretched curve, 167- back to front, 23 169 backface, 352 animation, 7, 10, 12, 14, 350- background, 18, 338, 350 357 barycenter, 35, 37, 160, 352 2D,57-73 BAYER, viii 3D, 277-299, 357-388 BEESON, vii advanced, 357-388 BentArrow2d, 438, 439 simple, 277-299 BERNOULLI, 54, 401 animation part, 15 Bernoulli's lemniscate, 54, 401 anti development, 315, 318 Bezier approximation, 147- antievolute, 45 150 antiorthonomic, 45 Bezier curve, vi, 126-150, 428 antipedal, 45 Bezier spline, 151 apple-paring, 309-314 Bezier surface, 6, 266-274 approximating polyhedron, 223 BezierCurve2d, 126, 128, 133, approximating splines, 159 139, 142, 143, 148, approximation, 139-150 440, 441 arc, 12 BezierCurve3d, 126, 482, 484 2D,437 BezierSurJace, 126, 266, 267, 3D, 480 484, 485 arc length, 193 BEZOUT, 404 Arc2d, 437 Bezout's theorem, 404 Arc3d, 480 bitmap, 330-331 ArcCos( ... ), 580 animation, 331 A rrayOJSolids, 480, 486, 487 file, 350, 592 arrow, 371 Black, 8, 11, 13, 15, 16, 19, 2D,438 20, 30, 53, 70, 84- 3D,480 86, 108, 110, 112, double pointed, 438 115, 118, 121, 126, Arrow2d, 438, 439 128, 138, 145, 146, Arrow3d, 325, 371, 373, 375, 167, 169, 174, 178- 480-482 180, 184, 211, 213, associated curves, 40-49 215, 221, 222, 224, astroid, 41, 47, 80, 167 227, 235, 237, 241, asymptote, 110, 405 243, 244, 246, 253, asymptotic line, 429 255, 270, 271, 274, aura, 565-566 277, 279, 285, 292, 306, 307, 311, 314, B-spline curve, vi, 150-159, 334, 335, 348, 362, 496 368, 369, 374, 386, base functions, 152-155 392, 420, 422, 424, closed, 159, 497, 500 425, 427, 430, 435, rational, 150-159 439-441, 443, 445, B-spline surface, 6, 274, 277 447, 448, 452, 454, closed, 275-277, 498, 501 458, 460, 465, 468, Index 655

471, 474, 484, 493, 616 494, 496, 497, 499, Boolean operations, 2, 6, 301, 500, 502, 507, 508, 345-349 511, 519, 521, 531, Boolean operators, 532 541, 556, 566-568, BooLResult, 348, 349, 532-534 605, 608, 618 borderline, 206,223,266,428 BLASCHKE, 91 Box, 19, 20, 185, 187, 192, Blue, 11, 13, 59, 70, 89, 109, 393, 394, 486, 487, 112, 125, 126, 129, 532, 534, 544, 549, 133, 141, 152, 165, 588, 589 167, 175, 182, 186, braces, 24 203, 215, 262, 265, brackets, 24 267, 268, 278, 284, Brianchon 290, 306, 311, 314, theorem of, 116 326, 356, 391, 399, BRIANCHON, 116, 119 416, 419, 425, 429, BRICARD, 302 439, 441, 449, 454, Brown, 152, 195, 259, 277, 458, 460, 463, 468, 568 471, 474, 482, 484, BUCK, viii 485, 497, 500, 521, button, 18, 19 523, 524, 530, 556, bar, 19 562, 565, 568, 618 BMP, 330-331 C directory, 25, 593 DXF, 331 CAD system, 3, 345, 348 bold letters, 6 CAD3D, vi, vii, 3, 201, 258, Boolean, 73, 80, 107, 108, 259, 325, 327, 329, 150, 156-158, 171, 330, 340, 341, 345, 187, 194, 196, 205, 348, 486, 487, 503, 216, 233, 276, 318, 516, 532, 533, 604 319, 325, 326, 351, Cad3Data, 187, 194, 259, 480, 352, 369, 373, 375, 486, 488 383, 385, 407, 409, CAGD, 126, 127, 150, 156, 410, 433, 434, 438, 248, 274 439, 441, 447, 450, Cardan circle, 610 451, 453, 457, 459, cardioid, 612 462, 466, 471, 473, CARSON, viii 475-479, 481, 483- Cartesian coordinates, 9, 54, 487, 495, 497-499, 256, 304, 319, 354, 501, 502, 505, 506, 606,611 508, 509, 513-515, CASSINI, 54-57 521, 522, 526, 530, CASSINI'S oval, 54-57 532, 533, 535-539, cast shadows, 16 543, 544, 547, 550- catacaustic, 41-43, 280 552, 554, 555, 557, catenoid, 230 561, 567, 605, 613, caustic, 280, 376-380, 570 656 Index

Center( ), 462 509, 512-515, 517, centimeter, 9 518, 520-522, 524- central projection, 397 530, 533, 535, 537- eerin,35 540, 542, 544, 548, ChangeDefaultOffset( ), 196 549, 554, 555, 560, ChangePovRayLineWidth,591 561, 563-565, 567- ChangePScriptLineWidth,591 569, 613, 615, 616 characteristic conic, 175 color, 568, 569 CHASLES, 166 create new, 569 Circ2d, 8, 9, 11, 30, 31, 50, color palette, 569, 591 75,76,83,176,441- comments, 10 443, 464, 613, 616 common normal, 209, 216, Circ3d, 13-16, 182, 244, 262, 242, 244, 245, 305, 295, 298, 299, 387, 306, 308, 399 489, 506, 507, 513, CommonNormal( ... ), 209 529-531, 535, 536, compass, 187 539, 565, 566, 642 compiler, vii, 1,9, 19,25,578, circle in space, 12, 489 585, 590, 601 circular points at infinity, 166, compiler-safe, 576 400, 406 Complex, 105, 108, 109 circumcircle, 7, 9, 10, 12 complex animation, 301 class, 8, 16 complex line, 223 class curve, 122, 164-167, 173, ComplexL3d, 223, 224, 226, 376, 419, 443 228, 443, 444, 491, class hierarchy, 641 509, 510, 515 class implementation, 592 ComplexPoly2d, 88, 438, 439, ClassCurve2d, 164, 166, 173, 444, 445, 466, 490 419, 443, 457 ComplexPoly3d, 203, 489, 513 clipped, 196 ComputeReals( ), 415 closed B-splines, 458, 459 confocal conics, 51-54 cluster of solids, 486 confocal quadrics, 225-227 collinear map, 406 Conic, 30, 52, 54, 110, 112- COLLINS, viii 114, 117, 119, 122, Color, 35, 36, 62, 109, 111, 123, 173, 246, 406, 122, 152, 153, 156, 412, 415-417, 419, 158, 168, 174, 179, 446, 447, 468, 490 182, 185, 247, 281, conic, 110-126, 420, 446, 490 283, 288, 293, 310, conic compass, 603-618 326, 377, 378, 412, conic section, 110-126 418, 419, 433, 438- Conic3d, 110, 123, 252-255, 444, 446, 447, 450, 490, 492, 509, 518 453, 455, 457-473, ConnectingLine( ... ), 420 477, 478, 481-484, constructor, 21, 24, 157, 462, 486, 487, 489, 490, 512, 527, 549, 552, 492-495,497-502,506- 561, 587, 588, 593 Index 657 contour, 183, 206, 228, 252, CubicSpline3d, 16, 494, 496, 314 542 outline, 20, 210, 222, 223, CurScene, 587 233, 358, 430, 575 CurvePoint( ... ), 39, 41, 63, Contour( ... ), 196 64, 128, 148, 157, control net, 266, 267, 275, 164, 283, 284, 443, 276, 498, 501 458, 459 control point, 127, 129-137, customizing Open Geometry, 139, 149, 150, 155- 590-592 157, 159, 261, 262, Cyan, 152, 568 266-270, 274, 275, cylinder of revolution, 185, 428, 440, 458, 459, 222, 235-238, 241, 470, 482, 484, 497, 281, 315, 340, 350, 499, 520, 522 398 control polygon, 127-130, 135- cylindrical coordinates, 256 138, 144, 150, 151, 155, 159, 266, 274, DAILY, viii 440, 457, 459, 470, DarkBlue, 205, 206, 241, 243, 482, 484, 496, 499, 296, 386, 425, 435, 520, 522 568, 595, 597, 605 Coord2dArray, 129, 440, 441, DarkBrown, 385, 430, 568 460-463, 466, 470 DarkCyan, 568 Coord3dArray, 493, 495, 496, DarkGray, 174,233,396,463, 502, 503, 513, 538, 568, 595, 597, 618 542 DarkGreen, 386, 387, 425, 568, coordinate 605 axes, 19 DarkMagenta, 179, 568 system, 19 DarkOrange, 568 count variables, 576 DarkPink, 568 in loops, 576 DarkRed, 568 coupler motion, 93 Dark Yellow, 568 COX-DE BOOR, 275, 457, DE LA HIRE 459, 496, 498, 499, theorem of, 606 501 DECASTELJAU, 127-129, 131, CPU time, 181, 194 132, 266, 440, 470, CreateAura, 566 482-484, 520, 522 CreateAura( ... ), 565, 567 DeCasteljau ( ... ), 128 CreateNewPalette, 554, 569 default CreateNewPalette( . .. ), 569, camera, 197 592 depth range, 196 cross ratio, 406, 408-411, 414- PostScript line width, 335 418, 422, 423 POV- Ray line width, 340 CrossRatio( ... ), 413, 417 DefaultCamera( ), 550 cube, 185 DefaultOrthoProj( ), 12 CubicSpline2d, 463 DEGEN, viii 658 Index

degree elevation, 131, 137, drawing order, 23, 37, 202, 440, 522 332, 335, 564, 565 DEMLOW, viii drawing part, 9, 10 demo DrawRulings( ... ),427 executable, 562 DREGER, vii files, 643 DUFFY, vii program, 6 DUMMY, 600 depth range, 196 Dupin indicatrix, 509 depth-buffering, 196 DXF, 332 descriptive geometry, vi, 389- dynamic memory, 583 403 allocation, 21, 233, 576, destructor, 157, 462, 588, 593 593, 598 determination of intersection curves, 223 eccentricity, 28, 51, 124, 615 developable surface, 4, 218, linear, 34 290, 315, 377 numeric, 33 diacaustic, 43, 172-175 edge of regression, 218, 222 DiffEquation, 448, 449, 491 edge-orthogonal, 139-147 DiffEquation3d, 491 ElevateDegree( ... ), 130 differential equation, 448, 450, ELLIPSE, 53, 1l0, 119, 124, 491 175, 446, 490 differential geometry, vi, 425- ellipse, 48, 49, 51, 52, 120, 435 123, 162, 163, 175, DILGER, viii 615 DirectionVector( ... ),214,220, ellipsograph, 606, 609 288, 528 ellipsoid, 225 director plane, 286 elliptic compass, 603-618 director surface, 431, 433, 436 elliptic net projection, 400 DirectrixPoint( ... ), 288, 528 EMPTY, 31, 84, 178, 296, display lists, 194 298, 299, 438, 441, DistMA( ), 123 442, 466, 472-474, dodecahedron, 190, 524, 525 489, 513, 524, 527, DOS version, 345 529, 531 double, 25 Encapsulated PostScript, 332- double hyperbola, 219, 221, 335 222 end of the program, 21 double point, 225 energy spiral, 256 Dragon, 102-105 ENGELHART, 280 Draw( ... ), 196, 223 ENZMANN, viii DrawArrow2d( ... ),438 EPS, 332-335 DrawArrow3d( ... ),481 *.eps, 335, 579 DrawDirectrix( ... ), 213 equations Drawing Exchange Format, system of linear, 547 331-332 equiangular spiral, 61, 62,147, 148 Index 659 equiangular triangle, 97, 99, floating boat, 4 100 focal equilateral triangle, 35 conics, 123-126 error message, 21 distance, 54 ESCHER, 302, 309 line, 397, 400-402 Escher kaleidocycle, 302 parabolas, 125 essential changes, 592 point, 4, 28, 30-32, 51, Euclidean geometry, 110,403 53, 54, 60, 110, 111, evolute, 40-41, 45, 61, 172, 113, 123-125, 162, 175 175, 431, 433, 434, *.exe,23 615 executable, 9, 10 quadrics, 126 export, 10, 23, 329-344 surface, 431-434, 436 BMP, 330-331 four-bar linkage, 4, 93 DXF, 331-332 FourBarLinkage, 93,450,451, EPS, 332-335 474 POV-Ray, 335-344 fractal, 6, 96-109, 455 3D scenes, 23 frame, 19 extern, 587 FrameNum( ), 22 extremum of a function, 593 FREE_2D.-ARRAY, 578 eye point, 19, 22, 123, 175, FREE.-ARRAY, 233, 578 196, 200, 201, 203, front view, 16, 192 205, 344, 397 frontface, 352 FUKUTA, 35-37 fabs( ... ), 10 Function, 34, 452, 454, 593, families of curves, 49-57 594,596 FARMER, viii function graph, 452, 455, 462, fast 491, 493, 543, 544, algorithms, 3 594 rotation, 576 FunctionGraph, 393, 491, 492, transformations, 576 507, 532, 545 Feng-Shui, 256 future hardware, 25 FILLED, 30, 31, 36, 85, 88, 89, 179, 203, 215, ,¥, 10 244, 293, 311, 379, GammaBuffer, 543, 544, 546 386, 391, 399, 445, GAUSS, 547 565 Gauss elimination, 547 Filled OrNo t, 438, 441, 442, GCn-continuity, 132-135 466, 472, 473, 489, general ellipsoid, 225 513, 524, 527, 529 generating line, 211 FirstDerivative( ... ),594 generator, 97, 100, 102, 211, fixed plane, 4 217, 218, 311, 312 FLAT, 508 Generator( ... ), 235 FlatOrSmooth, 508, 526, 533, Generator( ), 98, 455 538, 541 660 Index

geodetic line, 311, 312, 359, GL_COMPILKAND_EXECUTE, 382, 388 195 geometric primitives, 185 GL_COPY, 627, 628 geometrical thinking, 7 GLCOPY_INVERTED,627, GetA( ), 123 628 GetAntiOrtho( ... ),45 GLCW, 624 GetAntiPedal( ... ),45 GLDECAL, 631 GetCata( ... ),42, 113 GLDEPTH, 634 GetEvolute( ... ), 40, 41, 43 GLDEPTH_BIAS, 635 Getlnvolute( ... ),46 GL_DEPTH_SCALE, 635 GetMinMax( ... ), 453, 594 GL_DEPTH_TEST,196 GetOffset( ... ), 47, 273 GLDIFFUSE, 629, 630 GetOpacity( ), 564 GL_EMISSION, 629, 630 GetPedal( ... ), 43, 44 GLEQUIV, 627, 628 GetPolar( ... ), 116, 119, 122 GL_EYKLINEAR, 632 GetPole( ... ), 123,417 GLEYKPLANE, 632 GetSelfl ntersection ( ... ), 221, GLFILL, 625 229 GLFLAT, 627, 628 GetStep( ), 100 GL_FLOAT, 632, 634, 636 GetULine( ... ),222 GL_FRONT, 624, 625, 629, GLALPHA, 632, 634, 636 630 GL_ALPHA_BIAS, 635 GL_FRONT_AND_BACK, 624, GLALPHA_LUMINANCE, 632, 625, 629, 630 634, 636 GL_GREEN, 632, 634, 636 GLALPHA_SCALE, 635 GL_GREEN_BIAS, 635 GL_AMBIENT, 629, 630 GL_GREEN_SCALE, 635 GLAMBIENT_AND_DIFFUSE, GL_INDEX_OFFSET, 635 629, 630 GLJNDEX_SHIFT, 635 GLAND, 627, 628 GLINT, 632, 634, 636 GL_AND_INVERTED, 627, 628 GL_INVERT, 627, 628 GLBACK, 624, 625, 629, 630 GL_LEQUAL, 196 GL_BITMAP, 632, 634, 636 GL_LIGHTO, 629, 630 GL_BLEND, 631 GL_LIGHT7, 629, 630 GL_BLUE, 632, 634, 636 GL_LIGHT_MODELAMBIENT, GL_BLUKBIAS, 635 630 GLBLUKSCALE,635 GL_LIGHT_MODELLOCAL VIEWER, GLBYTE, 632, 634, 636 630 GL_CCW, 624 GL_LIGHT_MODEL_ TWO_SIDED, GLCLAMP, 633 630 GL_CLEAR, 627, 628 GLLINE,625 GLCOLOR, 634 GLLINKLOOP, 624 GL_COLOKINDEX, 632, 634, GLLINKSTIPPLE, 625 636 GL_LINKSTRIP, 624 GL_COLOKINDEXES, 629, GL_LINEAR,633 630 GLLINES, 624 Index 661

GL_LUMINANCE, 632, 634, GL_SHININESS, 629, 630 636 GL_SHORT, 632, 634, 636 GL_MAP_COLOR, 634, 635 GL_SMOOTH, 627, 628 GL_MAP_STENCIL, 634, 635 GL_SPECULAR, 629, 630 GL_MODELVIEW, 195, 623 GL_SPHERE_MAP, 632 GL_MODULATE, 631 GL_SPOT_CONSTANT_ATTENUATION, GLNEAREST, 633 630 GLNOOP, 627, 628 GL_SPOT_CUTOFF,629 GLflOR, 627, 628 GL_SPOT_DIRECTION, 629 GL_OBJECT-LINEAR, 632 GL_SPOT_EXPONENT, 629 GL_OBJECT_PLANE, 632 GL_SPOT_LINEAKATTENUATION, GL_OR, 627, 628 630 GL_OKINVERTED, 627, 628 GLSPOT_QUADRATIC_ATTENUATION, GL_PACKALIGNMENT, 635 630 GL_PACK-LSRFIRST, 635 GLSTENCIL, 634 GLYACK_ROW_LENGTH,635 GL_T, 632 GLYACK_SKIP_PIXELS, 635 GL_TEXTURK1D, 632, 633 GL_PACK_SKIP-.ROWS, 635 GL_TEXTURK2D, 632, 633 GL_PACK_SWAP_BYTES, 635 GL_TEXTURKBORDEKCOLOR, GLPIXEL_MAP_A_TO_A, 634 633 GL_PIXEL_MAP_RTO_B, 634 GLTEXTURKENV, 631 GL_PIXEL_MAP_G_TO_G,634 GL_TEXTURKENV_COLOR, GLYIXEL_MAP_LTO_A, 634 631 GLPIXEL_MAP_LTO_B, 634 GL_TEXTURKGEN_MODE, GL_PIXEL_MAP_LTO_G,634 632 GL_PIXEL_MAP_LTO_I, 634 GL_TEXTURKMAG_FILTER, GL_PIXEL_MAP_LTO_R,634 633 GL_PIXELMAP-.R_TO_R,634 GL_TEXTURKMIN-F'ILTER, GL_PIXELMAP_S_TO_S, 634 633 GLYOINT, 625 GL_TEXTURE_ WRAP_S, 633 GLYOINTS, 624 GL_TEXTURE_ WRAP_T, 633 GL_POLYGON, 624 GL_TRIANGLES, 624 GL_POSITION, 629 GL_TRIANGLES_FAN, 624 GL_Q,632 GL_TRIANGLES_STRIP, 624 GL_QUAD_STRIP, 624 GL_TRUE, 624, 635 GL_QUADS, 624 GL_UNPACK_ALIGNMENT, GL_R,632 635 GL_RED, 632, 634, 636 GL_UNPACK_LSRFIRST,635 GL_REDJ3IAS, 635 GL_UNPACK_ROW_LENGTH, GL-.RED_SCALE, 635 635 GL_REPEAT,633 GL_UNPACK_SKIP_PIXELS, GL_RGB, 632, 634, 636 635 GL_RGBA, 634, 636 GL_UNPACK_SKIP_ROWS, 635 GL_S, 632 GL_UNPACK_SWAP_BYTES, GL_SET, 627, 628 635 662 Index

GLUNSIGNED_BYTE, 632, glLogicOp, 626, 628 634, 636 glMaterial, 630 GLUNSIGNED_INT, 632, 634, glMatrixMode, 195, 622 636 glMatrixMode( ), 194 GL_UNSIGNED_SHORT, 632, glMultMatrix, 623 634, 636 glNewList( ), 194 GL_XOR, 627, 628 glNorma13, 631 GLAESER, v, 3, 345 Global, 587 G LAZIER, vii global and static variables, gJBegin, 624 587 GLboolean, 624, 626, 627 global variable, 21, 189, 195, glCallList( ), 194 350 GLclampf, 626, 627 Global.camera, 189 glClearColor, 626, 627 Global. rotation2d, 578 glClearlndex, 626, 627 GlobaLVariables, 587 glColor, 626, 627 Glob Varlnitialized, 587 glColorMask, 626, 627 glPixelMap, 634 glColorMaterial, 629 glPixelStore, 635 glCopyPixels, 634, 635 glPixelTransfer, 634, 635 glCullFace, 624 glPixelZoom, 635 glDepthFunc, 196 glPointSize, 625 glDepthRange, 196 glPolygonMode, 625 glDisable, 196 glPolygonStipple, 625 GLdouble, 622 glPopMatrix, 195, 623 glDrawPixels, 634, 635 glPopMatrix( ), 194 glEdgeFlag, 624 glPushMatrix, 195, 623 glEnable, 196, 625, 633 glPushMatrix( ), 194 glEnd,624 glRasterPos, 636 glEndList( ), 194 glReadPixels, 634, 635 GLenum, 622, 624-635 glRotate, 623 GLfloat, 625-627, 635 glRotated, 195 glFrontFace, 624 glRotated( ), 194 glFrustum, 622 glScale, 623 glGetLight, 629 glShadeModel, 627, 628 glGetMaterial, 629 GLsizei, 632, 634, 635 glGetPolygonStipple, 624 glTexCoord, 631 giindex, 626, 628 glTexEnv, 631 glindexMask, 626, 628 glTexGen, 632 GLint, 625, 632, 634, 635 glTexlmagelD, 632, 634, 635 glLight, 630 glTexlmage2D, 632-635 glLightModel, 630 glTexParameter, 633 glLineStipple, 625 glTranslate, 623 glLine Width, 625 glTranslated, 195 glLoadldentity, 622 glTranslated( ), 194 glLoadMatrix, 622 GLubyte, 624, 625 Index 663

GLuint, 626, 628 HelicalMotion, 503-505, 511, GLushort, 625 537, 539 GLvoid, 632, 634, 635 HelicalSurface, 493, 507 GRUNWALD,91 helicoid, 230 graphics engine, 196 helispiral, 262-264 graphics output, 12 hemissphere, 263 graphics window, 10 HICKMAN, vii Gray, 11, 13,30,31, 112, 186, hidden line removal, 487 192, 227, 326, 328, hierarchy, 641 349, 445, 454, 465, high resolution, 23 482, 496, 511, 512, high-quality output, 487, 533 525, 534, 540, 544, higher-dimensional arrays, 601 545, 568 HiQuality( ), 10, 561 Greek letter, 10, 562 HOLLOW, 284, 311, 319 Green, 8, 11, 13, 51, 53, 59, home directory, 592 106, 109, 115, 124, homogeneous 126, 133, 138, 141, coordinate vector, 248, 148, 152, 167, 186, 404,408 190, 191, 240, 241, coordinates, 248,249,359, 243, 244, 265, 274, 404-406, 408 279, 290, 292, 307, human imagination, 223 311, 315, 319, 326, HYPERBOLA, 52, 53, 110, 356, 364, 379, 399, 119, 120, 124, 175, 417, 419, 425, 452, 446, 490 454, 468, 470, 474, hyperbola, 51, 52, 120, 123, 482, 494, 510, 531, 162, 175, 254, 405, 556, 560, 565, 568, 615, 619 588, 589, 595, 597, hyperbolic 618 net projection, 400 GROHSER, vii paraboloid, 433 surface point, 382 H-directory, 24, 25, 437, 593 hyperboloid, 225, 321-323, 345, HALMER, vii 347 handbook of revolution, 345 how to use, 5-7 two-sheeted, 225 HARADA, vii hardware bug, 591 ideal point, 397, 404, 424 HardwareBug, 590, 591 images per second, 12 HARMONIC, 552 implementation HARTLEY, vii personal, 25 header file, 18, 25, 437, 579, import, 329-344 593, 596, 604 and export, 301, 329- helical 344 motion, 257,400 impossible cube, 201 torse, 290 impossibles, 198-201 664 Index

*.inc, 339 L3d, 196, 221, 222, 238, 245, inch, 9 247, 254, 255, 443- index, 6 445, 491, 494-496, inherit, 594 506, 508, 511, 528, initializing file, 590 529, 538 initializing part, 16 learning by doing, 12 initiator, 97, 99, 100, 102, 103 lemniscate, 54, 55, 295, 401 input directory, 592 light source, 16, 19, 22, 187, instance of a class, 16 197, 280, 283, 335, IntArray, 546, 547, 600, 601 338, 378, 380, 388, Integral( ... ), 143 395, 568 interpolating splines, 159 LightBlue, 31, 179, 205, 206, intersection of surfaces, 223 226, 240, 379, 568 inversion, 50, 604, 615 LightBrown, 568 inversor, 612, 615 LightCyan, 179,212,568 of Peaucellier, 614, 615 LightDirection, 395 involute, 45-46 LightGray, 253, 386, 393, 394, IRREG ULAR, 110, 446 396, 493, 568 irrelevant change, 189 LightGreen, 50, 52, 53, 179, isoptic, 162-164 226, 568 italic letters, 6 LightMagenta, 568 LightOrange, 224, 568 kaleidocycle, 302-309 LightPink, 568 kardan joint, 187, 324-329, LightRed, 50, 53, 210, 394, 580 568 KARLHUBER, vii, 603 Light Yellow, 152, 366, 386, KARLTON, vii 422, 492, 568 KEPLER, 29, 32, 33 lima<;on of Pascal, 43, 610, Kepler equation, 33 615 keyboard, 10, 16 line at infinity, 215, 286, 405 keystroke, 136, 585 line complex, 431 keywords, 6 line congruence, 431-436 kinematics, 6 line style, 9, 37, 400, 563 2D,74-96 LINEAR,552 3D, 301-329 LinearSystem, 547 KITSEMETRY, vii LineDotted( ... ), 196 Klein bottle, 228-230 lines of curvature, 225 Koch fractal, 97-102, 455 lines of steepest slope, 222 KochFractal, 98-100, 455, 456 LINUX, vii, 3, 643 KRUPPA, 292 LINUX version, vii KUMMER, 573 LIPKIN, 612 LIST, vii L2d,40-44,46,47,54, 58,59, *.llx, 345,348,486,487 86, 113, 448, 453, *.llz, 345,348,486,487 457, 464, 465, 478 logarithmic spiral, 4, 61 Index 665

MOBIUS, 5, 228, 358, 371 midsurface, 434, 436 Mac version, vii milling, 274 Magenta, 152, 186, 440, 473, tool, 273, 274 568, 577, 578, 595, Minding 597, 618 isometric, 292 main projection ray, 352 problem, 292 Maltesien cross, 87 MINDING, 292 MANDELBROT, 96, 97 minimal surface, 230, 231 Mandelbrot set, 107-109 minimum of a function, 593 MarkAngle( ... ), 10, 12,563 MONGE,390 matrix Monte Carlo method, 140, definition of, 193 147, 160 MatrixMult( ... ),579 MoveGenerally( ... ),579 MATTE,508 moving the camera, 19 maximum of a function, 593 multi scene application, 6, 24, MEDIUM, 8, 11, 13, 15, 16, 550, 592 51,95,112,115,165, multi scene option, 6 167, 175, 179, 180, multiple light sources, 342 205, 206, 213, 222, multiple reflection, 382-388 224, 227, 243, 244, multiple scenes, vii, 583-587, 253, 277, 279, 281, 589 283, 292, 296, 306, MyFunction, 594 307, 312, 334, 385, 386, 396, 399, 422, NameOfOutputDirectory, 590, 425, 427, 430, 439, 592 440, 443, 445, 449, NC-milling, 543 454, 463, 474, 488, nephroid, 218-220, 222 492-494, 496, 499, net of rotation, 400, 402 502, 511, 531, 540, net projection, 397-403 541, 566, 595, 597, network, 560 605 installation, 198, 560 member function, 8, 9, 15, new application, 593 593, 594 NewColor, 569 memory leaks, 592 NEWTON, 103, 104, 106 menu, 10, 16 , 103-107 item, 18, 19 Newton iteration, 106 system, 22 NoColor, 75, 88, 98, 125, 204, meridian, 14, 295 216, 262, 279, 456, circle, 15, 298, 299 568 curve, 383 non-Euclidean, 406 mesh object, 341, 344 normal method,8 congruence, 433 MICHALSKI, viii projection, 22, 397 Microsoft Visual C++, 9 surface, 5, 208-210 midcurve, 263, 265 666 Index

NormaIProjectionOfPoint( ... ), customizing, 590-592 43 history, 3 NormaIVector( ... ), 209 installation, 643-644 NotSpecijied, 568 network installation, 198, nPoints, 580 560 NUBS2d, 156-158,457, 458 structure of a program, NUBS3d, 156, 496, 497 17-22 NUBS_Surf, 275, 498, 499 updating, 644 numerical errors, 580-581 what, 1-2 numerical problem, 54, 210, why, 3-5 235, 296, 305 Open Geometry parameters, NURBS, 274-277 591 NURBS2d, 156, 459, 460 OPENGL, v, vii, 1,2,6,8,12, NURBS3d, 156, 499, 500 193, 194, 196, 350, NURBS_Surf, 275, 501, 502 351, 353, 357, 406, 561, 591, 621-623, 023d,460, 486, 502, 525, 548, 627, 628, 631 549, 579, 641 optimal view, 197 02d, 98, 441, 456, 457, 460, optimize the view, 197 464-466, 548, 579, Orange, 152, 179, 186, 244, 641 379, 474, 482, 568 03d, 187, 394, 444, 486, 489, Origin, 79, 89, 90, 100, 186, 494, 495, 502, 503, 203, 215, 217, 221, 505, 506, 511, 513, 236, 271, 278, 279, 514, 524, 525, 535, 307, 311, 313, 334, 548, 579, 641 352, 363, 365, 379, 03dGroup, 503, 504 420, 427, 434, 468, object-oriented, 8 473, 482, 519, 530, offset, 196 534, 555, 566, 577, offset curve, 47, 58 578, 613 generalized, 48-49 Origin2d, 29, 115, 165, 439, OffsetDistance( ... ),48 440, 577, 578 oloid, 5, 376-381 ortho projection, 187 reflection on, 376-381 Ortho3d,22 oloid motion, 379 orthonomic, 44, 45, 58, 377- one-sided surface, 228, 358 380 ONLY_BACKFACES,508 OscQuadDir( ... ),429 ONLY]RONTFACES, 487, osculating 508, 533 Bezier curves, 133 opacity, 564-565 circle, 40, 132, 134, 261- Open Geometry 263 button bar, 19 conic, 4, 111 changes in the new ver• plane, 262,360,361, 363, sion,22-23 365,388 class list, 641-642 quadric, 426-430 Index 667 output directory, 560, 592 481-487,489-492,495, 497-507,510-524,526- P23d, 442,447, 461, 462, 475, 531, 534-539, 542, 476, 504, 505, 549, 548-551, 555, 556, 641 562-566, 574, 605, P2d, 8, 9, 11, 29-31, 33-36, 641 39, 40, 42-44, 49, PARABOLA, 110, 119, 446 50, 52, 53, 56-58, parabola, 120, 123, 125, 131, 62, 63, 66, 75, 76, 383, 615, 619 79-81, 83, 84, 98- ParabolaOfNthOrder, 462, 463 100, 110-112, 115, parabolic net projection, 400 117-121, 128, 135, parallel circle, 15 136, 141, 146, 147, parallel projection, 397 149, 153, 154, 156- ParamCurve2d, 37, 39, 40, 158, 161-165, 167, 42-44,46-48,54,58, 168, 171, 173-175, 61, 62, 64, 113, 119, 177-180, 243, 274, 147, 148, 152-154, 297, 412-415, 417- 156, 163, 164, 168, 421, 438-444, 446- 273, 440, 443, 457- 465, 467-478, 497, 459, 462, 464, 465, 499, 500, 504, 505, 470 549, 563, 564, 576- ParamCurve3d, 209, 242, 261, 578, 595, 613, 615- 262, 280-283, 360- 617,641 362, 377, 378, 398, P3d, 12, 13, 92-95, 123, 125, 403, 423, 482, 494, 144, 182-184, 188, 496, 497, 499, 500, 192, 200, 207-212, 506, 507, 520 214-221, 224, 231, parameterized curve, vi, 39, 235-240,243-247,249- 41, 49, 95, 98, 147, 253, 262-265, 267, 148, 153, 167, 206, 268, 270, 271, 275, 242, 258, 261, 398, 276, 278-280, 282, 569 284, 288, 289, 291, parameterized surface, 20, 569 294, 296, 298, 299, parametric representation, 63, 306, 307, 310, 312- 120, 132, 167, 207, 314, 317, 318, 320, 222, 237, 248, 257, 322, 325, 328, 333, 258, 260, 281, 282, 334, 346, 352, 353, 364, 569, 571, 573, 360-363, 365, 367, 574 372, 374, 377, 378, bad, 570-571 380, 381, 383, 385, homogeneous, 248, 249, 387, 391, 396, 398, 404 399, 401-403, 409, of Bezier curve, 128 410, 423, 424, 428, rational, 571-573 430, 432, 434, 435, 668 Index

parametric transformation, 573, Persistance of Vision Ray- 575 tracer, 335 fractional linear, 575 personal implementation, 25 linear, 129 Perspective, 22 ParamSurface, 196, 207-211, perspective, 192 220-222, 224, 233, perspectograph, 79 236, 238-240, 251, PETERS, vii 271, 278, 322, 346, photorealistic rendering, 335 383, 393, 427, 433, Pink, 152, 182, 326, 452, 568 445, 484, 491, 493, PLUCKER, 196,234 498, 501, 507, 509, Plucker conoid, 196, 234, 235, 510, 520, 522, 528, 238, 241, 242, 245, 532, 538-541, 544, 247 574 Plane, 94, 125, 182, 214, 221, Pascal 236, 240, 244, 262, theorem of, 116 271, 282, 295, 298, PASCAL, 116, 119, 611, 615 299, 320, 328, 333, path curve, 2, 4 352, 361-363, 365, path names, 17 378, 381, 383, 398, path surface, 2 399, 410, 423, 424, PathCurve2d, 54, 451, 457, 444, 483, 489, 491, 465, 594-597, 613, 495, 503, 505, 509, 616 511-513,515-519,521, PathCurve3d, 93, 245, 296, 527, 531, 533, 535- 310, 311, 317, 398, 537, 539, 543, 551, 494, 511, 512, 605 555, 561 PathSurface, 507 planetary motion, 610 PathTo-.BMP -.Directory, 590, platform, 9 592 point at infinity, 91, 120, 249, PathTo-.DATA-.Directory, 590, 280, 404-406, 408, 592 411, 424, 468, 518, PAUKOWITSCH, vii 575 PEANO,102 pointer variable, 189, 349 , 102 PointOfCrossRatio( ... ), 415 PEAUCELLIER, 612, 614, 615 PointsOnConic, 418, 517, 518 pedal curve, 43,246,247 PointsOnConic2d, 413, 466, pencil of circles, 49 467, 469 PencilOfLines, 517, 518 polar, 113, 114, 116 PencilOfLines2d, 413, 414, 466, polar coordinates, 54, 55, 61, 467, 469 167, 611, 615 PencilOfPlanes, 517, 518 polarity, 113, 114, 116 PencilOfPoints, 517, 518 pole, 42-44, 95, 113, 114, 116, PencilOfPoints2d, 413-415, 466, 119, 120, 247 467, 469 Poly2d, 35, 37, 88, 89, 444, PERSEUS, 295 445,466,472, 489 Index 669

Poly3d, 182, 204, 252, 255, ProjScale2d, 411-414, 417-419, 293, 309, 350, 357, 421, 466-468, 470 365, 368, 394, 423, ProjType, 517, 518 489, 513-515, 524- ProjType2d, 412, 413, 419, 526 467, 469 Polyhedron, 196, 393, 394, Prop 3d, 502 396, 486, 514, 515, protected, 24 526, 532, 544 public, 24 POTTMANN, viii public member variable, 579 *.pov, 336, 340 pulley block, 82-86 POV-Ray, vi, viii, 16, 23, 185, pulsing real, 54, 82, 84, 85, 187, 207, 329, 330, 167, 168, 175, 178, 335-346, 371, 434, 238, 253, 289, 295, 486, 533, 591, 657, 316,416 659 PulsingReal, 51, 52, 117, 194, PrepareContour( ), 223 195, 295, 552 PreparePovRayFile( ... ), 339 PureBlue, 568 principal ray, 196 PureBrown, 568 principle of duality, 113, 114, Pure Cyan, 568 116, 164, 431, 468 Pure Gray, 568 printf( ... ), 10 Pure Green, 95, 568 PrintString( . .. ), 10, 138, 555, PureMagenta, 568 561 Pure Orange, 568 privacy of classes, 583 PurePink, 568 private, 24 PureRed, 95, 385, 451, 507, programming style, 24 568,611 Projection, 549 Pure White, 89, 204, 351, 357, projection plane, 196 531, 568, 605 projective Pure Yellow, 385, 396, 568 coordinate system, 411, PUYOL, vii 468, 518 coordinates, 411 quadratrix, 37-40 geometry, vi, 6, 110, 113, QuadrEquation( . .. ), 559 164, 248, 389, 397, Quadric, 426, 427, 520, 529 403-425, 431 quadric, 426-430, 520 scale, 411-415, 417, 418, quality mode, 579 420, 422-424, 466, 468,516,517 R6 mechanism, 305, 309 transformation, 406, 408 RandNum, 100, 142,275,553, Projectivity, 422, 515, 516 576,600 Projectivity2d, 417-419, 421, random 466, 468 change, 149 ProjScale, 411, 422, 423, 515- color, 103 519 fractal, 102 670 Index

number, 66, 69, 100,201, 383-387, 391, 394, 553, 578 395, 398, 399, 401- process, 149, 150 403, 407, 409, 410, vector, 140, 144, 146, 147, 412, 414, 417-420, 149, 162 423, 424, 428-430, RatBezierCurve2d, 126, 132, 432-435,438-451,453- 470, 471 455, 457-473, 475- RatBezierCurve3d, 126, 520 481, 483-487, 489- RatBezierSurJace, 126, 266, 495, 497-530, 533, 268, 522, 523 535-545,547-561,563, rational B-spline curve, 404 564, 567, 574, 594- rational B-spline surface, 274, 597, 601, 605, 613, 277 615-617 rational Bezier curve, 130- real time, 5, 12, 194, 207, 336, 132, 404 344,346 rational Bezier surface, 266- real-time animation, 20, 57, 274 193,201 ray-tracing, 23, 283, 335-344 RealArray, 553, 601 Real, 11, 13, 25, 29-31, 33-35, Rect2d, 173,466, 472 39-44,46-50,52,53, Rect3d, 214, 391, 513, 524, 55-60,62-64,72,79- 605 81, 83, 85, 86, 88, rectangle, 18, 67, 88-91, 108, 90,95,107-109,111, 175, 214-216, 253, 112, 115, 119-122, 254, 285, 287, 288, 125, 136, 138, 141- 295, 299, 351, 354, 143, 145, 147, 148, 357, 358, 378, 386, 152, 153, 156, 157, 392, 398, 399, 472, 161-165, 167, 168, 491, 524, 575, 591 171, 173, 174, 177- rectifying plane, 359-361, 363, 179, 185, 195, 196, 365, 367, 372 200, 203, 204, 207- rectifying torse, 360 212, 214-216, 218- Red, 8, 11, 13, 14, 16, 19, 20, 222, 224, 226, 231, 31, 51, 53, 56, 57, 232, 235-241, 243, 60, 63, 70, 73, 89, 245-247,249-255,262- 99, 106, 109, 112, 264, 268, 271, 273, 119, 124, 126, 135, 274, 278, 280-283, 136, 138, 141, 149, 286-291, 294, 295, 152, 169, 174, 179, 297-299, 305, 306, 238, 240, 241, 244, 310-314, 316, 319, 247, 278, 283, 284, 320, 322, 325-327, 296, 298, 299, 307, 329, 333, 334, 346, 311, 314, 334, 374, 349, 351-353, 355- 379, 385, 399, 416, 357, 360-366, 372- 417, 419, 425, 439, 374, 377-379, 381, 443, 454, 457, 463, Index 671

468, 470, 474, 482, polygon, 441, 472, 526, 494, 496, 502, 507, 579 531, 556, 565, 568, prism, 350, 527 595, 597, 618 pyramid, 527 REFLECTING, 16, 213, 224, tetrahedron, 575 227, 243, 259, 261, triangle, 37 277, 284, 348, 387, Reichstag building, 258 427, 430, 485, 490, relevant changes of the scene, 493, 494, 499, 502, 19 508, 511, 523, 533, removal of hidden surfaces, 535, 541 196 reflection, 34, 58, 119, 121, restart, 10, 22, 23, 324, 578, 122, 125, 170, 175, 585, 587-589 178, 198, 201, 202, restart option, 6, 392 260, 280-283, 333, restartable, 587, 589 335, 336, 341, 376, RestoreLetters( ), 561 377, 382-385, 387, return, 229 388 ReverseOrder( ), 130 law of, 41 RGB colors, 627 multiple, 201, 382 RGB value, 340, 350, 351, partial, 170 569, 591 total, 170, 172, 178 right conoid, 285, 286 Refract( ... ), 171 right helicoid, 212 refraction, 170-180, 382 right rotoid helicoid, 358 index of, 172, 175-178, right side view, 16 180 ROBERTS, 451 on a circle, 176-180 rocking horse, 194 on a straight line, 172- Rod2d, 472, 473 175 Rod3d, 125, 328, 512, 528 RegDodecahedron, 190, 191, rolling snail, 4 524 roman font type, 561 RegFrustum, 185, 187, 310, Roman surface, 573 393, 525-527, 532 rotation matrix, 193 RegPoly2d, 82, 85, 441, 466, RotMatrix, 190, 193,487,503, 472 515, 533, 543 RegPoly3d, 182, 310, 333, 489, RoundArrow( ... ), 481 513, 526, 642 ruled surface, 5, 211-222, 426, RegPrism, 185, 349, 353, 525, 428, 431 527, 534, 605 RuledSurface, 207-209, 211, RegPyramid, 525, 527,605 212, 216, 218, 219, regular 235, 245, 246, 288, frustum, 187, 311 289, 313, 362, 363, hexagon, 35, 37 402, 426, 428, 429, pentagons, 524 507, 520, 528 672 Index

ruling, 211, 219-221, 244, 286, setsource( ... ), 563 290, 292, 315, 378, shade, 393-397 429 shade contour, 393-397 RUNGE-KuTTA, 448, 491 shaded surface, 16 shadeWithTexture( ... ),352 saddle point, 593, 594 shading algorithm, 294 SADOWSKY, 358 shadow, 393-397 safeExit( ), 560 ShowAxes, 482, 554, 556, 566 saveAsBitmapAnimation( ... ), ShowAxes2d, 59, 112, 169, 331, 339 448, 454, 463, 496, Scene, 11-13, 59, 60, 72, 81, 554, 567, 568, 595, 105, 108, 109, 112, 597 166, 169, 178, 179, ShowAxes3d, 19, 20, 554, 567, 183, 186-188, 192- 568 195, 212, 224, 228, showsource( ), 563 231, 268, 272, 326, showV3d( ... ), 335 327, 331, 333, 347, sides of the triangle, 9 369, 386, 387, 430, silent( ), 100 447, 448, 454, 465, SILICON GRAPHICS, vii 482, 488, 492-494, sinking ship, 4 507, 510, 534, 554, sky sphere, 278, 279, 338, 339 556, 563, 576, 577, slanted letters, 6 585-587, 590, 594, SliderCrank, 474 595, 607, 611, 618 Smart Text, 555, 556 scope of variables, 583 SMITH, vii secondDerivative( ... ), 594 SMOOTH, 16, 213, 224, 227, sectionWithCircle( ... ), 76 243, 259, 261, 277, sectionWithConic( ... ), 54 284, 348, 387, 427, sectionWithOtherPoly3d( ... ), 430, 485, 493, 494, 184 499, 502, 508, 511, sectionWithstraightLine( ... ),279 523, 526, 533, 541 sectionWithsurface( ... ),445 smooth-shaded, 329, 332, 341, Section With T woOtherPlanes( ... ), 346,486 183 SOLID, 185, 315, 356, 525, Sector2d,30,83,86,437,438, 527, 528, 534 473,529 Solid, 480, 526, 532-534 Sector3d, 473, 480, 529, 530, solid code, 24 532 sophisticated output, 10 SEGAL, vii spatial kinematics, 301 segment of a circle, 437 special characters, 562 self-intersection, 223, 228-230 special projection, 16 SetColor, 533 Sphere, 24, 185, 216, 279, SetCrossRatio, 407-410, 418 503, 506, 524, 530, setDepthRange( ... ), 196 535, 536 setOpacity( ... ), 564 Index 673 sphere, 176, 185, 202, 203, 117, 118, 121, 122, 205, 216, 230, 233, 135, 163-165, 167, 234, 258, 277, 309, 168, 171-174, 176, 312, 339, 340, 402, 177, 179, 412-421, 403, 535 440, 442, 443, 446, spiral, 169, 256, 258, 312 447, 451, 453, 461, spiral stove, 263 462, 464, 467-470, spiral surface, 258, 264 475-477, 479, 536, spiric line, 295-297 595, 616 spline, 150 StrL3d, 14-16, 92-95, 124, spline surface, vi, 266 182, 185, 196, 209, Spline3d, 493, 495, 538 211, 214-216, 220, Split( ... ), 130 221, 235, 236, 238, SplitU( ... ),267 240, 244, 245, 271, SplitV( ... ), 267 279, 282-284, 291, Sqrt( x ), 557 310, 312, 313, 322, sqrt( x ), 557 325, 333-335, 353, STACHEL,V,vii, 3, 345 361, 362, 368, 369, StaightLine3d( ... ), 196 379, 381, 383, 385, standard output directory, 198, 386, 396, 398, 399, 560 409, 410, 424, 427, static, 587, 589, 590 428, 430, 444, 481, status bar, 22 483, 487, 489-491, STD_OFFSET, 93, 95, 196, 495, 503-506, 508, 399, 429, 444, 480, 509, 511-513, 515- 484, 486, 490, 491, 521, 525-530, 533- 495, 508, 513, 514, 539, 566 520, 522, 526, 528, structure, 546, 553, 587, 600, 530, 533, 535, 537, 601 538, 554, 564 STUDY, 91 STEINER, 167, 573 suffix, 181, 345 Steiner's cycloid, 167, 168 SUPER-REFLECTING,508, straighedge and compass, 38 511 straight line, 12, 15 supercyclide, 234, 248-255 StraightLine2d, 8, 11, 31, 36, SUPERGRAPH, 3 63, 112, 119, 146, supplementary angle, 10 153, 154, 165, 175, surface of conic sections, 248, 179,422,443,474 571 StraightLine3d, 13, 184, 215, surface of revolution, 16, 258, 237, 244, 253, 255, 382 279, 284, 296, 306, SurfacePoint( ... ), 575 307, 369, 385, 386, SurfOfRevol, 16, 507, 538 396, 430, 435 SurfWith Thickness, 230-232, StrL2d, 31, 42, 43, 46, 62, 507, 539 79, 84, 85, 111, 115, sweep curve, 2 674 Index

sweep surface, 2 146, 165, 167, 169, 175, 179, 213, 222, Tangent( ... ), 64,164 233, 243, 255, 277, TangentPlanesOjCone, 517, 518 284, 292, 306, 307, TangentsOjConic, 517, 518 348, 369, 386, 387, TangentsOjConic2d, 413, 466, 396, 422, 427, 430, 467, 469 435, 438, 439, 442, TangentVector( ... ), 164, 448, 452, 457, 458, 460, 491 474, 481, 497, 500, target point, 196, 200 507, 508, 511, 514, templet file, 18 531, 541 , 97, 99, 104 ThinOrThick, 36, 62, 153, 156, tetrahedron, 185, 187, 303, 335, 412, 419, 438, 308, 309, 575 440, 442, 444, 446, texture, 67, 187, 207, 302, 450, 453, 455, 457- 309, 338-342, 353, 459, 466-470, 472, 354, 356 473, 477, 478, 480, texture mapping, 2, 301, 336, 481, 483, 484, 486, 350-357 487, 490-492, 495, with Open Geometry, 350- 497, 498, 500, 501, 357 508, 509, 513-515, textured polygons, 351 517, 518, 520-522, TextureAfap, 350, 466, 514, 524-526,528-530,533, 515 535, 537-539, 563, THALES, 610 564 TheCamera, 189 top view, 16, 190, 191, 203, theorem of Brianchon, 116 218, 235, 242, 247, theorem of De La Hire, 606 400 theorem of Pascal, 116 torse, 218, 219, 222, 313, 314, T1lIC}(,31, 53,60,65,84,86, 358, 359, 377 93, 110, 112, 118, Torus, 16, 185, 540 119, 126, 129, 167, torus, 14-16, 185, 294, 298 169, 174, 184, 211, TransformlntoPolyhedron( ), 393, 215, 235, 237, 243, 514 244, 247, 253, 255, Translate( ... ),187 279, 307, 314, 385, transparency, 203, 205, 241, 386, 417, 422, 430, 278, 332, 340, 350, 441, 443, 448, 458, 351, 387, 561, 564- 460, 463, 465, 471, 565 473, 482, 484, 494, tripod,4 496, 497, 500, 507, Trochoid, 478 511, 521, 531, 565 trochoid,67,68,218,280,479 T1lIN, 8, 11, 13, 15, 30, 31, trochoid motion, 478, 604 50, 53, 60, 84, 85, TubSurJ, 541 90,99,112,122,126, tubular surface, 258 Index 675 twisted cubic, 422 509, 511-515, 520, two-dimensional array, 601 526-529,533-539,542, two-point guidance, 606 543, 549, 551, 552, type of a variable, 8 555, 556, 558, 559, TypeOjConic, 111, 124, 446, 562 490 Vector, 505, 543, 557 velocity pole, 63, 610 understandable code, 21 Vertex, 65 undocumented classes, 6 VERY_REFLECTING, 508 University of Applied Arts, VERY_THICK, 8, 11, 13, 129, 603 417, 441, 452, 470, UNIX, 643 471, 484, 519, 521, update, 596 566 updating OPEN GEOMETRY 1.0, VeryFirstTime( ), 22 644 video card, 591 uppercase format, 21 VILLARCEAU, 298, 299 Villarceau circles, 299 V23d, 461, 475,476,478,504, virtual camera, 187, 549 542, 549, 556, 557 virtual member function, 491 V2d, 30, 34, 39, 49, 58, 62, VLines, 222 66, 68, 69, 73, 79, 83-85, 98, 101, 102, WALLNER, vii, viii 112, 114, 135, 141, wave fronts, 57 143, 144, 162-164, WEGNER, viii 168, 171, 173, 179, White, 109, 343, 568 352, 413, 415, 416, white color, 350 421, 439, 442-444, WINDOWS, 9, 345, 643 447-449, 451, 453, 9x, 3 456, 457, 460-462, 2000, 3 464, 476-479, 504, NT, 3 542, 549, 556, 558 wire frame, 206, 229, 230, V3d, 124, 125, 200, 209-212, 252, 324, 327 214-216,218-221,235, WireFrame( ... ), 196,222,427 243, 245, 253, 262, wobbler, 376-381 271, 282, 284, 288, workspace, 9, 583, 593, 596 289, 294, 296, 298, WritelmplicitEquation( ), 123 299, 307, 311, 313, WriteNice( ... ), 561, 562 316, 322, 326-328, WUNDERLICH, 309, 358-360, 334, 335, 352, 363, 364 365, 367, 368, 372, 374, 379-381, 383, Xaxis, 21, 183, 192, 203, 224, 402, 403, 410, 428, 227, 231, 270, 299, 429, 432, 433, 444, 319, 349, 386, 391, 461, 481, 487, 489- 566 492, 495, 503-506, 676 Index

Xdir, 188, 193, 271, 326, 333, 368, 379, 424, 519, 424, 427 565 XYplane, 123, 180, 220, 240, ZerosOfPoly3( ... ), 306, 559 241, 259, 296, 333, ZerosOfPoly4( ... ), 384, 559 396, 398, 399, 555, zoom in, 16 561 zoom out, 16 XZplane, 123, 221, 333 Yaxis, 21, 183, 227, 276, 278, 315, 349, 356, 383, 386, 391, 392, 427, 499, 502 Y dir, 326, 333, 353, 386, 387, 424, 539 Yellow, 16, 31, 106, 109, 125, 126, 146, 152, 165, 179, 182, 186, 188, 203, 232, 276, 278, 281, 284, 311, 312, 326, 347, 374, 427, 482, 499, 502, 540, 541, 568, 591, 614, 616 YEN, vii YOUNG, viii YZplane, 123, 246, 270, 296, 333 z-buffer, 426, 428, 554 z-buffering, 2, 28, 181, 184, 196, 329, 508, 543, 550, 554 Zaxis, 183, 185, 188-190, 192, 203, 204, 211, 220, 227, 231, 237, 240, 241, 243, 244, 260, 270, 276, 278, 279, 284, 306, 307, 311, 313, 319, 321, 326, 329, 346, 349, 352, 392, 427, 482, 494, 499, 502, 524, 525, 527, 528, 539, 566 ZbufFer( ), 196 Zdir, 92, 94, 95, 193, 236, 240, 244, 245, 326, 333,