; index ; ; Normieren eines Vektors normalize a vector ; Skalarprodukt scalar product ; Vektorprodukt vector product ; kollinear collinear ; koplanar coplanar ; Flaecheninhalt eines Dreiecks area of a triangle ;;; Allgemein verwendbare Unterprogramme ;;; General-purpose subroutines ;_____________________________________________________________________; ; ^ ;; Normieren eines 3d-Vektors ;; Unter Beibehaltung der Richtung wird die Laenge auf 1.0 gesetzt, ;; indem alle drei Komponenten des Vektors ;; durch dessen urspruengliche Laenge dividiert werden. ;; Wird der Nullvektor eingegeben, so wird nil zurueckgegeben. ;; Normalize a 3D vector ;; Direction of vector is maintained; its length is set to 1.0 ;; by dividing all three components by original length of vector. ;; The attempt of normalizing a zero vector returns nil. (defun normalize ( v ; Vektor vector / d ; dessen Laenge its length tol ; Toleranz tolerance ) (setq tol 1.0e-012 d (distance '(0.0 0.0 0.0) v) ) (if (not (equal 0.0 d tol)) (mapcar '(lambda (c) (/ c d)) v) ) ) ;_____________________________________________________________________; ; ^ ;; Skalarprodukt zweier 3d-Vektoren ;; [ergibt Null genau dann, ;; wenn die Vektoren orthogonal zueinander sind] ;; Scalar product of two 3D vectors ;; [returning zero implies and is implied by ;; both vectors being perpendicular to one another] (defun scalarProduct (v1 v2) (+ (* (car v1) (car v2)) (* (cadr v1) (cadr v2)) (* (caddr v1) (caddr v2)) ) ) ;_____________________________________________________________________; ; ^ ;; Vektorprodukt zweier 3d-Vektoren ;; [ist stets orthogonal zu beiden Vektoren; ;; ist Nullvektor genau dann, wenn beide Vektoren parallel sind] ;; Vector product of two 3D vectors ;; [is always perpendicular to both vectors; ;; returning a zero vector implies and is implied by ;; both vectors being parallel] (defun vectorProduct (v1 v2) (list (- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2))) (- (* (caddr v1) (car v2)) (* (car v1) (caddr v2))) (- (* (car v1) (cadr v2)) (* (cadr v1) (car v2))) ) ) ;_____________________________________________________________________; ; ^ ;; Pruefen, ob drei 3d-Punkte auf derselben Geraden liegen ;; [wenn ja, wird t zurueckgegeben; andernfalls nil] ;; Check whether three 3D points ;; are situated on the same straight line ;; [if yes, t will be returned; otherwise nil] (defun collinear ( p1 p2 p3 ; Punkte points / tol ; Toleranz tolerance ) (setq tol 1.0e-012) (equal '(0.0 0.0 0.0) (vectorProduct (mapcar '- p2 p1) (mapcar '- p3 p1)) tol ) ) ;_____________________________________________________________________; ; ^ ;; Pruefen, ob vier 3d-Punkte in derselben Ebene liegen ;; [wenn ja, wird t zurueckgegeben; andernfalls nil] ;; Check whether four 3D points are situated on the same plane ;; [if yes, t will be returned; otherwise nil] (defun coplanar ( p1 ; Punkte points p2 p3 p4 / e1 ; Einheitsvektoren vom 4. unit vectors from 4th e2 ; zum 1., 2. und 3. Punkt; to 1st, 2nd, and 3rd point; e3 ; nil, falls die Punkte nil if points ; identisch sind are identical tol ; Toleranz tolerance ) (setq tol 1.0e-012) (if (and (setq e1 (normalize (mapcar '- p1 p4))) (setq e2 (normalize (mapcar '- p2 p4))) (setq e3 (normalize (mapcar '- p3 p4))) ) (equal 0.0 (scalarProduct (vectorProduct e1 e2) e3) tol) t ) ) ;_____________________________________________________________________; ; ^ ;; Flaecheninhalt eines Dreiecks ;; Area of a triangle (defun areaTriangle (p1 p2 p3) ; Eckpunkte [3d-Punkte] corners [3D points] (* 0.5 (distance '(0.0 0.0 0.0) (vectorProduct (mapcar '- p1 p3) (mapcar '- p2 p3)) ) ) ) ;_____________________________________________________________________; ; index ; ^