Estás buscando un algoritmo de embudo.
Aquí tienes una simple
http://digestingduck.blogspot.com.es/2010/03/simple-stupid-funnel-algorithm.html
Básicamente, el algoritmo identifica los bordes como portales y construye un embudo que se prueba contra el vértice de los bordes para verificar si están dentro del embudo o no.
En el paso A, el embudo se construye con la posición de inicio y el portal cruzado por una línea amarilla.
En el paso B, se verifica el siguiente portal, el vértice superior está dentro del embudo, por lo que la línea superior del embudo ahora lo atraviesa. Pero el vértice inferior está fuera del embudo porque la línea roja se encuentra debajo de la línea verde, por lo que la línea inferior no pasará, sino que continuará pasando por el vértice inferior del portal anterior.
Como puede comprobar, el embudo será más pequeño, y más pequeño, hasta el paso F, donde no se puede construir el embudo, porque la línea roja hace un embudo malo, por lo que el vértice superior se elige como un nuevo punto de inicio y un nuevo embudo se construirá si el punto final no está en esa malla.
Tenga en cuenta que este tipo de algoritmo también permite una solución simple al problema del tamaño del modelo, ya que puede considerar que los portales son más pequeños en el radio de 2x de su modelo.