oGB      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % &'()*+,-./0123456789:;<=>?@A OThe assumption when dealing with these is always that they are of unit length. ( Also, interpolation works differently.  these are row vectors 0Outer product (could be unified with Diagonal?) &makes a diagonal matrix from a vector Bconversion between vectors (and matrices) of different dimensions Nthe angle between two vectors O#the angle between two unit vectors PIprojects the first vector onto the direction of the second (unit) vector Q/direction (second argument) is assumed to be a unit vector! SAsince unit vectors are not a group, we need a separate function. X  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXEFGHIJBCDK?@A<=>789:;0123456LMNO+,-./PQRS()*%&' !"#$  TUVWX    !"#$!"#$%&'&'()*)*+,-./,-./0123456123456789:;89:;<=>=>?@A@ABCDCDEFGHIFGHIJKLMNOPQRSTUVWXproduces orthogonal/.orthonormal vectors from a set of vectors XYZXYZXYZYZ[ example: structVec2 [1,2,3,4] = [ Vec2 1 2 , Vec2 3 4 ]. bhunit vector with given angle relative to the positive X axis (in the positive direction, that is, CCW).  A more precise name would be cosSin, but that sounds bad :) e*The angle relative to the positive X axis gARotation matrix by a given angle (in radians), counterclockwise. i(Rotates counterclockwise by 90 degrees. j!Rotates clockwise by 90 degrees. [\]^_`abcdefghij[\]^_`abcdefghij[\]^_`abcdefghijygRotation around an arbitrary 3D vector. The resulting 3x3 matrix is intended for multiplication on the right. z Rotation around an arbitrary 3D unitH vector. The resulting 3x3 matrix is intended for multiplication on the right. klmnopqrstuvwxyzklmnopqrstuvwxyzklmnopqrstuvwxyz{|{|{||If  (x,y,u,v)9 is an orthonormal system, then (written in pseudo-code)  7biVector4 (x,y) = plusMinus (reverse $ biVector4 (u,v)). @ This is a helper function for the 4 dimensional rotation code.  If (x,y,z,p,q,r) = biVector4 a b1, then the corresponding antisymmetric tensor is  [ 0 r q p ]  [ -r 0 z -y ]  [ -q -z 0 x ]  [ -p y -x 0 ] 'the corresponding antisymmetric tensor +We assume that the axes are normalized and  orthogonal to each other! 6We assume only that the axes are independent vectors. ?Rotation matrix around a plane specified by two normalized and  orthogonal vectors. $ Intended for multiplication on the right! 6We assume only that the axes are independent vectors. }~}~}~-we assume that the bottom-right corner is 1. HInverts a projective 4x4 matrix, assuming that the top-left 3x3 part is  orthogonal, # and the bottom-right corner is 1.  OThe assumption when dealing with these is always that they are of unit length. ( Also, interpolation works differently.  these are row vectors 0Outer product (could be unified with Diagonal?) &makes a diagonal matrix from a vector Bconversion between vectors (and matrices) of different dimensions the angle between two vectors #the angle between two unit vectors Iprojects the first vector onto the direction of the second (unit) vector /direction (second argument) is assumed to be a unit vector! Asince unit vectors are not a group, we need a separate function. XXX produces orthogonal/.orthonormal vectors from a set of vectors   example: structVec2 [1,2,3,4] = [ Vec2 1 2 , Vec2 3 4 ]. hunit vector with given angle relative to the positive X axis (in the positive direction, that is, CCW).  A more precise name would be cosSin, but that sounds bad :) *The angle relative to the positive X axis ARotation matrix by a given angle (in radians), counterclockwise. (Rotates counterclockwise by 90 degrees. !Rotates clockwise by 90 degrees.  gRotation around an arbitrary 3D vector. The resulting 3x3 matrix is intended for multiplication on the right.  Rotation around an arbitrary 3D unitH vector. The resulting 3x3 matrix is intended for multiplication on the right.                   If  (x,y,u,v)9 is an orthonormal system, then (written in pseudo-code)  7biVector4 (x,y) = plusMinus (reverse $ biVector4 (u,v)). @ This is a helper function for the 4 dimensional rotation code.  If (x,y,z,p,q,r) = biVector4 a b1, then the corresponding antisymmetric tensor is  [ 0 r q p ]  [ -r 0 z -y ]  [ -q -z 0 x ]  [ -p y -x 0 ] !'the corresponding antisymmetric tensor "+We assume that the axes are normalized and  orthogonal to each other! #6We assume only that the axes are independent vectors. $?Rotation matrix around a plane specified by two normalized and  orthogonal vectors. $ Intended for multiplication on the right! %6We assume only that the axes are independent vectors.  !"#$% !"#$% !"#$%.-we assume that the bottom-right corner is 1. 1HInverts a projective 4x4 matrix, assuming that the top-left 3x3 part is  orthogonal, # and the bottom-right corner is 1. &'()*+,-./01 ()*+,-./0&'1 &''()*)*+,-./0169The angle is in radians. (WARNING: OpenGL uses degrees!) 2345678945678923233456789  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW[\]^_`abcdefghijklmnopqrstuvwxyz{|23456789>9The angle is in radians. (WARNING: OpenGL uses degrees!) :;<=>?@A<=>?@A:;:;;<=>?@A     &'()*+,-./01:;<=>?@A     &'()*+,-./01:;<=>?@AB !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab c d e f g h i j k l m n o p q r s t u v w x y z { | } ~    vect-0.4.0Data.Vect.Double.BaseData.Vect.Double.GramSchmidtData.Vect.Double.Util.Dim2Data.Vect.Double.Util.Dim3Data.Vect.Double.InterpolateData.Vect.Double.Util.Dim4 Data.Vect.Double.Util.ProjectiveData.Vect.Float.BaseData.Vect.Float.GramSchmidtData.Vect.Float.Util.Dim2Data.Vect.Float.Util.Dim3Data.Vect.Float.InterpolateData.Vect.Float.Util.Dim4Data.Vect.Float.Util.ProjectiveData.Vect.Double.OpenGLData.Vect.Float.OpenGLData.Vect.DoubleData.Vect.Float Data.VectNormal4Normal3Normal2Mat4Mat3Mat2Vec4Vec3Vec2 DeterminantdetTensorouterMatrix transposeinverseidmtxDiagonaldiagExtend extendZero extendWithtrimHasCoordinates_1_2_3_4 Pointwise pointwise&! CrossProd crossprod&^ UnitVectormkNormaltoNormalUnsafe fromNormalfromNormalRadiusDotProd&.normnormsqrlenlensqrdotprodVectormapVec scalarMul*&&* RightModulermul.* LeftModulelmul*.Ring.*.one AbelianGroup&+&-negzerovecSum ringProduct normalizedistanceangleangle'project' projectUnsafeproject flipNormalmkVec2mkVec3mkVec4rndUnit GramSchmidt gramSchmidtgramSchmidtNormalize structVec2 destructVec2det2vec2Xvec2Y translate2X translate2YsinCossinCos' sinCosRadiusangle2angle2' rotMatrix2rotate2 rotateCCWrotateCW structVec3 destructVec3det3 translate3X translate3Y translate3Zvec3Xvec3Yvec3Z rotMatrixZ rotMatrixY rotMatrixXrotate3'rotate3 rotMatrix3 rotMatrix3' Interpolate interpolate structVec4 destructVec4 translate4X translate4Y translate4Z translate4Wvec4Xvec4Yvec4Zvec4W biVector4biVector4AsTensorrotate4'rotate4 rotMatrix4' rotMatrix4ProjectiveActionactProjExtendProjective extendProjextendProjWith rotMatrixProjrotMatrixProj'translMatrixProjtranslWithProjscaleMatrixProjscaleMatrixUniformProj invertProj VertexAttrib' vertexAttribradianToDegreesdegreesToRadianrotate translatescale3scale