Bom... já respondi em alguns forums como fazer pra verificar se um ponto está dentro de um polígono e, pra constar, este é o código que eu apresentei:
(defun pointInPolygon (pts pt / i j odd
qtd it jt)
(setq i 0
j 0
odd nil
qtd (length pts)
x (car pt)
y (cadr pt))
(repeat qtd
(setq j (if (= (1+ j) qtd)
0
(1+ j))
it (cadr (nth i pts))
jt (cadr (nth j pts)))
(if (or (and (< it y) (>= jt y))
(and (< jt y) (>= it y)))
(if (< (+ (car (nth i pts))
(* (/ (- y it) (- jt it))
(- (car (nth j pts))
(car (nth i pts)))))
x)
(setq odd (not odd))))
(setq i (1+ i)))
odd)
na verdade, eu usei a metodologia apresentada aqui
o que eu fiz foi adaptar para autolisp...
onde "pts" é uma lista de coordenadas dos vértices do polígono e pt é um ponto.. ex:
(setq pts '((0 0) (0 10) (10 10)) pt '( 5 5 ))
deverá retornar "T" pois este ponto está dentro deste polígono....
Nenhum comentário:
Postar um comentário