; Copyright (C) 2010 Dave Griffiths : See LICENCE file (include "maths/maths.sc") (include "maths/random.sc") (include "geometry/line.sc") (include "geometry/triangle.sc") (include "maths/vec.sc") (include "maths/mat.sc") (define (error n) (display n)(newline)) (define (unit-tests) (let ((t (vector 1 2 3))) (cond ((not (eq? (vx t) 1)) (error "unit test 1 failed"))) (cond ((not (eq? (vy t) 2)) (error "unit test 2 failed"))) (cond ((not (eq? (vz t) 3)) (error "unit test 3 failed"))) (cond ((not (veq? t (vector 1 2 3))) (error "unit test 4 failed")))) (let ((t (vector 1 2 3)) (u (vector 1 1 1))) (cond ((not (veq? (vadd t u) (vector 2 3 4))) (error "unit test 5 failed"))) (cond ((not (veq? (vsub t u) (vector 0 1 2))) (error "unit test 6 failed"))) (cond ((not (veq? (vmul t 2) (vector 2 4 6))) (error "unit test 7 failed"))) (cond ((not (veq? (vdiv t 2) (vector 0.5 1 1.5))) (error "unit test 8 failed"))) (cond ((not (veq? (vneg t) (vector -1 -2 -3))) (error "unit test 9 failed")))) (let ((t (vector 1 0 0))) (cond ((not (eq? (vdot t (vector 0 1 0)) 0)) (error "unit test 10 failed"))) (cond ((not (eq? (vdot t (vector 1 0 0)) 1)) (error "unit test 11 failed"))) (cond ((not (feq? (vdot t (vector 0.5 0.5 0)) 0.5)) (error "unit test 12 failed"))) (cond ((not (veq? (vcross t (vector 0 1 0)) (vector 0 0 1))) (error "unit test 13 failed"))) (cond ((not (feq? (vdist t (vector 0 0 0)) 1)) (error "unit test 14 failed"))) (cond ((not (feq? (vmag t) 1)) (error "unit test 15 failed"))) (cond ((not (feq? (vmag (vnorm (vector 2 2 3))) 1)) (error "unit test 16 failed"))) (cond ((not (veq? (vreflect (vector 1 0 0) (vector 0 1 0)) (vector 1 0 0))) (error "unit test 17 failed")))) (let ((l (line (vector 0 0 0) (vector 1 0 0))) (l2 (line (vector 2 -10 0) (vector 2 10 0)))) (cond ((not (veq? (line-vec l) (vector 1 0 0))) (error "unit test 18 failed"))) (cond ((not (veq? (line-closest-point l (vector 0.5 0 1)) (vector 0.5 0 0))) (error "unit test 19 failed"))) (cond ((not (veq? (line-closest-point l2 (vector 0 0 0)) (vector 2 0 0))) (error "unit test 20 failed")))) (let ((a (mat)) (b (mat))) (cond ((not (meq? (mmul a b) (mat))) (error "unit test 21 failed"))) (cond ((not (meq? (mmul (mat)(mtranslate (vector 90 0 0)) ) (mtranslate (vector 90 0 0)))) (error "unit test 22 failed"))) (cond ((not (meq? (mat-copy a) a)) (error "unit test 22 failed"))) ) (let ((t (triangle (vector 0 0 0) (vector 1 0 0) (vector 0 1 0)))) (display (triangle/line-intersect t (line (vector 0.1 0.1 -1) (vector 0.1 0.1 1))))(newline) ) )