hi , all
hi , Evgeniy
about pt in or at the triangle , I tested result is
函数:EE:PITP运行10000次测试结果00:00:00:108函数:SS-PITP运行10000次测试结果00:00:00:061函数:SS-PITP0运行10000次测试结果00:00:00:921函数:SS-PITP1运行10000次测试结果00:00:00:360
use cal number of intersections method is the fastest , is it a wrong test ?
(defun EE:pitp (p l)
;; check is a point inside the triangle.
;; by ElpanovEvgeniy
(if (< (sin (- (angle (last l) p) (angle (last l) (car l))))
-1e-6
)
(vl-every
(function
(lambda (a b) (< (sin (- (angle a p) (angle a b))) -1e-6))
)
l
(cdr l)
)
(vl-every
(function
(lambda (a b) (> (sin (- (angle a p) (angle a b))) 1e-6))
)
l
(cdr l)
)
)
)
;;;number of intersection
;;;fastest
(defun ss-pitp (p l)
;;check point inside triangle .
;;by GSLS(SS)
((lambda (a b c)
(eq (+ (length (inters p a b c nil))
(length (inters p b a c nil))
(length (inters p c a b nil))
)
9
)
)
(car l)
(cadr l)
(caddr l)
)
)
;;;with the same direction method
(defun ss-pitp0 (p l / foo)
;;check point inside triangle .
;;by GSLS(SS)
(defun foo (a b c p / ac ab ap)
(setq ac (mapcar '- c a)
ab (mapcar '- b a)
ap (mapcar '- p a)
)
(>= (vxv (v^v ab ac) (v^v ab ap)) 0.0)
)
((lambda (a b c)
(and (foo a b c p) (foo b c a p) (foo c a b p))
)
(car l)
(cadr l)
(caddr l)
)
)
;;;with the same direction method
;;;by trans
(defun ss-pitp1 (p l)
;;check point inside triangle .
;;by GSLS(SS)
((lambda (a b c)
(and (<= (* (car (trans (mapcar '- p a) 0 (mapcar '- b a)))
(car (trans (mapcar '- p a) 0 (mapcar '- c a)))
)
0
)
(<= (* (car (trans (mapcar '- p b) 0 (mapcar '- a b)))
(car (trans (mapcar '- p b) 0 (mapcar '- c b)))
)
0
)
)
)
(car l)
(cadr l)
(caddr l)
)
)