diff options
Diffstat (limited to 'man/man3/matrix.html')
-rw-r--r-- | man/man3/matrix.html | 263 |
1 files changed, 0 insertions, 263 deletions
diff --git a/man/man3/matrix.html b/man/man3/matrix.html deleted file mode 100644 index ad72d10a..00000000 --- a/man/man3/matrix.html +++ /dev/null @@ -1,263 +0,0 @@ -<head> -<title>matrix(3) - Plan 9 from User Space</title> -<meta content="text/html; charset=utf-8" http-equiv=Content-Type> -</head> -<body bgcolor=#ffffff> -<table border=0 cellpadding=0 cellspacing=0 width=100%> -<tr height=10><td> -<tr><td width=20><td> -<tr><td width=20><td><b>MATRIX(3)</b><td align=right><b>MATRIX(3)</b> -<tr><td width=20><td colspan=2> - <br> -<p><font size=+1><b>NAME </b></font><br> - -<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - ident, matmul, matmulr, determinant, adjoint, invertmat, xformpoint, - xformpointd, xformplane, pushmat, popmat, rot, qrot, scale, move, - xform, ixform, persp, look, viewport – Geometric transformations<br> - -</table> -<p><font size=+1><b>SYNOPSIS </b></font><br> - -<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - -<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - <tt><font size=+1>#include <draw.h> - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>#include <geometry.h> - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void ident(Matrix m) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void matmul(Matrix a, Matrix b) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void matmulr(Matrix a, Matrix b) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>double determinant(Matrix m) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void adjoint(Matrix m, Matrix madj) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>double invertmat(Matrix m, Matrix inv) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>Point3 xformpoint(Point3 p, Space *to, Space *from) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>Point3 xformpointd(Point3 p, Space *to, Space *from) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>Point3 xformplane(Point3 p, Space *to, Space *from) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>Space *pushmat(Space *t) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>Space *popmat(Space *t) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void rot(Space *t, double theta, int axis) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void qrot(Space *t, Quaternion q) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void scale(Space *t, double x, double y, double z) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void move(Space *t, double x, double y, double z) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void xform(Space *t, Matrix m) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void ixform(Space *t, Matrix m, Matrix inv) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>int persp(Space *t, double fov, double n, double f) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void look(Space *t, Point3 eye, Point3 look, Point3 up) - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - <tt><font size=+1>void viewport(Space *t, Rectangle r, double aspect)<br> - </font></tt> -</table> -<p><font size=+1><b>DESCRIPTION </b></font><br> - -<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - These routines manipulate 3-space affine and projective transformations, - represented as 4×4 matrices, thus:<br> - - <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - <tt><font size=+1>typedef double Matrix[4][4];<br> - - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - - </table> - <i>Ident</i> stores an identity matrix in its argument. <i>Matmul</i> stores - <i>a×b</i> in <i>a</i>. <i>Matmulr</i> stores <i>b×a</i> in <i>b</i>. <i>Determinant</i> returns the determinant - of matrix <i>m</i>. <i>Adjoint</i> stores the adjoint (matrix of cofactors) - of <i>m</i> in <i>madj</i>. <i>Invertmat</i> stores the inverse of matrix <i>m</i> in <i>minv</i>, - returning <i>m</i>’s determinant. Should <i>m</i> be singular - (determinant zero), <i>invertmat</i> stores its adjoint in <i>minv</i>. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - The rest of the routines described here manipulate <i>Spaces</i> and - transform <i>Point3s</i>. A <i>Point3</i> is a point in three-space, represented - by its homogeneous coordinates:<br> - - <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - <tt><font size=+1>typedef struct Point3 Point3;<br> - struct Point3{<br> - - <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - double x, y, z, w;<br> - - </table> - };<br> - - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - - </table> - The homogeneous coordinates (<i>x</i>, <i>y</i>, <i>z</i>, <i>w</i>) represent the Euclidean - point (<i>x</i>/<i>w</i>, <i>y</i>/<i>w</i>, <i>z</i>/<i>w</i>) if <i>w</i>!=0, and a “point at infinity” if <i>w</i>=0. - - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - A <i>Space</i> is just a data structure describing a coordinate system:<br> - - <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - <tt><font size=+1>typedef struct Space Space;<br> - struct Space{<br> - - <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - Matrix t;<br> - Matrix tinv;<br> - Space *next;<br> - - </table> - };<br> - - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - </font></tt> - - </table> - It contains a pair of transformation matrices and a pointer to - the <i>Space</i>’s parent. The matrices transform points to and from - the “root coordinate system,” which is represented by a null <i>Space</i> - pointer. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - <i>Pushmat</i> creates a new <i>Space</i>. Its argument is a pointer to the - parent space. Its result is a newly allocated copy of the parent, - but with its <tt><font size=+1>next</font></tt> pointer pointing at the parent. <i>Popmat</i> discards - the <tt><font size=+1>Space</font></tt> that is its argument, returning a pointer to the stack. - Nominally, these two functions define a stack of - transformations, but <tt><font size=+1>pushmat</font></tt> can be called multiple times on the - same <tt><font size=+1>Space</font></tt> multiple times, creating a transformation tree. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - <i>Xformpoint</i> and <i>Xformpointd</i> both transform points from the <tt><font size=+1>Space</font></tt> - pointed to by <i>from</i> to the space pointed to by <i>to</i>. Either pointer - may be null, indicating the root coordinate system. The difference - between the two functions is that <tt><font size=+1>xformpointd</font></tt> divides <i>x</i>, <i>y</i>, <i>z</i>, - and <i>w</i> by <i>w</i>, if <i>w</i>!=0, making (<i>x</i>, <i>y</i>, <i>z</i>) the Euclidean - coordinates of the point. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - <i>Xformplane</i> transforms planes or normal vectors. A plane is specified - by the coefficients (<i>a</i>, <i>b</i>, <i>c</i>, <i>d</i>) of its implicit equation <i>ax+by+cz+d</i>=0. - Since this representation is dual to the homogeneous representation - of points, <tt><font size=+1>libgeometry</font></tt> represents planes by <tt><font size=+1>Point3</font></tt> structures, - with (<i>a</i>, <i>b</i>, <i>c</i>, <i>d</i>) stored in (<i>x</i>, <i>y</i>, <i>z</i>, <i>w</i>). - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - The remaining functions transform the coordinate system represented - by a <tt><font size=+1>Space</font></tt>. Their <tt><font size=+1>Space *</font></tt> argument must be non-null -- you can’t - modify the root <tt><font size=+1>Space</font></tt>. <i>Rot</i> rotates by angle <i>theta</i> (in radians) - about the given <i>axis</i>, which must be one of <tt><font size=+1>XAXIS</font></tt>, <tt><font size=+1>YAXIS</font></tt> or <tt><font size=+1>ZAXIS</font></tt>. - <i>Qrot</i> transforms by a rotation about an - arbitrary axis, specified by <tt><font size=+1>Quaternion</font></tt> <i>q</i>. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - <i>Scale</i> scales the coordinate system by the given scale factors - in the directions of the three axes. <i>Move</i> translates by the given - displacement in the three axial directions. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - <i>Xform</i> transforms the coordinate system by the given <tt><font size=+1>Matrix</font></tt>. If - the matrix’s inverse is known <i>a priori</i>, calling <i>ixform</i> will save - the work of recomputing it. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - <i>Persp</i> does a perspective transformation. The transformation maps - the frustum with apex at the origin, central axis down the positive - <i>y</i> axis, and apex angle <i>fov</i> and clipping planes <i>y</i>=<i>n</i> and <i>y</i>=<i>f</i> into - the double-unit cube. The plane <i>y</i>=<i>n</i> maps to <i>y</i>’=-1, <i>y</i>=<i>f</i> maps to - <i>y</i>’=1. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - <i>Look</i> does a view-pointing transformation. The <tt><font size=+1>eye</font></tt> point is moved - to the origin. The line through the <i>eye</i> and <i>look</i> points is aligned - with the y axis, and the plane containing the <tt><font size=+1>eye</font></tt>, <tt><font size=+1>look</font></tt> and <tt><font size=+1>up</font></tt> - points is rotated into the <i>x</i>-<i>y</i> plane. - <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> - - <i>Viewport</i> maps the unit-cube window into the given screen viewport. - The viewport rectangle <i>r</i> has <i>r</i><tt><font size=+1>.min</font></tt> at the top left-hand corner, - and <i>r</i><tt><font size=+1>.max</font></tt> just outside the lower right-hand corner. Argument <i>aspect</i> - is the aspect ratio (<i>dx</i>/<i>dy</i>) of the viewport’s pixels (not of the - whole viewport). The whole window is transformed - to fit centered inside the viewport with equal slop on either - top and bottom or left and right, depending on the viewport’s - aspect ratio. The window is viewed down the <i>y</i> axis, with <i>x</i> to - the left and <i>z</i> up. The viewport has <i>x</i> increasing to the right - and <i>y</i> increasing down. The window’s <i>y</i> coordinates are mapped, - unchanged, into the viewport’s <i>z</i> coordinates.<br> - -</table> -<p><font size=+1><b>SOURCE </b></font><br> - -<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - <tt><font size=+1>/usr/local/plan9/src/libgeometry/matrix.c<br> - </font></tt> -</table> -<p><font size=+1><b>SEE ALSO </b></font><br> - -<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> - - <a href="../man3/arith3.html"><i>arith3</i>(3)</a><br> - -</table> - -<td width=20> -<tr height=20><td> -</table> -<!-- TRAILER --> -<table border=0 cellpadding=0 cellspacing=0 width=100%> -<tr height=15><td width=10><td><td width=10> -<tr><td><td> -<center> -<a href="../../"><img src="../../dist/spaceglenda100.png" alt="Space Glenda" border=1></a> -</center> -</table> -<!-- TRAILER --> -</body></html> |