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