Esto es lo que estoy tratando de lograr (por favor, no ponga duplicados si no puedo hacer preguntas), quiero saber si el punto cLng, cLat está en la línea Segmento aLng, alat a bLng, bLng. Mi problema es que mi control de distancia no funciona a 2.00 metros que es EPSILON. Cualquier ayuda para mejorar este código sería muy apreciada.
var crossProduct = (cLat - aLat) * (bLng - aLng) - (cLng - aLng) * (bLat - aLat); if (Math.Abs(crossProduct) == 0) { return true; } var dotProduct = (cLng - aLng) * (bLng - aLng) + (cLat - aLat) * (bLat - aLat); var squaredLength = (bLng - aLng) * (bLng - aLng) + (bLat - aLat) * (bLat - aLat); var param = -1d; if (squaredLength != 0) //in case of 0 length line { param = dotProduct / squaredLength; } double xx = param < 0 ? aLng : param > 1 ? bLng: aLng + param * bLng - aLng; double yy = param < 0 ? aLat : param > 1 ? bLat: aLat + param * bLat - aLat; var dx = cLng - xx; var dy = cLat - yy; var sqrt = Math.Sqrt(dx * dx + dy * dy); return sqrt < EPSILON;