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

Nenhum comentário:

Postar um comentário