UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y ESTRUCTURAS DE DATOS Proyecto 1: Atlas de Texturas Una textura (en el área de computación gráfica) es una imagen del tipo bitmap (una imagen en mapa de bits) utilizada para cubrir la superficie de un objeto virtual, ya sea tridimensional o bidimensional. Un objeto virtual puede tener asociado varias texturas. Por ejemplo, para un avatar, podemos tener la textura de la cara, el cuerpo, las piernas, pies, cabello, etc. Por comodidad, se suelen colocar todas las texturas de un mismo objeto en una sola textura (textura atlas). El objetivo de utilizar la textura atlas es simplificar el número de objetos de textura a manipular. Simplemente con cargar una imagen estaremos cargando todas las texturas de un objeto complejo. Ejemplo de Textura atlas Su tarea Consiste en lo siguiente: dado un conjunto de imágenes que representan texturas, determinar la textura atlas más pequeña que incluya a todas las texturas. La textura atlas más pequeña es la que tiene la menor cantidad de píxeles, y que pueda almacenar todas las texturas. Entrada: La primera línea de entrada será un entero N representando la cantidad de imágenes 1 ≤ N ≤ 32. Luego seguirán N líneas, cada una indicando el ancho y el alto de la imagen, seguido de un carácter C que identifica a la imagen unívocamente. Asuma que 1 ≤ ancho, alto ≤ 16, mientras que C puede ser cualquier carácter ASCII comprendido en A-Z y ‘0’-‘9’. Salida: La Primera línea de salida consistirá en 2 enteros separados por un espacio en blanco, que indican el ancho y alto de la textura atlas resultante, luego debe imprimir una matriz de caracteres representando el estado final de dicha textura. Cada celda de la matriz contiene el identificador C de la textura correspondiente, o bien el carácter # que constituye un pixel no utilizado por ninguna textura (Ver ejemplos). En caso de existir varias soluciones óptimas (con la misma cantidad de píxeles de la textura atlas como por ejemplo 10x2 o 4x5, o que las texturas se puedan ubicar de manera distinta dentro de la textura atlas) basta con imprimir cualquiera de las soluciones óptimas. Ejemplo: A continuación un par de casos de pruebas. Entrada 4 22A 22B 14C 14D Salida 44 AACD AACD BBCD BBCD Entrada 2 421 112 Salida 52 11112 1111# Consideraciones: • El programa debe ser realizado en C++ y empleando esquemas de backtracking. • Si existen varias soluciones óptimas, imprimir cualquiera. • Las texturas pueden ser rotadas 90 grados para buscar su colocación en el atlas. Por ejemplo, una textura de 5x2 puede ser colocada dentro del atlas en un espacio de 2x5 si lo amerita. • Solamente se requiere la “Salida” del problema en el formato indicado. Cualquier otra información adicional se considerará como erróneo la solución planteada. • Debe emplear Programación Orientada a Objetos en su programa. • El proyecto deberá ser realizado de forma individual. • El código fuente debe estar intradocumentado adecuadamente. • Será compilado y evaluado en el compilador g++ (Linux). Si el proyecto no compila no será corregido. • Se debe entregar un informe de como máximo 3 páginas en .PDF que contenga: planteamiento del problema, análisis, explicación de la solución, algoritmo y limitaciones del sistema. El informe tiene un valor de 5/20 puntos del proyecto. • La revisión del proyecto no es obligatoria, únicamente para aquellas personas que la deseen o sea solicitado por el grupo docente. • El proyecto debe entregarse a más tardar el día 15 de Enero de 2014 a través de la página www.ciens.ucv.ve/portalasig. Se habilitará la manera de cargar el proyecto dentro de la plataforma del portal. Después del 15 de Enero, el sistema no permitirá la entrega de proyectos. • No se aceptará el proyecto después del 15 de Enero a las 11:59pm, y se considerará como no entregado. • Las copias entre proyectos tendrán una calificación de 0 puntos, además de una sanción para todos los involucrados.