math: vector: Add vec3 cross product procedures.
authorDavid Thompson <dthompson2@worcester.edu>
Fri, 11 Oct 2019 22:43:18 +0000 (18:43 -0400)
committerDavid Thompson <dthompson2@worcester.edu>
Fri, 11 Oct 2019 22:43:18 +0000 (18:43 -0400)
chickadee/math/vector.scm

index 41c7659..31aff07 100644 (file)
@@ -53,6 +53,8 @@
             vec3-z
             vec3-magnitude
             vec3-dot-product
+            vec3-cross
+            vec3-cross!
             vec3-normalize
             set-vec3-x!
             set-vec3-y!
@@ -229,6 +231,20 @@ polar coordinate (R, THETA)."
      (* (vec3-y v1) (vec3-y v2))
      (* (vec3-z v1) (vec3-z v2))))
 
+(define-inlinable (vec3-cross! dest v1 v2)
+  (set-vec3! dest
+             (- (* (vec3-y v1) (vec3-z v2))
+                (* (vec3-z v1) (vec3-y v2)))
+             (- (* (vec3-z v1) (vec3-x v2))
+                (* (vec3-x v1) (vec3-z v2)))
+             (- (* (vec3-x v1) (vec3-y v2))
+                (* (vec3-y v1) (vec3-x v2)))))
+
+(define-inlinable (vec3-cross v1 v2)
+  (let ((vout (vec3 0.0 0.0 0.0)))
+    (vec3-cross! vout v1 v2)
+    vout))
+
 (define-inlinable (vec2-normalize! v)
   "Normalize the vec2 V in-place."
   (unless (and (zero? (vec2-x v)) (zero? (vec2-y v)))