X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fgacela_misc.scm;h=6dd13b11a8acd7844c1943279b0c5f2aebc51ee1;hb=2dd62c9397803ff96e72f9e27f138b58273b5976;hp=9dc10aa6c9140dec198ca4d9079c001c0c55871d;hpb=e99551161b1199fcd068dce0f7b0fd2f3927e771;p=gacela.git diff --git a/src/gacela_misc.scm b/src/gacela_misc.scm index 9dc10aa..6dd13b1 100644 --- a/src/gacela_misc.scm +++ b/src/gacela_misc.scm @@ -26,6 +26,28 @@ (define *pi* (* (asin 1) 2)) +;;; Geometry + +(define (degrees-to-radians angle) + (/ (* angle *pi*) 180)) + +(define (radians-to-degrees angle) + (/ (* angle 180) *pi*)) + +(define (distance-between-points p1 p2) + (define (add-power-of-two p1 p2) + (cond ((null? p1) + 0) + (else + (+ (expt (- (car p1) (car p2)) 2) + (add-power-of-two (cdr p1) (cdr p2)))))) + + (cond ((not (= (length p1) (length p2))) + #f) + (else + (sqrt (add-power-of-two p1 p2))))) + + ;;; Functions (define (nearest-power-of-two n) @@ -34,12 +56,15 @@ (else (power (* p 2) n)))) (power 1 n)) -(define (degrees-to-radians angle) - (/ (* angle *pi*) 180)) - -(define (radians-to-degrees angle) - (/ (* angle 180) *pi*)) - (define-macro (pushnew elem list) `(cond ((not (find (lambda (e) (eq? e ,elem)) ,list)) (set! ,list (cons ,elem ,list))))) + +(define (assoc-multiple-set! alist . pairs) + (define (amset! alist pairs) + (cond ((< (length pairs) 2) + alist) + (else + (assoc-set! alist (car pairs) (cadr pairs)) + (amset! alist (cddr pairs))))) + (amset! alist pairs))