; Test if a point in triangle's plane is inside the triangle (defun C:II( / p0 pp1 pp2 pp3 area alpha beta gama) (setq p0 (getpoint "\nSelect TEST point: ")) (setq pp1 (getpoint "\nSelect 1st TRIANGLE point: ")) (setq pp2 (getpoint "\nSelect 2nd TRIANGLE point: ")) (setq pp3 (getpoint "\nSelect 3rd TRIANGLE point: ")) ; get triangle area (setq area (triarea pp1 pp2 pp3)) ; area of subtriangles over area of main triangle (setq alpha (/ (triarea p0 pp1 pp2) area)) (setq beta (/ (triarea p0 pp2 pp3) area)) (setq gama (/ (triarea p0 pp1 pp3) area)) ;(setq gama (- 1 (+ alpha beta))) (if (= (and (>= alpha 0) (<= alpha 1)) (and (>= beta 0) (<= beta 1)) (and (>= gama 0) (<= gama 1)) (equal (+ alpha beta gama) 1 0.0001) (= 1 1) ) (princ "\nPoint is inside the triangle") (princ "\nPoint is outside the triangle") ) (princ) ) ; Area of a triangle according to Heron's formula (defun triarea ( p1 p2 p3 / side1 side2 side3 p area) (setq side1 (distance p1 p2) side2 (distance p2 p3) side3 (distance p3 p1) ) ; get half of triangle perimeter (setq p (/ (+ side1 side2 side3) 2)) ; calculate triangle area (setq a (sqrt (* p (- p side1) (- p side2) (- p side3)))) ) (princ)