(load "constr-03.ss") ;;; Datentyp "triangle" ;;; Ein "polygon" ist eine Datenstruktur (make-triangle origin a b c), wobei ;;; origin den Ort der linken unteren Ecke beschreibt und a, b und c die ;;; Seitenlängen sind. (define-struct triangle (origin a b c)) ;;; SIGNATUR ;;; triangle-area: triangle -> number ;;; ERKLÄRUNG ;;; (triangle-area t) berechnet den Flächeninhalt des Dreiecks t. ;;; Dazu wird die Heronsche Flächenformel verwandt. ;;; BEISPIEL ;;; (triangle-area (make-triangle (make-posn 0 0) 3 4 5)) ;;; => 6 ;;; DEFINITION (define triangle-area (lambda (t) (let ((a (triangle-a t)) (b (triangle-b t)) (c (triangle-c t))) (let ((s (/ (+ a b c) 2))) (sqrt (* s (- s a) (- s b) (- s c))))))) ;;; SIGNATUR ;;; triangle-move: triangle posn -> triangle ;;; ERKLÄRUNG ;;; (triangle-move t p) gibt eine um p verschobene Kopie von t zurück. ;;; BEISPIEL ;;; (triangle-move (make-triangle (make-posn 0 0) 3 4 5) (make-posn 1 2)) ;;; => (make-triangle (make-posn 1 2) 3 4 5) ;;; DEFINITION (define triangle-move (lambda (t p) (make-triangle (posn-move (triangle-origin t) p) (triangle-a t) (triangle-b t) (triangle-c t))))