En 'Perspectiva aérea desde mapa de elevaciones con R' se explicaba el concepto de perspectiva aérea y se proponía un algoritmo, mucho más bonito e interesante que eficiente, para calcular de forma quasi vectorizada en R imágenes en perspectiva aérea a partir de un mapa de elevaciones.
Pero los tiempos avanzan, y en la era de los LLM's podemos reformular el código por fuerza bruta en R, es decir usando bucles sin contemplaciones, y pedirle a ChatGPT que lo traduzca a C++ embebido para acelerarlo. Traducir código se le da excepcionalmente bien a ChatGPT, y ejecutar bucles rápido es la especialidad de C++, así que solo pueden formar un equipo ganador.
Un bucle que lee secuencialmente las filas del DEM de arriba abajo, acumulando sobre una imagen final los perfiles o siluetas de cada fila individual del DEM y asignándoles un nivel de gris creciente. La oclusión de atrás hacia adelante entre las superposiciones acumuladas implementa implícitamente la eliminación de superficies ocultas. El resultado es la perspectiva aérea isométrica de un observador situado en la parte inferior del DEM:

Procesamos en Photoshop la perspectiva aérea para dejarla más interesante (hacer clic para ver en resolución original):
En el segundo ejemplo calculamos la perspectiva aérea de la zona pirenaica en la que se encuentra enclavado su pico más alto, el Aneto (hacer clic para ver en alta resolución):
Terminamos con el perfil montañoso, esta vez más suave y alargado, que hay en Gerona entre Torroella de Montgrí y las islas Medas, pasando por Estartit. Con las islas he hecho un poco de trampa rotándolas en el DEM para que no se solapen entre ellas, cosa que ocurre cuando se observan desde sur (hacer clic para ver en alta resolución):
~~~
La mejora en velocidad de la versión compilada en C++ es de dos órdenes de magnitud. Aquí los tiempos ejecutando sobre el raster del Aneto, un DEM de gran tamaño con 6.500x7.500 píxeles (49Mpx). El tiempo de ejecución se reduce al 1,1% pasando de más de 2min a menos de 2s:

~~~
Repositorio con el código R: GitHub.



No hay comentarios:
Publicar un comentario
Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.