summaryrefslogtreecommitdiff
path: root/libgeometry/doc/libgeometry.ms
diff options
context:
space:
mode:
Diffstat (limited to 'libgeometry/doc/libgeometry.ms')
-rw-r--r--libgeometry/doc/libgeometry.ms429
1 files changed, 0 insertions, 429 deletions
diff --git a/libgeometry/doc/libgeometry.ms b/libgeometry/doc/libgeometry.ms
deleted file mode 100644
index 47c8d94..0000000
--- a/libgeometry/doc/libgeometry.ms
+++ /dev/null
@@ -1,429 +0,0 @@
-.TL
-libgeometry
-.AU
-Rodrigo G. López
-.sp
-rgl@antares-labs.eu
-.AI
-Antares Telecom Laboratories
-Albatera, Alicante
-.FS
-ACHTUNG! this is a
-.B "WORK IN PROGRESS"
-.FE
-.SH
-Introduction
-.PP
-.I Libgeometry is a computational geometry library that provides all
-the utilities anybody working with graphics or scientific simulations
-could need.
-.NH 1
-Data Structures
-.NH 2
-Point2
-.P1
-struct Point2 {
- double x, y, w;
-};
-.P2
-.PP
-.I Point2
-represents a point in two-dimensional projective space, which itself
-is an extension of the two-dimensional euclidean space that allows us
-to work with vectors and compose affine transformations in a friendly
-manner. A point
-.EQ
-gfont roman
-(x, y, w)
-.EN
-made out of homogenous coordinates
-.I x ,
-.I y ,
-and
-.I w ,
-yields a point with cartesian coordinates
-.EQ
-(x/w, y/w) .
-.EN
-.NH 2
-Point3
-.P1
-struct Point3 {
- double x, y, z, w;
-};
-.P2
-.PP
-.I Point3
-is a point in three-dimensional projective space.
-.NH 2
-Matrix
-.P1
-typedef double Matrix[3][3];
-.P2
-.PP
-.I Matrix
-represents a 3x3 matrix, thought to compose affine transformations to
-apply to homogeneous 2D points.
-.NH 2
-Matrix3
-.P1
-typedef double Matrix3[4][4];
-.P2
-.PP
-.I Matrix3
-represents a 4x4 matrix, thought to compose affine transformations to
-apply to homogeneous 3D points.
-.NH 2
-Quaternion
-.P1
-struct Quaternion {
- double r, i, j, k;
-};
-.P2
-.PP
-.I Quaternions
-are a numbering system that extends the complex numbers up to
-four-dimensional space, and are used to apply rotations and model
-mechanical interactions in 3D space. Their main advantages with
-respect to their matrix relatives are increased computational and
-storage performance and gimbal lock avoidance.
-.NH 2
-RFrame
-.P1
-struct RFrame {
- Point2 p;
- Point2 bx, by;
-};
-.P2
-.PP
-A reference frame (or frame of reference) is
-.NH 2
-RFrame3
-.P1
-struct RFrame3 {
- Point3 p;
- Point3 bx, by, bz;
-};
-.P2
-.PP
-A reference frame (or frame of reference) is
-.NH 1
-Algorithms
-.NH 2
-Point2
-.SH
-Addition
-.P1
-Point2 addpt2(Point2 a, Point2 b)
-.P2
-.EQ
-a + b ~=~ left ( x sub a + x sub b ,~ y sub a + y sub b ,~ w sub a + w sub b right )
-.EN
-.SH
-Substraction
-.P1
-Point2 subpt2(Point2 a, Point2 b)
-.P2
-.EQ
-a - b ~=~ left ( x sub a - x sub b ,~ y sub a - y sub b ,~ w sub a - w sub b right )
-.EN
-.SH
-Multiplication
-.P1
-Point2 mulpt2(Point2 p, double s)
-.P2
-.EQ
-p * s ~=~ left ( xs,~ ys,~ ws right )
-.EN
-.SH
-Division
-.P1
-Point2 divpt2(Point2 p, double s)
-.P2
-.EQ
-p / s ~=~ left ( x over s ,~ y over s ,~ w over s right )
-.EN
-.SH
-Vector Dot Product
-.P1
-double dotvec2(Point2 a, Point2 b)
-.P2
-.EQ
-a vec ~•~ b vec ~=~ x sub a x sub b + y sub a y sub b
-.EN
-.SH
-Vector Magnitude/Length
-.P1
-double vec2len(Point2 v)
-.P2
-.EQ
-| v vec | ~=~ sqrt { x sup 2 + y sup 2 }
-.EN
-.SH
-Vector Normalization
-.P1
-Point2 normvec2(Point2 v)
-.P2
-.EQ
-n vec ~=~ left ( x over {| v vec |},~ y over {| v vec |} right )
-.EN
-.NH 2
-Point3
-.SH
-Addition
-.P1
-Point3 addpt3(Point3 a, Point3 b)
-.P2
-.EQ
-a + b ~=~ left ( x sub a + x sub b ,~ y sub a + y sub b ,~ z sub a + z sub b ,~ w sub a + w sub b right )
-.EN
-.SH
-Substraction
-.P1
-Point3 subpt3(Point3 a, Point3 b)
-.P2
-.EQ
-a - b ~=~ left ( x sub a - x sub b ,~ y sub a - y sub b ,~ z sub a - z sub b ,~ w sub a - w sub b right )
-.EN
-.SH
-Multiplication
-.P1
-Point3 mulpt3(Point3 p, double s)
-.P2
-.EQ
-p * s ~=~ left ( xs,~ ys,~ zs,~ ws right )
-.EN
-.SH
-Division
-.P1
-Point3 divpt3(Point3 p, double s)
-.P2
-.EQ
-p / s ~=~ left ( x over s ,~ y over s ,~ z over s ,~ w over s right )
-.EN
-.SH
-Vector Dot Product
-.P1
-double dotvec3(Point3 a, Point3 b)
-.P2
-.EQ
-a vec ~•~ b vec ~=~ x sub a x sub b + y sub a y sub b + z sub a z sub b
-.EN
-.SH
-Vector Cross Product
-.P1
-double crossvec3(Point3 a, Point3 b)
-.P2
-.EQ
-a vec ~×~ b vec ~=~ left ( y sub a z sub b - z sub a y sub b ,~
- z sub a x sub b - x sub a z sub b ,~
- x sub a y sub b - y sub a x sub b right )
-.EN
-.SH
-Vector Magnitude/Length
-.P1
-double vec3len(Point3 v)
-.P2
-.EQ
-| v vec | ~=~ sqrt { x sup 2 + y sup 2 + z sup 2 }
-.EN
-.SH
-Vector Normalization
-.P1
-Point3 normvec3(Point3 v)
-.P2
-.EQ
-n vec ~=~ left ( x over {| v vec |},~ y over {| v vec |},~ z over {| v vec |} right )
-.EN
-.NH 2
-Matrix
-.SH
-Addition
-.P1
-void addm(Matrix A, Matrix B)
-.P2
-.EQ
-( bold A + bold B ) sub {i,j} ~=~ bold A sub {i,j} + bold B sub {i,j}
-.EN
-.SH
-Substraction
-.P1
-void subm(Matrix A, Matrix B)
-.P2
-.EQ
-( bold A - bold B ) sub {i,j} ~=~ bold A sub {i,j} - bold B sub {i,j}
-.EN
-.SH
-Multiplication
-.P1
-void mulm(Matrix A, Matrix B)
-.P2
-.EQ
-left [ bold A bold B right ] sub {i,j} ~=~ sum from {k = 0} to 3-1 bold A sub {i,k} bold B sub {k,j}
-.EN
-.SH
-Transpose
-.P1
-void transposem(Matrix M)
-.P2
-.EQ
-( bold M sup T ) sub {i,j} ~=~ bold A sub {j,i}
-.EN
-.SH
-Identity
-.P1
-void identity(Matrix M)
-.P2
-.EQ
-bold M ~=~ left [ rpile {
- 1 ~ 0 ~ 0
-above 0 ~ 1 ~ 0
-above 0 ~ 0 ~ 1
-} right ]
-.EN
-.SH
-Determinant
-.P1
-double detm(Matrix M)
-.P2
-.EQ
-det( bold M ) ~=~ lpile {
- m sub 00 ( m sub 11 m sub 22 - m sub 12 m sub 21 ) +
-above m sub 01 ( m sub 12 m sub 20 - m sub 10 m sub 22 ) +
-above m sub 02 ( m sub 10 m sub 21 - m sub 11 m sub 20 )
-}
-.EN
-.NH 2
-Matrix3
-.SH
-Addition
-.P1
-void addm3(Matrix3 A, Matrix3 B)
-.P2
-.EQ
-( bold A + bold B ) sub {i,j} ~=~ bold A sub {i,j} + bold B sub {i,j}
-.EN
-.SH
-Substraction
-.P1
-void subm3(Matrix3 A, Matrix3 B)
-.P2
-.EQ
-( bold A - bold B ) sub {i,j} ~=~ bold A sub {i,j} - bold B sub {i,j}
-.EN
-.SH
-Multiplication
-.P1
-void mulm3(Matrix3 A, Matrix3 B)
-.P2
-.EQ
-left [ bold A bold B right ] sub {i,j} ~=~ sum from {k = 0} to 4-1 bold A sub {i,k} bold B sub {k,j}
-.EN
-.SH
-Transpose
-.P1
-void transposem3(Matrix3 M)
-.P2
-.EQ
-( bold M sup T ) sub {i,j} ~=~ bold A sub {j,i}
-.EN
-.SH
-Identity
-.P1
-void identity3(Matrix3 M)
-.P2
-.EQ
-bold M ~=~ left [ rpile {
- 1 ~ 0 ~ 0 ~ 0
-above 0 ~ 1 ~ 0 ~ 0
-above 0 ~ 0 ~ 1 ~ 0
-above 0 ~ 0 ~ 0 ~ 1
-} right ]
-.EN
-.SH
-Determinant
-.P1
-double detm3(Matrix3 M)
-.P2
-.EQ
-det( bold M ) ~=~ rpile {
- m sub 00 ( m sub 11 ( m sub 22 m sub 33 - m sub 23 m sub 32 ) +
- m sub 12 ( m sub 23 m sub 31 - m sub 21 m sub 33 ) +
- m sub 13 ( m sub 21 m sub 32 - m sub 22 m sub 31 ) )
-above -m sub 01 ( m sub 10 ( m sub 22 m sub 33 - m sub 23 m sub 32 ) +
- m sub 12 ( m sub 23 m sub 30 - m sub 20 m sub 33 ) +
- m sub 13 ( m sub 20 m sub 32 - m sub 22 m sub 30 ) )
-above +m sub 02 ( m sub 10 ( m sub 21 m sub 33 - m sub 23 m sub 31 ) +
- m sub 11 ( m sub 23 m sub 30 - m sub 20 m sub 33 ) +
- m sub 13 ( m sub 20 m sub 31 - m sub 21 m sub 30 ) )
-above -m sub 03 ( m sub 10 ( m sub 21 m sub 32 - m sub 22 m sub 31 ) +
- m sub 11 ( m sub 22 m sub 30 - m sub 20 m sub 32 ) +
- m sub 12 ( m sub 20 m sub 31 - m sub 21 m sub 30 ) )
-}
-.EN
-.NH 2
-Quaternion
-.SH
-Addition
-.P1
-Quaternion addq(Quaternion q, Quaternion r)
-.P2
-.EQ
-q + r ~=~ ( r sub q + r sub r ,~ i sub q + i sub r ,~ j sub q + j sub r ,~ k sub q + k sub r )
-.EN
-.SH
-Substraction
-.P1
-Quaternion subq(Quaternion q, Quaternion r)
-.P2
-.EQ
-q - r ~=~ ( r sub q - r sub r ,~ i sub q - i sub r ,~ j sub q - j sub r ,~ k sub q - k sub r )
-.EN
-.SH
-Multiplication
-.P1
-Quaternion mulq(Quaternion q, Quaternion r)
-.P2
-.EQ
-q ~=~ [ r sub q ,~ v vec sub q ]
-r ~=~ [ r sub r ,~ v vec sub r ]
-qr ~=~ [ r sub q r sub r - v vec sub q • v vec sub r ,~ v vec sub r r sub q + v vec sub q r sub r + v vec sub q X v vec sub r ]
-.EN
-.SH
-Scalar Multiplication
-.P1
-Quaternion smulq(Quaternion q, double s)
-.P2
-.EQ
-qs ~=~ [ r sub q s ,~ i sub q s ,~ j sub q s ,~ k sub q s ]
-.EN
-.SH
-Inverse
-.P1
-Quaternion invq(Quaternion q)
-.P2
-.EQ
-q sup -1 ~=~ left ( r over {| q | sup 2} ,~ -i over {| q | sup 2} ,~ -j over {| q | sup 2} ,~ -k over {| q | sup 2} right )
-.EN
-.SH
-Magnitude/Length
-.P1
-double qlen(Quaternion q)
-.P2
-.EQ
-| q | ~=~ sqrt { r sup 2 + i sup 2 + j sup 2 + k sup 2 }
-.EN
-.NH 2
-RFrame
-.SH
-Change of reference
-.P1
-Point2 rframexform(Point2 p, RFrame rf)
-.P2
-.NH 2
-RFrame3
-.SH
-Change of reference
-.P1
-Point3 rframexform3(Point3 p, RFrame3 rf)
-.P2