¿Cómo eliminar puntos que están lejos de un segmento?

Leí cómo mantener puntos que están entre dos puntos (es decir: que son parte de un segmento, con cierta imprecisión) aquí:¿Cómo puedo saber si un punto está cerca de cierta línea?

Por lo tanto, implementé este pequeño algoritmo en Java, y mi código es (¡tenga en cuenta que el nombre de las variables debe estar claro para usted! :)):

    List<Cupple> returned = new ArrayList<>(points_to_test);

    for(Cupple c : points_to_test) {

        /*if(c == segment_first_point || c == segment_last_point) {
            continue;
        }*/

        if(Math.abs(Math.abs(
                (segment_last_point.getNumber(0) - segment_first_point.getNumber(0))
                        *
                        (segment_first_point.getNumber(1) - c.getNumber(1))
                        -
                        (segment_first_point.getNumber(0) - c.getNumber(0))
                                *
                                (segment_last_point.getNumber(1) - segment_first_point.getNumber(1))
        )
                /
                Math.sqrt(
                        Math.pow((segment_last_point.getNumber(0) - segment_first_point.getNumber(0)), 2)
                                +
                                Math.pow((segment_last_point.getNumber(1) - segment_first_point.getNumber(1)), 2)
                )

        ) > maximal_allowed_distance) {

            returned.remove(c);
        }
    }

    return returned;

Para estar seguro de que comprende:

returned es la lista con puntos que están en el segmento, o cerca del segmento (y la "imprecisión" / distancia máxima que determina si un punto está fuera del segmento es la variable:maximal_allowed_distance)

points_to_test son TODOS los puntos que están presentes en mi gráfico: los dos de mi segmento + los puntos que realmente están en el segmento + los puntos que están casi en el segmento (<=maximal_allowed_distance) + los puntos que están lejos del segmento (>maximal_allowed_distance)La idea de mi pequeño algoritmo es que elimino todo lo último.

segment_[first|last]_point son las extremidades de los dos segmentos

c es el punto actual depoints_to_test y quiero saber si está lejos del segmento o dentro (de acuerdo con elmaximal_allowed_distance)

getNumber(0) devuelve la coordenada X del punto,getNumber(1) devuelve el Y.

Sin embargo, no funciona. No devuelve los puntos buenos (es decir: los puntos que están en el segmento, teniendo en cuentamaximal_allowed_distance)

¿Sabes si entendí mal la respuesta que te di en la primera línea de esta pregunta? ¿Ves algún error en mi propia implementación de este algoritmo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta