(FILECREATED " 2-Apr-85 15:28:32" {ERIS}<LISPNEW>LIBRARY>MATRIXUSE.;5 10348  

      changes to:  (FNS SET.WCOORD GET.WCOORD IDENTITY3BY3 IDENTITY4BY4 ROTATE3BY3 ROTATE4BY4.ABOUTX 
			ROTATE4BY4.ABOUTY ROTATE4BY4.ABOUTZ SCALE3BY3 SCALE4BY4 TRANSLATE3BY3 
			TRANSLATE4BY4 \MAKEVALIDARRAY SET.XCOORD SET.YCOORD SET.ZCOORD GET.XCOORD 
			GET.YCOORD GET.ZCOORD)
		   (VARS MATRIXUSECOMS)
		   (MACROS DOUBLEIT)

      previous date: " 4-Mar-85 16:41:05" {ERIS}<LISPCORE>LIBRARY>MATRIXUSE.;2)


(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT MATRIXUSECOMS)

(RPAQQ MATRIXUSECOMS ((FNS CREATE1BY3 CREATE1BY4 CREATE3BY1 CREATE3BY3 CREATE4BY1 CREATE4BY4 
			   IDENTITY3BY3 IDENTITY4BY4 ROTATE3BY3 ROTATE4BY4.ABOUTX ROTATE4BY4.ABOUTY 
			   ROTATE4BY4.ABOUTZ SCALE3BY3 SCALE4BY4 TRANSLATE3BY3 TRANSLATE4BY4)
	(FNS \MAKEVALIDARRAY)
	(FNS SET.XCOORD SET.YCOORD SET.ZCOORD SET.WCOORD)
	(FNS GET.XCOORD GET.YCOORD GET.ZCOORD GET.WCOORD)
	(MACROS DOUBLEIT)))
(DEFINEQ

(CREATE1BY3
  [LAMBDA NIL                                                (* hdj "19-Feb-85 19:02")
    (ARRAY 3 (QUOTE FLOATP)
	   0 0])

(CREATE1BY4
  [LAMBDA NIL                                                (* hdj "19-Feb-85 19:02")
    (ARRAY 4 (QUOTE FLOATP)
	   0 0])

(CREATE3BY1
  [LAMBDA NIL                                                (* hdj "19-Feb-85 19:02")
    (ARRAY 3 (QUOTE FLOATP)
	   0 0])

(CREATE3BY3
  [LAMBDA NIL                                                (* hdj "19-Feb-85 19:02")
    (ARRAY 9 (QUOTE FLOATP)
	   0 0])

(CREATE4BY1
  [LAMBDA NIL                                                (* hdj "19-Feb-85 19:02")
    (ARRAY 4 (QUOTE FLOATP)
	   0 0])

(CREATE4BY4
  [LAMBDA NIL                                                (* hdj "19-Feb-85 19:01")
    (ARRAY 16 (QUOTE FLOATP)
	   0 0])

(IDENTITY3BY3
  [LAMBDA (M)                                                (* hdj " 2-Apr-85 14:50")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 9 (FUNCTION CREATE3BY3)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX)))
      (for X from 0 to 8 do (\PUTBASEFLOATP MATRIXBASE (DOUBLEIT X)
					    0.0))
      (\SETELT MATRIXBASE 1 1 3 1.0)
      (\SETELT MATRIXBASE 2 2 3 1.0)
      (\SETELT MATRIXBASE 3 3 3 1.0)
      MATRIX])

(IDENTITY4BY4
  [LAMBDA (M)                                                (* hdj " 2-Apr-85 14:47")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 16 (FUNCTION CREATE4BY4)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX)))
      (for X from 0 to 15 do (\PUTBASEFLOATP MATRIXBASE (DOUBLEIT X)
					     0.0))
      (\SETELT MATRIXBASE 1 1 4 1.0)
      (\SETELT MATRIXBASE 2 2 4 1.0)
      (\SETELT MATRIXBASE 3 3 4 1.0)
      (\SETELT MATRIXBASE 4 4 4 1.0)
      MATRIX])

(ROTATE3BY3
  [LAMBDA (THETA RADIANSFLG M)                               (* hdj " 2-Apr-85 14:45")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 9 (FUNCTION CREATE3BY3)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX))
       (COSTHETA (COS THETA RADIANSFLG))
       (SINTHETA (SIN THETA RADIANSFLG)))
      (\SETELT MATRIXBASE 1 1 3 COSTHETA)
      (\SETELT MATRIXBASE 1 2 3 (FMINUS SINTHETA))
      (\SETELT MATRIXBASE 1 3 3 0.0)
      (\SETELT MATRIXBASE 2 1 3 SINTHETA)
      (\SETELT MATRIXBASE 2 2 3 COSTHETA)
      (\SETELT MATRIXBASE 2 3 3 0.0)
      (\SETELT MATRIXBASE 3 1 3 0.0)
      (\SETELT MATRIXBASE 3 2 3 0.0)
      (\SETELT MATRIXBASE 3 3 3 1.0)
      MATRIX])

(ROTATE4BY4.ABOUTX
  [LAMBDA (THETA RADIANSFLG M)                               (* hdj " 2-Apr-85 14:45")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 16 (FUNCTION CREATE4BY4)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX))
       (COSTHETA (COS THETA RADIANSFLG))
       (SINTHETA (SIN THETA RADIANSFLG)))
      (for X from 0 to 15 do (\PUTBASEFLOATP MATRIXBASE (DOUBLEIT X)
					     0.0))
      (\SETELT MATRIXBASE 1 1 4 1.0)
      (\SETELT MATRIXBASE 2 2 4 COSTHETA)
      (\SETELT MATRIXBASE 2 3 4 (FMINUS SINTHETA))
      (\SETELT MATRIXBASE 3 2 4 SINTHETA)
      (\SETELT MATRIXBASE 3 3 4 COSTHETA)
      (\SETELT MATRIXBASE 4 4 4 1.0)
      MATRIX])

(ROTATE4BY4.ABOUTY
  [LAMBDA (THETA RADIANSFLG M)                               (* hdj " 2-Apr-85 14:45")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 16 (FUNCTION CREATE4BY4)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX))
       (COSTHETA (COS THETA RADIANSFLG))
       (SINTHETA (SIN THETA RADIANSFLG)))
      (for X from 0 to 15 do (\PUTBASEFLOATP MATRIXBASE (DOUBLEIT X)
					     0.0))
      (\SETELT MATRIXBASE 1 1 4 COSTHETA)
      (\SETELT MATRIXBASE 3 1 4 (FMINUS SINTHETA))
      (\SETELT MATRIXBASE 2 2 4 1.0)
      (\SETELT MATRIXBASE 1 3 4 SINTHETA)
      (\SETELT MATRIXBASE 3 3 4 COSTHETA)
      (\SETELT MATRIXBASE 4 4 4 1.0)
      MATRIX])

(ROTATE4BY4.ABOUTZ
  [LAMBDA (THETA RADIANSFLG M)                               (* hdj " 2-Apr-85 14:45")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 16 (FUNCTION CREATE4BY4)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX))
       (COSTHETA (COS THETA RADIANSFLG))
       (SINTHETA (SIN THETA RADIANSFLG)))
      (for X from 0 to 15 do (\PUTBASEFLOATP MATRIXBASE (DOUBLEIT X)
					     0.0))
      (\SETELT MATRIXBASE 1 1 4 COSTHETA)
      (\SETELT MATRIXBASE 1 2 4 (FMINUS SINTHETA))
      (\SETELT MATRIXBASE 2 1 4 SINTHETA)
      (\SETELT MATRIXBASE 2 2 4 COSTHETA)
      (\SETELT MATRIXBASE 3 3 4 1.0)
      (\SETELT MATRIXBASE 4 4 4 1.0)
      MATRIX])

(SCALE3BY3
  [LAMBDA (Sx Sy M)                                          (* hdj " 2-Apr-85 14:46")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 9 (FUNCTION CREATE3BY3)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX)))
      (for X from 0 to 8 do (\PUTBASEFLOATP MATRIXBASE (DOUBLEIT X)
					    0.0))
      (\SETELT MATRIXBASE 1 1 3 Sx)
      (\SETELT MATRIXBASE 2 2 3 Sy)
      (\SETELT MATRIXBASE 3 3 3 1.0)
      MATRIX])

(SCALE4BY4
  [LAMBDA (Sx Sy Sz M)                                       (* hdj " 2-Apr-85 14:45")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 16 (FUNCTION CREATE4BY4)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX)))
      (for X from 0 to 15 do (\PUTBASEFLOATP MATRIXBASE (DOUBLEIT X)
					     0.0))
      (\SETELT MATRIXBASE 1 1 4 Sx)
      (\SETELT MATRIXBASE 2 2 4 Sy)
      (\SETELT MATRIXBASE 3 3 4 Sz)
      (\SETELT MATRIXBASE 4 4 4 1.0)
      MATRIX])

(TRANSLATE3BY3
  [LAMBDA (Tx Ty M)                                          (* hdj " 2-Apr-85 14:46")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 9 (FUNCTION CREATE3BY3)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX)))
      (IDENTITY3BY3 MATRIX)
      (\SETELT MATRIXBASE 3 1 3 Tx)
      (\SETELT MATRIXBASE 3 2 3 Ty)
      MATRIX])

(TRANSLATE4BY4
  [LAMBDA (Tx Ty Tz M)                                       (* hdj " 2-Apr-85 14:45")
    (LET* ((MATRIX (\MAKEVALIDARRAY M 16 (FUNCTION CREATE4BY4)))
       (MATRIXBASE (fetch (ARRAYP BASE) of MATRIX)))
      (IDENTITY4BY4 MATRIX)
      (\SETELT MATRIXBASE 4 1 4 Tx)
      (\SETELT MATRIXBASE 4 2 4 Ty)
      (\SETELT MATRIXBASE 4 3 4 Tz)
      MATRIX])
)
(DEFINEQ

(\MAKEVALIDARRAY
  [LAMBDA (ARRAY ELEMENTS CREATEFN)                          (* hdj " 2-Apr-85 14:44")
    (if (AND (ARRAYP ARRAY)
	     (IGEQ (ARRAYSIZE ARRAY)
		   ELEMENTS))
	then ARRAY
      else (if (NULL ARRAY)
	       then (APPLY CREATEFN)
	     else (\ILLEGAL.ARG ARRAY])
)
(DEFINEQ

(SET.XCOORD
  [LAMBDA (VECTOR VALUE)                                     (* hdj " 2-Apr-85 12:42")
    (if (IGREATERP (ARRAYSIZE VECTOR)
		   2)
	then (SETELT VECTOR 1 1 4 VALUE)
      else (ERROR "Vector too short " VECTOR])

(SET.YCOORD
  [LAMBDA (VECTOR VALUE)                                     (* hdj " 2-Apr-85 12:42")
    (if (IGREATERP (ARRAYSIZE VECTOR)
		   2)
	then (SETELT VECTOR 1 2 4 VALUE)
      else (ERROR "Vector too short " VECTOR])

(SET.ZCOORD
  [LAMBDA (VECTOR VALUE)                                     (* hdj " 2-Apr-85 12:42")
    (if (IGREATERP (ARRAYSIZE VECTOR)
		   2)
	then (SETELT VECTOR 1 3 4 VALUE)
      else (ERROR "Vector too short " VECTOR])

(SET.WCOORD
  [LAMBDA (VECTOR VALUE)                                     (* hdj " 2-Apr-85 15:25")
    (if (IGREATERP (ARRAYSIZE VECTOR)
		   3)
	then (SETELT VECTOR 1 4 4 VALUE)
      else (ERROR "Vector too short " VECTOR])
)
(DEFINEQ

(GET.XCOORD
  [LAMBDA (VECTOR)                                           (* hdj " 2-Apr-85 12:42")
    (if (IGREATERP (ARRAYSIZE VECTOR)
		   2)
	then (GETELT VECTOR 1 1 4)
      else (ERROR "Vector too short " VECTOR])

(GET.YCOORD
  [LAMBDA (VECTOR)                                           (* hdj " 2-Apr-85 12:42")
    (if (IGREATERP (ARRAYSIZE VECTOR)
		   2)
	then (GETELT VECTOR 1 2 4)
      else (ERROR "Vector too short " VECTOR])

(GET.ZCOORD
  [LAMBDA (VECTOR)                                           (* hdj " 2-Apr-85 12:42")
    (if (IGREATERP (ARRAYSIZE VECTOR)
		   2)
	then (GETELT VECTOR 1 3 4)
      else (ERROR "Vector too short " VECTOR])

(GET.WCOORD
  [LAMBDA (VECTOR)                                           (* hdj " 2-Apr-85 15:25")
    (if (IGREATERP (ARRAYSIZE VECTOR)
		   3)
	then (GETELT VECTOR 1 4 4)
      else (ERROR "Vector too short " VECTOR])
)
(DECLARE: EVAL@COMPILE 

(PUTPROPS DOUBLEIT MACRO ((A)
			  (LLSH A 1)))
)
(PUTPROPS MATRIXUSE COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (993 7726 (CREATE1BY3 1003 . 1155) (CREATE1BY4 1157 . 1309) (CREATE3BY1 1311 . 1463) (
CREATE3BY3 1465 . 1617) (CREATE4BY1 1619 . 1771) (CREATE4BY4 1773 . 1926) (IDENTITY3BY3 1928 . 2414) (
IDENTITY4BY4 2416 . 2946) (ROTATE3BY3 2948 . 3698) (ROTATE4BY4.ABOUTX 3700 . 4440) (ROTATE4BY4.ABOUTY 
4442 . 5182) (ROTATE4BY4.ABOUTZ 5184 . 5924) (SCALE3BY3 5926 . 6407) (SCALE4BY4 6409 . 6933) (
TRANSLATE3BY3 6935 . 7308) (TRANSLATE4BY4 7310 . 7724)) (7727 8083 (\MAKEVALIDARRAY 7737 . 8081)) (
8084 9146 (SET.XCOORD 8094 . 8355) (SET.YCOORD 8357 . 8618) (SET.ZCOORD 8620 . 8881) (SET.WCOORD 8883
 . 9144)) (9147 10185 (GET.XCOORD 9157 . 9412) (GET.YCOORD 9414 . 9669) (GET.ZCOORD 9671 . 9926) (
GET.WCOORD 9928 . 10183)))))
STOP