diff options
author | David Thompson <dthompson2@worcester.edu> | 2022-10-24 17:17:50 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2022-10-24 17:18:29 -0400 |
commit | 4047c0d0a92eae8a7394b4caa479d0cb6dd9017c (patch) | |
tree | 2c7a4e6a6b22120dcd9d74a282bbc1c1d12de809 /chickadee/math | |
parent | e8674680c41ae856b5b83b3904caca9728b57fce (diff) |
math: matrix: Add copy procedures.
Diffstat (limited to 'chickadee/math')
-rw-r--r-- | chickadee/math/matrix.scm | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/chickadee/math/matrix.scm b/chickadee/math/matrix.scm index eab6cc6..e80eab6 100644 --- a/chickadee/math/matrix.scm +++ b/chickadee/math/matrix.scm @@ -31,6 +31,9 @@ make-null-matrix3 make-identity-matrix3 matrix3? + matrix3= + matrix3-copy! + matrix3-copy matrix3-mult! matrix3* matrix3-identity! @@ -49,6 +52,8 @@ make-identity-matrix4 matrix4? matrix4= + matrix4-copy! + matrix4-copy matrix4-mult! matrix4* matrix4-identity! @@ -131,7 +136,7 @@ (matrix3-set! bv 2 2 cc))) (define (make-null-matrix3) - (let ((bv (make-f32vector 9))) + (let ((bv (make-bytevector 36))) (%make-matrix3 bv))) (define (make-matrix3 aa ab ac @@ -146,6 +151,18 @@ column-major format." ca cb cc) matrix)) +(define (matrix3= m1 m2) + "Return #t if M1 is the same matrix as M2" + (equal? (matrix3-bv m1) (matrix3-bv m2))) + +(define (matrix3-copy! src dest) + "Copy the contents of matrix SRC to DEST." + (bytevector-copy! (matrix3-bv src) 0 (matrix3-bv dest) 0 36)) + +(define (matrix3-copy matrix) + "Return a new 3x3 matrix that is a copy of MATRIX." + (%make-matrix3 (bytevector-copy (matrix3-bv matrix)))) + (define (matrix3-mult! dest a b) "Multiply matrices A and B, storing the result in DEST." (let ((m1 (matrix3-bv a)) @@ -206,9 +223,6 @@ column-major format." (* m1-2-1 m2-1-2) (* m1-2-2 m2-2-2)))))) -(define (matrix3-copy matrix) - (%make-matrix3 (bytevector-copy (matrix3-bv matrix)))) - (define (matrix3* . matrices) "Return the product of MATRICES." (match matrices @@ -407,7 +421,7 @@ column-major format." (matrix4-set! bv 3 3 dd))) (define (make-null-matrix4) - (let ((bv (make-f32vector 16))) + (let ((bv (make-bytevector 64))) (%make-matrix4 bv (bytevector->pointer bv)))) (define (make-matrix4 aa ab ac ad @@ -428,6 +442,15 @@ column-major format." "Return #t if M1 is the same matrix as M2" (equal? (matrix4-bv m1) (matrix4-bv m2))) +(define (matrix4-copy! src dest) + "Copy the contents of matrix SRC to DEST." + (bytevector-copy! (matrix4-bv src) 0 (matrix4-bv dest) 0 64)) + +(define (matrix4-copy matrix) + "Return a new 4x4 matrix that is a copy of MATRIX." + (let ((bv (bytevector-copy (matrix4-bv matrix)))) + (%make-matrix4 bv (bytevector->pointer bv)))) + (define (matrix4-mult! dest a b) "Multiply matrices A and B, storing the result in DEST." (let ((m1 (matrix4-bv a)) @@ -546,10 +569,6 @@ column-major format." (* m1-3-2 m2-2-3) (* m1-3-3 m2-3-3)))))) -(define (matrix4-copy matrix) - (let ((bv (bytevector-copy (matrix4-bv matrix)))) - (%make-matrix4 bv (bytevector->pointer bv)))) - (define (matrix4* . matrices) "Return the product of MATRICES." (match matrices |