add outer product
authorhgn <hgodden00@gmail.com>
Mon, 22 Jan 2024 17:50:05 +0000 (17:50 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 22 Jan 2024 17:50:05 +0000 (17:50 +0000)
vg_m.h

diff --git a/vg_m.h b/vg_m.h
index bc2e8a0c3aa392574723b71fa498f0082f78e721..f5ed4051e1bc9620db00b362186fe693cebd4587 100644 (file)
--- a/vg_m.h
+++ b/vg_m.h
@@ -884,6 +884,20 @@ static void m3x3_skew_symetric( m3x3f a, v3f v )
    a[2][2] =  0.0f;
 }
 
+/* aka kronecker product */
+static void m3x3_outer_product( m3x3f out_m, v3f a, v3f b )
+{
+   out_m[0][0] = a[0]*b[0];
+   out_m[0][1] = a[0]*b[1];
+   out_m[0][2] = a[0]*b[2];
+   out_m[1][0] = a[1]*b[0];
+   out_m[1][1] = a[1]*b[1];
+   out_m[1][2] = a[1]*b[2];
+   out_m[2][0] = a[2]*b[0];
+   out_m[2][1] = a[2]*b[1];
+   out_m[2][2] = a[2]*b[2];
+}
+
 static void m3x3_add( m3x3f a, m3x3f b, m3x3f d )
 {
    v3_add( a[0], b[0], d[0] );
@@ -891,6 +905,13 @@ static void m3x3_add( m3x3f a, m3x3f b, m3x3f d )
    v3_add( a[2], b[2], d[2] );
 }
 
+static void m3x3_sub( m3x3f a, m3x3f b, m3x3f d )
+{
+   v3_sub( a[0], b[0], d[0] );
+   v3_sub( a[1], b[1], d[1] );
+   v3_sub( a[2], b[2], d[2] );
+}
+
 static inline void m3x3_copy( m3x3f a, m3x3f b )
 {
    v3_copy( a[0], b[0] );
@@ -904,12 +925,12 @@ static inline void m3x3_identity( m3x3f a )
    m3x3_copy( id, a );
 }
 
-static void m3x3_diagonal( m3x3f a, f32 v )
+static void m3x3_diagonal( m3x3f out_a, f32 v )
 {
-   m3x3_identity( a );
-   a[0][0] = v;
-   a[1][1] = v;
-   a[2][2] = v;
+   m3x3_identity( out_a );
+   out_a[0][0] = v;
+   out_a[1][1] = v;
+   out_a[2][2] = v;
 }
 
 static void m3x3_setdiagonalv3( m3x3f a, v3f v )