orientation 3 :
subfunctions :
Code:
(defun faceseg3 (p1 p2 p3 seg / 3DF 3DFACES 3DFI 3DFV D K N P12 P12V P30 P30V P30O P31 P31V V12)
(setq d (/ (distance p1 p2) (float seg)))
(setq k 0)
(setq v12 (mapcar '* (list d d d) (mapcar '/ (mapcar '- p2 p1) (list (distance p1 p2) (distance p1 p2) (distance p1 p2)))))
(repeat seg
(setq p30 (mapcar '+ p3 (mapcar '* (list (* d (float k)) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p1 p3) (list (distance p1 p3) (distance p1 p3) (distance p1 p3))))))
(setq p31 (mapcar '+ p3 (mapcar '* (list (* d (float (setq k (1+ k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p1 p3) (list (distance p1 p3) (distance p1 p3) (distance p1 p3))))))
(setq p12 (mapcar '+ p31 v12))
(setq 3df (list p30 p31 p12 p12))
(setq 3dfaces (cons 3df 3dfaces))
(setq n 0)
(repeat (- k 1)
(setq p30v (mapcar '+ p30 (mapcar '* (list (setq n (1+ n)) n n) v12)))
(setq p31v (mapcar '+ p31 (mapcar '* (list n n n) v12)))
(setq p12v (mapcar '+ p12 (mapcar '* (list n n n) v12)))
(setq p30o (mapcar '+ p30 (mapcar '* (list (- n 1) (- n 1) (- n 1)) v12)))
(setq 3dfv (list p30v p31v p12v p12v))
(setq 3dfi (list p30o p31v p30v p30v))
(setq 3dfaces (cons 3dfv 3dfaces))
(setq 3dfaces (cons 3dfi 3dfaces))
)
)
3dfaces
)
(defun faceseg5 (p1 p2 p3 p4 p5 seg / 3DF CE D K P1N P10 P11 P12 P13 P2N P20 P21 P22 P23 P3N P30 P31 P32 P33 P4N P40 P41 P42 P43 P5N P50 P51 P52 P53 V1C V2C V3C V4C V5C)
(setq d (/ (distance p1 p2) (float seg)))
(setq ce (cen5gon p1 p2 p3 p4 p5))
(setq k 0)
(repeat seg
(setq p10 (mapcar '+ p1 (mapcar '* (list (* d (float k)) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p2 p1) (list (distance p1 p2) (distance p1 p2) (distance p1 p2))))))
(setq p11 (mapcar '+ p1 (mapcar '* (list (* d (float (setq k (1+ k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p2 p1) (list (distance p1 p2) (distance p1 p2) (distance p1 p2))))))
(if (eq seg 1) (setq p12 ce p13 p12)
(progn
(setq v1c (mapcar '* (list (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0)))) (unit (mapcar '- ce (mapcar '(lambda (p1 p2) (/ (+ p1 p2) 2.0)) p1 p2)))))
(if (eq k seg) (progn (setq p12 (mapcar '+ p10 v1c)) (setq p13 p10)) (progn (setq p12 (mapcar '+ p11 v1c)) (setq p13 (mapcar '+ p10 v1c))))
(if (eq k 1) (setq p1n p12 p13 p10) (setq p13 (mapcar '+ p10 v1c)))
)
)
(setq 3df (list p10 p11 p12 p13))
(setq 3dfaces (cons 3df 3dfaces))
(setq p20 (mapcar '+ p2 (mapcar '* (list (* d (float (setq k (1- k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p3 p2) (list (distance p2 p3) (distance p2 p3) (distance p2 p3))))))
(setq p21 (mapcar '+ p2 (mapcar '* (list (* d (float (setq k (1+ k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p3 p2) (list (distance p2 p3) (distance p2 p3) (distance p2 p3))))))
(if (eq seg 1) (setq p22 ce p23 p22)
(progn
(setq v2c (mapcar '* (list (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0)))) (unit (mapcar '- ce (mapcar '(lambda (p1 p2) (/ (+ p1 p2) 2.0)) p2 p3)))))
(if (eq k seg) (progn (setq p22 (mapcar '+ p20 v2c)) (setq p23 p20)) (progn (setq p22 (mapcar '+ p21 v2c)) (setq p23 (mapcar '+ p20 v2c))))
(if (eq k 1) (setq p2n p22 p23 p20) (setq p23 (mapcar '+ p20 v2c)))
)
)
(setq 3df (list p20 p21 p22 p23))
(setq 3dfaces (cons 3df 3dfaces))
(setq p30 (mapcar '+ p3 (mapcar '* (list (* d (float (setq k (1- k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p4 p3) (list (distance p3 p4) (distance p3 p4) (distance p3 p4))))))
(setq p31 (mapcar '+ p3 (mapcar '* (list (* d (float (setq k (1+ k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p4 p3) (list (distance p3 p4) (distance p3 p4) (distance p3 p4))))))
(if (eq seg 1) (setq p32 ce p33 p32)
(progn
(setq v3c (mapcar '* (list (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0)))) (unit (mapcar '- ce (mapcar '(lambda (p1 p2) (/ (+ p1 p2) 2.0)) p3 p4)))))
(if (eq k seg) (progn (setq p32 (mapcar '+ p30 v3c)) (setq p33 p30)) (progn (setq p32 (mapcar '+ p31 v3c)) (setq p33 (mapcar '+ p30 v3c))))
(if (eq k 1) (setq p3n p32 p33 p30) (setq p33 (mapcar '+ p30 v3c)))
)
)
(setq 3df (list p30 p31 p32 p33))
(setq 3dfaces (cons 3df 3dfaces))
(setq p40 (mapcar '+ p4 (mapcar '* (list (* d (float (setq k (1- k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p5 p4) (list (distance p4 p5) (distance p4 p5) (distance p4 p5))))))
(setq p41 (mapcar '+ p4 (mapcar '* (list (* d (float (setq k (1+ k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p5 p4) (list (distance p4 p5) (distance p4 p5) (distance p4 p5))))))
(if (eq seg 1) (setq p42 ce p43 p42)
(progn
(setq v4c (mapcar '* (list (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0)))) (unit (mapcar '- ce (mapcar '(lambda (p1 p2) (/ (+ p1 p2) 2.0)) p4 p5)))))
(if (eq k seg) (progn (setq p42 (mapcar '+ p40 v4c)) (setq p43 p40)) (progn (setq p42 (mapcar '+ p41 v4c)) (setq p43 (mapcar '+ p40 v4c))))
(if (eq k 1) (setq p4n p42 p43 p40) (setq p43 (mapcar '+ p40 v4c)))
)
)
(setq 3df (list p40 p41 p42 p43))
(setq 3dfaces (cons 3df 3dfaces))
(setq p50 (mapcar '+ p5 (mapcar '* (list (* d (float (setq k (1- k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p1 p5) (list (distance p5 p1) (distance p5 p1) (distance p5 p1))))))
(setq p51 (mapcar '+ p5 (mapcar '* (list (* d (float (setq k (1+ k)))) (* d (float k)) (* d (float k))) (mapcar '/ (mapcar '- p1 p5) (list (distance p5 p1) (distance p5 p1) (distance p5 p1))))))
(if (eq seg 1) (setq p52 ce p53 p52)
(progn
(setq v5c (mapcar '* (list (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0))) (/ d (tg (/ pi 5.0)))) (unit (mapcar '- ce (mapcar '(lambda (p1 p2) (/ (+ p1 p2) 2.0)) p1 p5)))))
(if (eq k seg) (progn (setq p52 (mapcar '+ p50 v5c)) (setq p53 p50)) (progn (setq p52 (mapcar '+ p51 v5c)) (setq p53 (mapcar '+ p50 v5c))))
(if (eq k 1) (setq p5n p52 p53 p50) (setq p53 (mapcar '+ p50 v5c)))
)
)
(setq 3df (list p50 p51 p52 p53))
(setq 3dfaces (cons 3df 3dfaces))
)
(if (> seg 2) (faceseg5 p1n p2n p3n p4n p5n (- seg 2)))
3dfaces
)
(defun cen5gon (p1 p2 p3 p4 p5)
(mapcar '(lambda (p1 p2 p3 p4 p5) (/ (+ p1 p2 p3 p4 p5) 5.0)) p1 p2 p3 p4 p5)
)
(defun tg (a)
(/ (sin a) (cos a))
)
(defun projfaces2sph (3dfaces rad / 3DFACESP 3DFP P1 P1P P2 P2P P3 P3P P4 P4P)
(foreach 3df 3dfaces
(setq p1 (car 3df) p2 (cadr 3df) p3 (caddr 3df) p4 (cadddr 3df))
(setq p1p (mapcar '* (list rad rad rad) (mapcar '/ p1 (list (distance '(0.0 0.0 0.0) p1) (distance '(0.0 0.0 0.0) p1) (distance '(0.0 0.0 0.0) p1)))))
(setq p2p (mapcar '* (list rad rad rad) (mapcar '/ p2 (list (distance '(0.0 0.0 0.0) p2) (distance '(0.0 0.0 0.0) p2) (distance '(0.0 0.0 0.0) p2)))))
(setq p3p (mapcar '* (list rad rad rad) (mapcar '/ p3 (list (distance '(0.0 0.0 0.0) p3) (distance '(0.0 0.0 0.0) p3) (distance '(0.0 0.0 0.0) p3)))))
(setq p4p (mapcar '* (list rad rad rad) (mapcar '/ p4 (list (distance '(0.0 0.0 0.0) p4) (distance '(0.0 0.0 0.0) p4) (distance '(0.0 0.0 0.0) p4)))))
(setq 3dfp (list p1p p2p p3p p4p))
(setq 3dfacesp (cons 3dfp 3dfacesp))
)
3dfacesp
)
;; Vector Cross Product - Lee Mac
;; Args: u,v - vectors in R^3
(defun v^v ( u v )
(list
(- (* (cadr u) (caddr v)) (* (cadr v) (caddr u)))
(- (* (car v) (caddr u)) (* (car u) (caddr v)))
(- (* (car u) (cadr v)) (* (car v) (cadr u)))
)
)
;; Unit Vector - Lee Mac
;; Args: v - vector in R^n
(defun unit ( v )
( (lambda ( n ) (if (equal 0.0 n 1e-14) nil (vxs v (/ 1.0 n)))) (norm v))
)
;; Vector x Scalar - Lee Mac
;; Args: v - vector in R^n, s - real scalar
(defun vxs ( v s )
(mapcar '(lambda ( n ) (* n s)) v)
)
;; Vector Norm - Lee Mac
;; Args: v - vector in R^n
(defun norm ( v )
(sqrt (apply '+ (mapcar '* v v)))
)
(defun prptp ( pt1 pt2 pt3 pt / pt1w pt2w pt3w ptw u v n ptn pt1n pt4n )
(if (and pt1 pt2 pt3 pt)
(progn
(setq pt1w (trans pt1 1 0)
pt2w (trans pt2 1 0)
pt3w (trans pt3 1 0)
ptw (trans pt 1 0)
)
(setq u (mapcar '- pt2w pt1w))
(setq v (mapcar '- pt3w pt1w))
(setq n (unit (V^V u v)))
(setq ptn (trans ptw 0 n))
(setq pt1n (trans pt1w 0 n))
(setq pt4n (list (car ptn) (cadr ptn) (caddr pt1n)))
)
)
(trans pt4n n 0)
)
(defun mid (p1 p2)
(mapcar '(lambda (p1 p2) (/ (+ p1 p2) 2.0)) p1 p2)
)
M.R.
Bookmarks