; 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 ; ^