sábado, 30 de julio de 2011

Distancia de un punto a una recta

Bueno, en mis desarrollos de juegos/aplicaciones/chorradas muchísimas veces he tenido que hallar la distancia entre un punto y una recta. Siempre he acabado solucionándolo de una forma u otra. Pero siempre tenia las tediosas divisiones por cero... Tenía que comprobar siempre que el denominador fuera distinto de cero. O si era próximo a cero la precisión en la distancia se veía un poco comprometida... Debido a la precisión de los Float.


La fórmula es la llamada "Fórmula de Heron"  y se basa en la obtención del área de un triángulo.


x1, y1, x2, y2: Definen la línea.
px, py: Definen el punto.

-(float) distanciaPuntoRectaConPuntoX: (float) px PuntoY:(float) py LineaX1: (float) x1 LineaY1: (float) y1 LineaX2: (float) x2 LineaY2: (float) y2{
    float d1,d2,d3,s,area;
    d1 = sqrtf(pow(x2-x1,2) + pow(y2-y1,2));
    d2 = sqrtf(pow(x2-px,2) + pow(y2-py,2));
    d3 = sqrtf(pow(px-x1,2) + pow(py-y1,2));
    s = (d1 + d2 + d3) / 2;
    area = sqrtf(s*(s-d1)*(s-d2)*(s-d3));
    return (2*area)/d1;
}

Y eso es todo por hoy, simple pero efectiva fórmula de Heron. ¡Se acabaron los problemas!

No hay comentarios:

Publicar un comentario