
README     
Andrew Glassner / 14 August 1990 
This document looks best when viewed with a fixed-pitch font 
on a line width of at least 60 characters.

This directory contains the 43 original C source files from 
the book "Graphics Gems" (editor, Andrew S. Glassner, 
published by Academic Press, Cambridge, MA, 1990, 
ISBN 0-12-286165-5, 833 pgs.).

Many of the files depend on the header "GraphicsGems.h" 
(called "GraphicsGems.h" in this directory), and the Graphics 
Gems vector library (called "GGVectorLibrary.c" in this 
directory).  You will also need the standard I/O library 
<stdio.h> and the math library <math.h> for many of the Gems.

Each Gem is made available on an as-is basis; although 
considerable effort has been expended to check the programs 
as originally designed and their release in electronic form, 
the authors and the publisher make no guarantees or 
warrantees about the correctness of any of these programs or 
algorithms.  

The authors and the publisher hold no copyright restrictions 
on any of these files; this source code is public domain, and 
is freely available to the entire computer graphics community 
for study, use, and modification.  We do request that the 
comment at the top of each file, identifying the original 
author and its original publication in the book Graphics 
Gems, be retained in all programs that use these files.

These files are stored in a plain text format; you may 
download  them without any special techniques (i.e. you need 
not enable binary transfer, or have a special formatter to 
read and use the code).

The master ftp site for this source code is 
weedeater.math.yale.edu.  If you suspect that a file at some 
site has been corrupted or changed, the originals will always 
be available there.  Additional submissions (bug fixes, 
skeleton programs, auxiliary routines, etc.) may be directed 
to the site administrator, Craig Kolb (kolb@yale.edu).  He 
will determine on a case-by-case basis if a particular 
submission should be included in this archive.  If accepted, 
these routines will be made available in a companion 
directory.

These files may be downloaded via anonymous ftp.  Connect to 
weedeater@math.yale.edu using a communications program that 
understands ftp (File Transfer Protocol).  When prompted for 
a login name use 'anonymous' (in this paragraph, all phrases 
in single quotes are strings you type, without the quotes).  
For your password use your own last name.  When logged in, 
type 'cd pub/GraphicsGems/src' .  To look at the contents type 
'ls' or 'dir'.  To download a file, type 'get filename', where 
filename is the explicit name of the file you wish to 
retreive.  To download many files with a single command, type 
'mget metaname' (here metaname refers to a name using the 
standard UNIX metacharacter * to represent any sequence of 
characters; e.g. 'mget *.h *.c' will retreive all files that 
end in .h or .c).  Normally mget will prompt you to confirm 
each file; if you wish to turn prompting off type 'prompt' 
before the mget command.  Additional files (such as big fixes 
and helpful test and skeleton routines) may be available in 
companion directories; to see if any such directories exist 
type 'cd ..' to rise one directory in the hierarchy, and type 
'ls' to see all subdirectories under GraphicsGems.

================

The table below gives the correspondence between each source
file in this directory and the name of the Gem it implements.
Each implementation illustrates one way to realize the
techniques described by the accompanying Gem in the book. 
The files here contain only the source code for that 
realization.  For a more complete description of the 
algorithms and their applications see the Gems of the same 
name in the first 11 Chapters of the book.

---------- header files ----------
GraphicsGems.h         / Graphics Gems C Header File

----------    C code    ----------
2DClipping.c           / Two-Dimensional Clipping: 
                         A Vector-Based Approach
2DPointOnLine.c        / A Fast 2D Point-On-Line Test
3DHashingFunction.c    / 3D Grid Hashing Function
3DViewAndRotation.c    / 3D Viewing and Rotation Using
                         Orthonormal Bases
AAPolyScan.c           / Fast Anti-Aliasing Polygon
                         Scan Conversion
AlbersProjection.c     / Albers Equal-Area Conic Map
                         Projection
AntiAliasedLines.c     / Rendering Anti-Aliased Lines
BitInterleaving.c      / Bit Interleaving for Quad- 
                         or Octrees
BoundingSphere.c       / An Efficient Bounding Sphere
BoxSphereIntersect.c   / A Simple Method for Box-Sphere 
                         Intersection Checking 
CircleRectIntersect.c  / Fast Circle-Rectangle Intersection
                         Checking 
ConcavePolygonScan.c   / Concave Polygon Scan Conversion
CubicAndQuarticRoots.c / Cubic and Quartic Roots
DigitalDissolve.c      / A Digital "Dissolve" Effect
DigitalLineDrawing.c   / Digital Line Drawing
EfficientJitter.c      / Efficient Generation of Sampling
                         Jitter Using Look-up Tables
FitDigitizedCurves.c   / An Algorithm for Automatically 
                         Fitting Digitized Curves
FixedPointTrig.c       / Fixed-Point Trigonometry with 
                         CORDIC Iterations
FormsAndVectors.c      / Forms, Vectors, and Transforms
GenericPolygonScan.c   / Generic Convex Polygon 
                         Scan Conversion and Clipping
GGVectorLibrary.c      / 2D And 3D Vector C Library   
HSLtoRGB.c             / A Fast HSL-to-RGB Transform
HypotenuseApprox.c     / A Fast Approximation to 
                         the Hypotenuse
LineEdgeIntersect.c    / Fast Line-Edge Intersections On 
                         A Uniform Grid   
MatrixInversion.c      / Matrix Inversion
MatrixOrthogonalize.c  / Matrix Orthogonalization
MatrixPostConcat.c     / Efficient Post-Concatenation of 
                         Transformation Matrices
MedianFinding.c        / Median Finding on a 3x3 Grid
NearestPointOnCurve.c  / Solving the 
                         Nearest-Point-On-Curve Problem
                         and
                         A Bezier Curve-Based Root-Finder
NumbersForGraphcs.c    / Nice Numbers for Graph Labels
OrderedDithering.c     / Ordered Dithering
PixelsAsIntegers.c     / Proper Treatment of Pixels 
                         As Integers
PointsInTriangle.c     / Generating Random Points 
                         In Triangles   
Quaternions.c          / Using Quaternions for Coding 
                         3D Transformations
RayBoxIntersect.c      / Fast Ray-Box Intersection
RayPolygonIntersect.c  / An Efficient Ray-Polygon 
                         Intersection
RecordingAnimation.c   / Recording Animation in Binary Order 
                         For Progressive Temporal Refinement  
RGBTriplesTo4Bits.c    / Mapping RGB Triples Onto Four Bits
SeedFill.c             / A Seed Fill Algorithm
SquareRoot.c           / A High-Speed, Low-Precision 
                         Square Root
SturmSequences.c       / Using Sturm Sequences to Bracket 
                         Real Roots of Polynomial Equations
SymmetricDoubleStep.c  / Symmetric Double Step Line Algorithm
TransformingBoxes.c    / Transforming Axis-Aligned 
                         Bounding Boxes
