;; for 3d only
(bind-func Vcross
(lambda (v1 v2)
(let ((size:size_t (tref v1 0))
(v3 (Valloc 3)))
(gsl_vector_set_zero v3)
(if (<> size 3)
(begin (printf "Vcross for 3d vectors only!\n")
v3)
(begin (gsl_vector_set v3 0 (- (* (gsl_vector_get v1 1)
(gsl_vector_get v2 2))
(* (gsl_vector_get v1 2)
(gsl_vector_get v2 1))))
(gsl_vector_set v3 1 (- (* (gsl_vector_get v1 2)
(gsl_vector_get v2 0))
(* (gsl_vector_get v1 0)
(gsl_vector_get v2 2))))
(gsl_vector_set v3 2 (- (* (gsl_vector_get v1 0)
(gsl_vector_get v2 1))
(* (gsl_vector_get v1 1)
(gsl_vector_get v2 0))))
v3)))))