Mais polígonos

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….

Deixe um comentário

Carrinho de compras
Rolar para cima