+* MATRIX - AFFINE TRANSFORM SUPPORT PACKAGE
+*
+*
+* AUTHOR:
+*
+* PHILIPP HACHTMANN
+*
+* VERSIONS:
+* 0.1 - INITIAL REVISION (22.12.2007
+*
+*
+* PURPOSE:
+*
+* THIS LIBRARY PROVIDES AFFINE TRANSFORMATION ROUTINES TO
+* PLOTTING ROUTINES AND OTHER SOFTWARE.
+*
+*
+* DATA REPRESENTATION:
+*
+*
+* MATRIX FORMAT: | A11 A12 |
+* M= | |
+* | A21 A22 |
+*
+* A11-A22 ARE SINGLE PRECISION FLOAT VALUES COMPLIANT TO THE
+* HONEYWELL MATHEMATICAL LIBARAY. EVERY VALUE USES TWO
+* 16 BIT MACHINE WORDS.
+* IF A MATRIX IS USED AS A DAC ARGUMENT, A POINTER TO THE FIRST
+* ELEMENT, A11, HAS TO BE USED.
+*
+*
+* VECTOR FORMAT: | A1 |
+* V= | |
+* | A2 |
+*
+* A1 AND A2 ARE SIGNED INTEGER VALUES. EVERY VALUE USES ONE
+* 16 BIT MACHINE WORD.
+* IF A VECTOR IS USED AS A DAC ARGUMENT, A POINTER TO THE FIRST
+* ELEMENT, A1, HAS TO BE USED.
+*
+*
+* AFFINE TRANSFORM FORMAT:
+*
+* AN AFFINE TRANSFORM CONSISTS OF A MATRIX FOR ROTATING AND SCALING
+* AND A VECTOR VOR RELOCATION OF THE RESULT.
+* A VECTOR IS TRANSFORMED BY FIRST MULTIPLYING THE MATRIX WITH IT
+* AND THEN ADDING THE RELOCATION VECTOR:
+*
+* | A11 A12 | | VI1 | | VT1 |
+* VO = MT * VI + VT = | | * | | + | |
+* | A21 A22 | | VI2 | | VT2 |
+*
+* | VI1*A11 + VI2*A12 + VT1 |
+* = | |
+* | VI1*A21 + VI2*A22 + VT2 |
+*
+* MT AND VT ARE THE TRANSFORMATION MATRIX AND VECTOR, VI THE INPUT
+* VECTOR, VO THE RESULT VECTOR.
+*
+* AN AFFINE TRANSFORM IS STORED AS A CONCATENATION OF A MATRIX AND
+* A VECTOR. HERE IS THE MEMORY LAYOUT:
+*
+* '000 : MT11 UPPER
+* '001 : MT11 LOWER
+* '002 : MT12 UPPER
+* '003 : MT12 LOWER
+* '004 : MT21 UPPER
+* '005 : MT21 LOWER
+* '006 : MT22 UPPER
+* '007 : MT22 LOWER
+* '010 : VT1
+* '011 : VT2
+*
+* FOR EVERY TRANSFORMATION, '12 WORDS HAVE TO BE RESERVED.
+* IN AN APPLICATION, A TRANFORMATION VARIABLE COULD BE
+* DECLARED WITH:
+*
+* TRANS BSS '12
+*
+*
+*
+*********************************************************************************
+*
+*
+*
+* M$INIT: INITIALISE MATRIX TO IDENTITY
+*
+* THE MATRIX ARGUMENT IS SET TO
+*
+* | 1.0 0.0 |
+* M= | |
+* | 0.0 1.0 |
+*
+* WHICH RESULTS TO THE IDENTITY TRANSFORMATION.
+*
+* JST M$INIT
+* DAC MATRIX POINTER TO A MATRIX
+*
+*
+*
+* M$MUL: MATRIX MULTIPLICATION
+*
+* JST M$MUL
+* DAC TARGET POINTER TO TARGET MATRIX
+* DAC MATRIX1 POINTER TO LEFT MATRIX
+* DAC MATRIX2 POINTER TO RIGHT MATRIX
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+*
+* M$APLI: APPLY MATRIX TO VECTOR
+*
+* THIS ROUTINE CONVERTS THE VECTOR ELEMENTS TO FLOATING POINT VALUES,
+* APPLIES THE TRANSFORMATION TO THEM AND ROUNDS THE RESULTS BACK TO
+* INTEGER VALUES. THEN IT SAVES THE NEW VECTOR TO THE LOCATION
+* DESIGNATED BY THE TARGET ADDRESS. SOURCE AND TARGET MAY BE THE SAME,
+* THE SOURCE'S CONTENTS ARE NOT ALTERED.
+*
+* JST M$APLI
+* DAC MATRIX MATRIX TO APPLY
+* DAC TARGET POINTER TO TARGET VECTOR
+* DAC SOURCE VECTOR TO TRANSFORM
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* M$APII: APPLY MATRIX TO PAIR OF INTEGERS AS VECTOR
+*
+* THIS ROUTINE USES TWO DISTINCT INTEGER POINTERS TO DESCRIBE A POINT.
+* THE REST OF THE BEHAVIOR IS EXACTLY LIKE M$APL.
+*
+* JST M$APII
+* DAC MATRIX MATRIX TO APPLY
+* DAC XO X COORDINATE OF RESULT VECTOR
+* DAC XO Y COORDINATE OF RESULT VECTOR
+* DAC XI X COORDINATE OF ARGUMENT VECTOR
+* DAC YI Y COORDINATE OF ARGUMENT VECTOR
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* M$ROT: ROTATE MATRIX
+*
+* THIS ROUTINE TAKES A MATRIX AND ADDS A ROTATION TO IT.
+* INTERNALLY, THE ROUTINE CREATES A ROTATION MATRIX AND THEN
+* MULTIPLIES IT WITH THE ARGUMENT MATRIX. THE ROTATION IS SPECIFIED
+* COUNTERCLOCKWISE FORWARD, ANGLE IN RADIANT.
+* THE ANGLE ARGUMENT IS A SINGLE PRECISION FLOATING POINT NUMER
+* TAKING TWO WORDS TO STORE.
+*
+* JST M$ROT
+* DAC MATRIX MATRIX TO MODIFY
+* DAC ANGLE RADIANT ANGLE
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* M$ROTI: ROTATE MATRIX
+*
+* WORKS LIKE M$ROT, BUT TAKES AN INTEGER DEGREE VALUE AS ARGUMENT.
+*
+* JST M$ROTI
+* DAC MATRIX MATRIX TO MODIFY
+* DAC ANGLE DEGREE ANGLE
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* M$SCLE: SCALE MATRIX
+*
+* THIS ROUTINE WORKS SIMILAR TO M$ROT BUT SCALES THE ARGUMENT MATRIX.
+* THE SCALE FACTOR IS A FLOATING POINT NUMBER. LIKE THE ROTATION ANGLE.
+*
+* JST M$SCLE
+* DAC MATRIX MATRIX TO MODIFY
+* DAC SCALE SCALE FACTOR
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+*********************************************************************************
+*
+*
+* T$INIT: INITIALISE AFFINE TRANSFORM
+*
+* JST T$INIT
+* DAC TRANS POINTER TO AFFINE TRANSFORMATION (SEE ABOVE)
+*
+*
+* T$SCLE: SCALE AFFINE TRANSFORMATION
+*
+* THIS SCALES THE MATRIX OF THE AFFINE TRANSFORMATION BY FACTOR SCALE.
+* CALLS M$SCLE INTERNALLY.
+*
+* JST T$SCLE
+* DAC TRANS TRANSFORMATION TO MODIFY
+* DAC SCALE SCALE FACTOR
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* T$TRAN: ADD RELOCATION TO AFFINE TRANSFORMATION
+*
+* THE OFFSET VECTOR IS FIRST PROCESSED BY THE TRANSFORMATION.
+* THEN IT IS ADDED TO THE TRANSFORMATION'S TRANSLATION VECTOR.
+*
+* JST T$TRAN
+* DAC TRANS TRANSFORMATION TO MODIFY
+* DAC XOFF X OFFSET
+* DAC YOFF Y OFFSET
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* T$ROT: ADD ROTATION TO AFFINE TRANSFORMATION
+*
+* ADDS ROTATION TO THE MATRIX OF THE AFFINE TRANSFORMATION.
+* CALLS M$$ROT INTERNALLY.
+*
+* JST T$ROT
+* DAC TRANS TRANSFORMATION TO MODIFY
+* DAC ANGLE ANGLE LIKE FOR M$ROT
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* T$ROTI: ADD ROTATION TO AFFINE TRANSFORMATION
+* USES AN INTEGER ARGUMENT INSTEAD OF FLOATING POINT RADIANT.
+*
+* ADDS ROTATION TO THE MATRIX OF THE AFFINE TRANSFORMATION.
+* CALLS M$$ROTI INTERNALLY.
+*
+* JST T$ROTI
+* DAC TRANS TRANSFORMATION TO MODIFY
+* DAC ANGLE ANGLE LIKE FOR M$ROTI
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* T$APII: APPLY AFFINE TRANSFORM TO PAIR OF INTEGERS AS VECTOR
+*
+* WORKS LIKE M$APII WHICH IS USED INTERNALLY.
+*
+* JST T$APII
+* DAC TRANS TRANSFORMATION TO USE
+* DAC XO X COORDINATE OF RESULT VECTOR
+* DAC XO Y COORDINATE OF RESULT VECTOR
+* DAC XI X COORDINATE OF ARGUMENT VECTOR
+* DAC YI Y COORDINATE OF ARGUMENT VECTOR
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+* T$APLI: APPLY AFFINE TRANSFORM TO VECTOR
+*
+* WORKS LIKE M$APL WHICH IS USED INTERNALLY.
+*
+* JST T$APLI
+* DAC TRANS
+* DAC TARGET POINTER TO TARGET VECTOR
+* DAC SOURCE POINTER TO INPUT VECTOR
+* DAC 0 FOR FORTRAN IV COMPATIBILITY
+*
+*
+*