acad hispano
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Determinar si un punto pertenece a una recta

4 participantes

Ir abajo

Determinar si un punto pertenece a una recta Empty Determinar si un punto pertenece a una recta

Mensaje por carlosmgilp Jue Mayo 10, 2018 4:55 pm

Hola muchachos, como están.
Alguien tendrá una función para determinar si un punto esta en una recta.
Lo que quiero es seleccionar una linea y luego especificar un punto, y que la función devuelva T si el punto esta es esa linea.
Entiendo que seleccionaría la linea y extraería el punto inicial y el punto final, ya tendría esos valores y los valores del tercer punto que lo selecciono en pantalla.
Pero no me se una formula para saber si ese tercer punto se encuentra entre los dos puntos de la linea.
De antemano muchas gracias.

carlosmgilp

Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por robierzo Jue Mayo 10, 2018 6:36 pm

Hay varias formas de hacerlo, pero quizás la más sencilla es con el GEOMCAL de Autocad.
Primero lo cargas:
Código:
(if (= cal nil) (arxload "geomcal")) ; Carga el GEOMCAL
Y luego utilizas la opción "dpl":
Código:
(SETQ dist_pt_recta (C:CAL "dpl(P3,P1,P2)")); donde P1 Y P2 son dos puntos de la recta y P3 es un punto cualquiera

Esto es algo que aprendí hace muuuucho tiempo del señor administrador de este foro, D. Gabriel.
robierzo
robierzo

Mensajes : 103
Fecha de inscripción : 17/03/2016
Localización : La Coruña

http://www.selmotopografia.es

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por carlosmgilp Jue Mayo 10, 2018 7:33 pm

Hola hermano, como estás.
Ha la probé y no me funciona, porque asume que la línea es infinita y yo necesito saber si ese tercer punto, se encuentra entre los dos puntos de la recta.
Gracias.

carlosmgilp

Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por robierzo Jue Mayo 10, 2018 8:05 pm

En ese caso, una vez que sabes si pertenece o no a la recta, sólo tienes que comprobar que la distancia P1-P3 y P2-P3 son menores que la distancia P1-P2. Si son menores o iguales, está en la recta, si son mayores, está fuera.

Código:
(cond ((and (= dist_pt_recta 0.0)
    (<= (distance P1 P3) (distance P1 P2))
    (<= (distance P2 P3) (distance P1 P2))
       )
       (alert "El Punto pertenece a la recta")
)
)
robierzo
robierzo

Mensajes : 103
Fecha de inscripción : 17/03/2016
Localización : La Coruña

http://www.selmotopografia.es

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por carlosmgilp Vie Mayo 11, 2018 4:12 pm

Hola robierzo, como estas.
Todo trabaja muy bien. Muy agradecido por tu ayuda.
Así lo deje.

Código:
(setq p1 (getpoint))
(setq p2 (getpoint))
(setq p3 (getpoint))

(pt_recta p1 p2 p3)

(defun pt_recta    (p1 p2 p3 / dist_pt_recta)
  (if (= cal nil)
    (arxload "geomcal"))
  (setq dist_pt_recta (c:cal "dpl(P3,P1,P2)"))
  (if (and (= dist_pt_recta 0.0)
     (<= (distance p1 p3) (distance p1 p2))
     (<= (distance p2 p3) (distance p1 p2)))
    t
    nil))

Ahora quería consultarte para hacer una comparación pero en toda una lista de puntos.
Porque las cosas surgen después de que uno va haciendo las pruebas.

Ahora quiero hacer esa comparación, pero con una lista de puntos.
Por ejemplo:
Tengo una lista de puntos '(p1 p2 p3 p4 pn) y el punto que es el que necesito comparar si esta en la recta o no (ptr)
Pero la comparación seria que compruebe si ptr esta entre p1 p2, si no esta, siga comprobando los demás p2 p3, si no p3 p4, si no p4 pn
Y así sucesivamente hasta que finalice la lista de puntos.

Aquí coloco unas variables por si puedes verlo o no se si tendría que abrir otro post, bueno tu me comentas.

Código:
(setq ptr '(40.1531 -0.0770504 0.750286))

(setq lst '((39.9426 -0.237852 0.737583)
            (39.9892 0.0278258 0.675765)
            (40.0146 0.295616 0.607395)
            (40.123 -0.24705 0.78794)
            (40.1685 0.00945168 0.731126)
            (40.1963 0.268271 0.669536)
            (40.3096 -0.257485 0.840029)
            (40.3539 -0.0104983 0.788255)
            (40.3843 0.239006 0.733402)))

Estaba intentando con un lambda pero no supe como aplicarlo.

(apply '(lambda (x y) (dist_pt_recta x y pt3)) lst )

Bueno cualquier cosa me dice.
Nuevamente muchas gracias por la solución anterior.

Saludos.

carlosmgilp

Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por nolo Sáb Mayo 12, 2018 9:25 am

Prueba
Código:
(mapcar'(lambda (x y) (dist_pt_recta x y pt3)) lst (append(cdr  lst)(list(car lst))) )
Te devolverá una lista con los resultados nil y t.
Si quieres una lista con los pares de puntos
Código:

(vl-remove nil
(mapcar '(lambda (x y) (if (dist_pt_recta x y pt3)(list x y))) lst (append(cdr  lst)(list(car lst))) )
)

Pienso que también podrías utilizar la prueba de la suma de distancias para conocer si un punto esta alineado con otros dos
Código:
(defun esta (pt p1 p2 / s)
(if (<= (setq s (abs(-(distance p1 p2)(+(distance p1 pt)(distance p2 pt)))))  0.0001)
(list p1 p2)
))

Código:
(vl-remove nil
(mapcar '(lambda (x y) (esta ptr x y )) lst (append(cdr  lst)(list(car lst))) )
)

0.0001 sería una holgura, porque no me fío del cero absoluto que sería así
Código:
(defun esta (pt p1 p2)
(zerop (-(distance p1 p2)(+(distance p1 pt)(distance p2 pt))))
)

En tu ejemplo, el punto no esta cercano a una línea que una dos puntos consecutivos de  la lista aunque casi a toca a alguna unión aleatoria de dos puntos de la lista

Un saludo

Editado para corregir y añadir la defun esta

nolo

Mensajes : 182
Fecha de inscripción : 17/03/2016

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por carlosmgilp Lun Mayo 14, 2018 5:24 pm

Hola nolo como has estado.
Gracias por tu ayuda tambien.

La funcion esta con holgura me funciono muy bien, de por si fue la unica, las demas siempre me dieron de resultado nil y no se por que.

Mil gracias.

carlosmgilp

Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por kasperle Miér Mayo 16, 2018 1:20 pm

Otra posibilidad:

Código:

(defun pto_lin (a b)
  ;; a: línea como "ename"
  ;; b: punto como lo devuelve "getpoint" o una lista de coordenadas
  ;; la precisión "0.00000001" se puede aumentar o disminuir a gusto...
  (if (equal (distance (vlax-curve-getclosestpointto (vlax-ename->vla-object a) b) b) 0. 0.00000001) T nil)
  )

Un saludo.

kasperle

Mensajes : 28
Fecha de inscripción : 18/03/2016

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por carlosmgilp Miér Mayo 16, 2018 3:06 pm

Gracias kasperle.
Agregada a mis funciones tambien.
Un saludo.

carlosmgilp

Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por kasperle Jue Mayo 17, 2018 9:10 am

Más depurada...
Código:

(defun pto_lin (a b)
  (equal (distance (vlax-curve-getclosestpointto a b) b) 0.0 0.00000001)
  )

Un saludo.

kasperle

Mensajes : 28
Fecha de inscripción : 18/03/2016

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por carlosmgilp Jue Mayo 17, 2018 5:14 pm

Gracias hermano.

carlosmgilp

Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela

Volver arriba Ir abajo

Determinar si un punto pertenece a una recta Empty Re: Determinar si un punto pertenece a una recta

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.