Graduado en Ingeniería Informática -...

84
MADRID, JUNIO 2016 Autor: Cristina Arnaiz Pérez-Villamil Director: José María Peña Sánchez Graduado en Ingeniería Informática Universidad Politécnica de Madrid Escuela Técnica Superior de Ingenieros Informáticos TRABAJO FIN DE GRADO Generación procedimental de coberturas de edificaciones para modelos 3D

Transcript of Graduado en Ingeniería Informática -...

Page 1: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

MADRID, JUNIO 2016

Autor: Cristina Arnaiz Pérez-Villamil

Director: José María Peña Sánchez

Graduado en Ingeniería Informática

Universidad Politécnica de Madrid

Escuela Técnica Superior de Ingenieros Informáticos

TRABAJO FIN DE GRADO

Generación procedimental de coberturas

de edificaciones para modelos 3D

Page 2: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Indice general

1. RESUMEN 11.1. RESUMEN EN ESPANOL . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2. RESUMEN EN INGLES . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. INTRODUCCION 3

3. TRABAJOS PREVIOS 7

4. DESARROLLO 104.1. HERRAMIENTAS UTILIZADAS . . . . . . . . . . . . . . . . . . . . . 10

4.2. PLANTEAMIENTO INICIAL PARA LA GENERACION DE CUBIER-

TAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4.3. ALGORITMO DE GENERACION DE CUBIERTAS . . . . . . . . . . . 13

4.3.1. FUNDAMENTO Y OBJETIVO . . . . . . . . . . . . . . . . . . 13

4.3.2. FUNCIONAMIENTO . . . . . . . . . . . . . . . . . . . . . . . 14

4.4. PARAMETROS PARA LA CREACION CUBIERTAS . . . . . . . . . . 30

4.4.1. PARAMETROS GABLE ROOF . . . . . . . . . . . . . . . . . . 30

4.4.2. PARAMETROS HIPPED ROOF . . . . . . . . . . . . . . . . . . 31

4.4.3. PARAMETROS GAMBREL ROOF . . . . . . . . . . . . . . . . 31

4.4.4. PARAMETROS MANSARD ROOF . . . . . . . . . . . . . . . . 31

4.4.5. PARAMETROS SHED ROOF . . . . . . . . . . . . . . . . . . . 31

4.5. ALGORITMOS AUXILIARES . . . . . . . . . . . . . . . . . . . . . . 32

4.5.1. ALGORITMO DE CREACION DE CONTORNO . . . . . . . . 32

4.5.2. ALGORITMO DE CREACION DE RECTANGULOS . . . . . . 43

4.5.3. ALGORITMO DE EXPANSION DE RECTANGULOS . . . . . 48

4.5.4. ALGORITMO DE MODIFICACION DE RECTANGULOS . . . 52

4.5.5. CREACION DE GEOMETRIA 3D . . . . . . . . . . . . . . . . 57

4.5.5.1. GEOMETRIA 3D GABLE ROOF . . . . . . . . . . . 57

4.5.5.2. GEOMETRIA 3D HIPPED ROOF . . . . . . . . . . . 58

4.5.5.3. GEOMETRIA 3D MANSARD ROOF . . . . . . . . . 59

4.5.5.4. GEOMETRIA 3D GAMBREL ROOF . . . . . . . . . 60

4.5.5.5. GEOMETRIA 3D SHED ROOF . . . . . . . . . . . . 62

i

Page 3: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

5. RESULTADOS Y CONCLUSIONES 645.1. RESULTADOS GABLE ROOF . . . . . . . . . . . . . . . . . . . . . . 64

5.2. RESULTADOS HIPPED ROOF . . . . . . . . . . . . . . . . . . . . . . 66

5.3. RESULTADOS MANSARD ROOF . . . . . . . . . . . . . . . . . . . . 68

5.4. RESULTADOS SHED ROOF . . . . . . . . . . . . . . . . . . . . . . . 70

5.5. RESULTADOS GAMBREL ROOF . . . . . . . . . . . . . . . . . . . . 72

5.6. CONCLUSIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

6. BIBLIOGRAFIA 76

ii

Page 4: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Indice de figuras

2.1. Diagrama Funcionamiento House Builder . . . . . . . . . . . . . . . . . 4

2.2. Partes Librerıa House Builder . . . . . . . . . . . . . . . . . . . . . . . 4

2.3. Resultado House Builder con cubiertas sencillas . . . . . . . . . . . . . . 5

2.4. Esquema cubierta House Builder simple antes algoritmo . . . . . . . . . 5

2.5. Esquema cubierta House Builder compuesta despues algoritmo . . . . . . 6

2.6. Tipos de Cubiertas a Implementar . . . . . . . . . . . . . . . . . . . . . 6

4.1. Cubierta Compuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.2. Descomposicion Cubierta Compuesta en Cubiertas Simples . . . . . . . . 14

4.3. Visualizacion Descomposicion en Cubiertas Simples . . . . . . . . . . . 14

4.4. Vertices y Polıgonos de una Cubierta . . . . . . . . . . . . . . . . . . . . 15

4.5. Ejemplo: Coordenadas de los vertices de una Vivienda . . . . . . . . . . 16

4.6. Rectangulos proporcionados por el Optimizador . . . . . . . . . . . . . . 16

4.7. Contorno de la Vivienda . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.8. Division en rectangulos por los ejes de cada vertice . . . . . . . . . . . . 18

4.9. Ejemplo Extension de Rectangulo . . . . . . . . . . . . . . . . . . . . . 19

4.10. Ejemplo Extension de Rectangulo hacia Arriba . . . . . . . . . . . . . . 19

4.11. Ejemplo Extension de Rectangulo hacia la Derecha . . . . . . . . . . . . 20

4.12. Extension de Rectangulos: Rectangulo 1 . . . . . . . . . . . . . . . . . . 20

4.13. Extension de Rectangulos: Rectangulo 2 . . . . . . . . . . . . . . . . . . 21

4.14. Extension de Rectangulos: Rectangulo 3 . . . . . . . . . . . . . . . . . . 21

4.15. Extension de Rectangulos: Rectangulo 4 . . . . . . . . . . . . . . . . . . 22

4.16. Extension de Rectangulos: Rectangulo 5 . . . . . . . . . . . . . . . . . . 22

4.17. Extension de Rectangulos: Rectangulo 6 . . . . . . . . . . . . . . . . . . 23

4.18. Extension de Rectangulos: Rectangulo 7 . . . . . . . . . . . . . . . . . . 23

4.19. Tipos de tejados que requieren Algoritmo Modificacion de Rectangulos . 24

4.20. Cubierta con secciones incorrectas . . . . . . . . . . . . . . . . . . . . . 24

4.21. Cubierta con areas incorrectas de interseccion . . . . . . . . . . . . . . . 25

4.22. Cubierta con areas correctas de interseccion . . . . . . . . . . . . . . . . 25

4.23. Cubierta correcta tras Algoritmo Modificacion de Rectangulos . . . . . . 25

4.24. Modificacion de Rectangulos: Rectangulo 1 . . . . . . . . . . . . . . . . 26

4.25. Modificacion de Rectangulos: Rectangulo 2 . . . . . . . . . . . . . . . . 26

4.26. Modificacion de Rectangulos: Rectangulo 3 . . . . . . . . . . . . . . . . 27

4.27. Modificacion de Rectangulos: Rectangulo 4 . . . . . . . . . . . . . . . . 27

iii

Page 5: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

4.28. Modificacion de Rectangulos: Rectangulo 5 . . . . . . . . . . . . . . . . 28

4.29. Modificacion de Rectangulos: Rectangulo 6 . . . . . . . . . . . . . . . . 28

4.30. Modificacion de Rectangulos: Rectangulo 7 . . . . . . . . . . . . . . . . 29

4.31. Gambrel Roof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.32. Hipped Roof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.33. Shed Roof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4.34. Mansard Roof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4.35. Gable Roof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4.36. Diferencia entre Punto Interior y Punto de Contorno . . . . . . . . . . . . 33

4.37. Diferencia entre Punto Interior y Punto de Contorno: Puntos Auxiliares . 33

4.38. Formacion de Aristas a partir de Puntos: Paso 1 . . . . . . . . . . . . . . 34

4.39. Formacion de Aristas a partir de Puntos: Paso 2 . . . . . . . . . . . . . . 34

4.40. Buscar Enlace para Arista . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4.41. Enlace para Arista Encontrado . . . . . . . . . . . . . . . . . . . . . . . 35

4.42. Vertices Necesarios e Innecesarios en un Contorno . . . . . . . . . . . . 36

4.43. Construccion de Contorno: Paso 1 . . . . . . . . . . . . . . . . . . . . . 39

4.44. Construccion de Contorno: Paso 2 . . . . . . . . . . . . . . . . . . . . . 39

4.45. Construccion de Contorno: Paso 3 . . . . . . . . . . . . . . . . . . . . . 40

4.46. Construccion de Contorno: Paso 4 . . . . . . . . . . . . . . . . . . . . . 40

4.47. Construccion de Contorno: Paso 5 . . . . . . . . . . . . . . . . . . . . . 41

4.48. Construccion de Contorno: Paso 6 . . . . . . . . . . . . . . . . . . . . . 41

4.49. Construccion de Contorno: Paso 7 . . . . . . . . . . . . . . . . . . . . . 42

4.50. Construccion de Contorno: Paso 8 . . . . . . . . . . . . . . . . . . . . . 42

4.51. Construccion de Contorno: Paso 9 . . . . . . . . . . . . . . . . . . . . . 43

4.52. Construccion de Contorno: Paso 10 . . . . . . . . . . . . . . . . . . . . 43

4.53. Trazo de una Diagonal por un Vertice de Contorno . . . . . . . . . . . . 44

4.54. Trazo de las Diagonales por los Vertices de Contorno . . . . . . . . . . . 44

4.55. Diferencia Rectangulo Contenido y No Contenido en Contorno . . . . . . 45

4.56. Creacion de Rectangulos: Paso 1 . . . . . . . . . . . . . . . . . . . . . . 46

4.57. Creacion de Rectangulos: Paso 2 . . . . . . . . . . . . . . . . . . . . . . 47

4.58. Creacion de Rectangulos: Paso 3 . . . . . . . . . . . . . . . . . . . . . . 47

4.59. Creacion de Rectangulos: Paso 4 . . . . . . . . . . . . . . . . . . . . . . 47

4.60. Creacion de Rectangulos: Paso 5 . . . . . . . . . . . . . . . . . . . . . . 48

4.61. Creacion de Rectangulos: Paso 6 . . . . . . . . . . . . . . . . . . . . . . 48

4.62. Expansion Rectangulo: Permutacion {Abajo, Derecha, Arriba, Izquierda} 49

4.63. Expansion Rectangulo: Permutacion {Arriba, Izquierda, Abajo, Derecha} 49

4.64. Expansion Rectangulo: Permutacion {Izquierda, Abajo, Derecha, Arriba} 49

4.65. Expansion Rectangulo: Permutacion {Izquierda, Arriba, Derecha, Abajo} 50

4.66. Expansion de Rectangulos a lo largo del eje y . . . . . . . . . . . . . . . 50

4.67. Expansion de Rectangulos a lo largo del eje x . . . . . . . . . . . . . . . 51

4.68. Expansion de Rectangulos Posible y No Posible . . . . . . . . . . . . . . 51

4.69. Rectangulos Verticales, Horizontales e Iguales . . . . . . . . . . . . . . . 53

4.70. Interseccion por la Derecha . . . . . . . . . . . . . . . . . . . . . . . . . 54

4.71. Interseccion por la Derecha Resuelta . . . . . . . . . . . . . . . . . . . . 54

iv

Page 6: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

4.72. Interseccion por la Izquierda . . . . . . . . . . . . . . . . . . . . . . . . 54

4.73. Interseccion por la Izquierda Resuelta . . . . . . . . . . . . . . . . . . . 55

4.74. Interseccion por la Arriba . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.75. Interseccion por la Arriba Resuelta . . . . . . . . . . . . . . . . . . . . . 56

4.76. Interseccion por la Abajo . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.77. Interseccion por la Abajo Resuelta . . . . . . . . . . . . . . . . . . . . . 56

4.78. Construccion Geometrıa 3D Gable Roof . . . . . . . . . . . . . . . . . . 58

4.79. Construccion Geometrıa 3D Hipped Roof . . . . . . . . . . . . . . . . . 59

4.80. Construccion Geometrıa 3D Mansard Roof . . . . . . . . . . . . . . . . 60

4.81. Construccion Geometrıa 3D Gambrel Roof . . . . . . . . . . . . . . . . 62

4.82. Construccion Geometrıa 3D Shed Roof . . . . . . . . . . . . . . . . . . 63

5.1. Gable Roof Vista 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.2. Gable Roof Vista 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.3. Gable Roof Vista 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.4. Gable Roof Vista 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.5. Gable Roof Vista 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.6. Gable Roof Vista 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.7. Hipped Roof Vista 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.8. Hipped Roof Vista 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.9. Hipped Roof Vista 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5.10. Hipped Roof Vista 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5.11. Hipped Roof Vista 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5.12. Hipped Roof Vista 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.13. Mansard Roof Vista 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.14. Mansard Roof Vista 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.15. Mansard Roof Vista 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.16. Mansard Roof Vista 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.17. Mansard Roof Vista 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.18. Mansard Roof Vista 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

5.19. Shed Roof Vista 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

5.20. Shed Roof Vista 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

5.21. Shed Roof Vista 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

5.22. Shed Roof Vista 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

5.23. Shed Roof Vista 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

5.24. Gambrel Roof Vista 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

5.25. Gambrel Roof Vista 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

5.26. Gambrel Roof Vista 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

5.27. Gambrel Roof Vista 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5.28. Gambrel Roof Vista 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5.29. Gambrel Roof Vista 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

v

Page 7: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

1 | RESUMEN

1.1. RESUMEN EN ESPANOLLurtis Rules es una empresa dedicada al desarrollo de herramientas que contribuyan

a mejorar la productividad de la industria de creacion de contenidos digitales. Su primera

herramienta, House Builder, es un asistente que permite a un usuario, sin necesidad de

tener conocimientos tecnicos de modelado, crear una edificacion en 3D que pueda ser

importada en sus proyectos directamente. House Builder genera, en pocos minutos, el tra-

bajo equivalente a dos semanas de un modelador profesional. El usuario introduce unas

breves descripciones sobre el diseno que desea, como el contorno o el numero de plantas

del edificio, y House Builder crea automaticamente una edificacion completa con gran

cantidad de elementos y detalles.

Entre los elementos que House Builder genera procedimentalmente se encuentran las

cubiertas o tejados de las edificaciones. Estas cubiertas pueden ser simples o compuestas.

Estas ultimas son aquellas que, por su contorno irregular, estan constituidas por la inter-

seccion de varias cubiertas simples (rectangulares). Para la generacion de una cubierta

compuesta, el algoritmo parte de las dimensiones del area que esta ocupa sobre el plano

horizontal y, a continuacion, la divide en subareas rectangulares que representen, cada

una, las dimensiones de las distintas cubiertas simples en que se descompone la cubierta

compuesta.

Una vez obtenidas las dimensiones de cada cubierta simple se construye del modelo

3D de cada una de ellas, con el fin de obtener el modelo 3D de la cubierta compuesta. Este

algoritmo permite construir distintos tipos o geometrıas de cubiertas simples (a dos aguas,

a cuatro aguas, etc), lo que da lugar a distintos tipos de cubiertas compuestas que Hou-

se Builder puede utilizar para enriquecer sus modelos y hacerlos mas atractivos y realistas.

1

Page 8: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

1.2. RESUMEN EN INGLESLurtis Rules is a company dedicated to the development of tools that help the industry

of digital content creation to improve their productivity. Lurtis Rules’ first tool, House

Builder, is a software that allows a user, without any technical knowledge of 3D mode-

ling, to create a building that can be directly imported into their projects. House Builder

generates, in a few minutes, just as much work as a professional modeler would do in two

weeks. The user enters brief descriptions of the desired design, as could be its contour or

the number of floors, and House Builder automatically creates a complete building with

lots of elements and details.

Among the elements that House Builder generates procedurally we can find the buil-

ding covers or roofs, which may be simple or composite. The composite ones are those

that, because of their irregular shapes, are formed by the intersection of several simple

(rectangular) roofs. In order to generate a composite roof, the algorithm receives the size

of the area that it occupies on the horizontal plane, and divides it into rectangular subareas

that represent the dimensions of the various simple roofs that shape the composite roof.

Once obtained the dimensions of each simple roof, they are individually raised into

3D dimensions, and so the model of the composite roof gets completely built. This al-

gorithm enables the construction of different geometries or types of simple roofs (gable,

hipped, mansard, gambrel, etc). This diversity of forms results in different types of com-

posite roofs, which can be used by House Builder to enrich its models and make them

more attractive and realistic.

2

Page 9: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

2 | INTRODUCCION

En 2017, la industria de los videojuegos y de los contenidos digitales movera millones

de dolares. Se trata de un negocio altamente fragmentado debido a la existencia de gran

cantidad de desarrolladores independientes, pequenos estudios y creadores de contenidos

que disenan productos vinculados con el ocio y el entretenimiento. Ademas, en este sec-

tor las tasas de fracaso son muy elevadas. En el caso de los videojuegos, la mitad de los

proyectos no llegan a finalizarse, siendo solo un 5 %, aproximadamente, rentables. Las

razones de estas tasas de fracaso son multiples. Las mas destacadas, en un 20 % de los

casos, son los elevados costes de produccion y desarrollo.

En una produccion del sector digital, el 25 % de los costes se deben al modelado

artıstico. Una forma de reducir estos costes es la automatizacion de los procesos que lle-

van a cabo dicha tarea de modelado.

Lurtis Rules es una empresa dedicada al desarrollo de herramientas basadas en Inte-

ligencia Artificial y Optimizacion cuyo objetivo es dar asistencia y soporte a la industria

de creacion de contenidos digitales (animacion, videojuegos, VFX. . . ) ayudando a mejo-

rar la productividad, acelerando y optimizando las fases de desarrollo de contenidos. Con

esta idea nace House Builder, su primera herramienta.

House Builder es un asistente para el modelado de edificios e interiores destinado a las

industrias de animacion y de videojuegos. Se trata de un servicio alojado en la nube que

permitira a sus usuarios, sin necesidad de conocimientos tecnicos de modelado, crear una

edificacion en 3D que podra ser incluida en sus proyectos directamente. House Builder

ofrece la capacidad de generar, en pocos minutos, el trabajo equivalente a dos semanas

de un modelador profesional. Proporciona una reduccion de hasta el 90 % de las horas de

trabajo necesarias para obtener el mismo modelo de manera tradicional, lo que produce

un ahorro directo del 75 % sobre el gasto derivado de este tipo de desarrollos, que suele

representar el 25-30 % de los costes de produccion.

Con House Builder, el disenador introduce descripciones de diseno de alto nivel, co-

mo el contorno del edificio, el numero de plantas o el numero de niveles subterraneos, y a

continuacion estos datos pasan al optimizador de House Builder, programa encargado de

ajustar y disenar, de forma automatica y dentro de los lımites establecidos, los elementos

interiores, habitaciones y pasillos. El optimizador proporciona como salida un script en

lenguaje Python, que ejecutado sobre la biblioteca de House Builder, implementada igual-

3

Page 10: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

mente en Python, dara lugar a un archivo que contendra la representacion 3D del modelo

disenado, listo para ser importado en un programa de modelado y animacion en 3D como

Maya, 3DSMax, y otros.

Figura 2.1: Diagrama Funcionamiento House Builder

House Builder incluye en su librerıa funcionalidad para distintos programas de mode-

lado 3D, con el fin de poder exportar los resultados en un formato de archivo compatible

con el software que prefiera el usuario. La biblioteca de codigo de House Builder se en-

cuentra dividida en dos partes: por un lado encontramos la parte troncal (Librerıa LHB)

y por el otro, basandose en esta ultima, se encuentran las extensiones para los distintos

programas de modelado con los que trabaja House Builder: Maya, 3DsMax y FBX.

Figura 2.2: Partes Librerıa House Builder

Para la construccion de un elemento arquitectonico, se realizan en la Librerıa LHB

todos los calculos basicos que permiten la obtencion de la geometrıa del objeto en forma

de estructura de datos y, posteriormente, en la extension, se realizan las operaciones que

hacen uso de las librerıas propias del software de modelado escogido por el usuario, ope-

raciones que, a partir de los calculos realizados en la parte troncal, daran como resultado

la representacion en 3D del elemento buscado.

4

Page 11: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

House Builder crea y disena cada elemento arquitectonico por separado, lo situa en su

posicion exacta y lo texturiza, dando lugar a la edificacion solicitada por el usuario tras

la fusion de todos los elementos. Entre los componentes disenados encontramos paredes,

suelos, techos, puertas, ventanas, escaleras y tejados.

Figura 2.3: Resultado House Builder con cubiertas sencillas

Durante este TFG se ha trabajado sobre la parte troncal (Librerıa LHB), en el diseno e

implementacion de un algoritmo de generacion de cubiertas compuestas. Posteriormente

se ha procedido a la creacion de los modelos 3D generados dentro de la expansion de

codigo para Autodesk Maya.

De forma previa al desarrollo de este algoritmo, las cubiertas utilizadas por House

Builder son las que se muestran en la figura 2.3. El desarrollo de cubiertas compues-

tas proporciona resultados mas realistas, funcionales y arquitectonicamente correctos. La

diferencia entre ambos modelos se puede observar en las siguientes figuras.

Figura 2.4: Esquema cubierta House Builder simple antes algoritmo

5

Page 12: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 2.5: Esquema cubierta House Builder compuesta despues algoritmo

La Figura 2.5 representa uno de los tipos de cubiertas que Lurtis Rules desea poder

generar. Con la implementacion de este nuevo algoritmo, House Builder tendra a su dis-

posicion una nueva variedad de tipos de cubiertas que podra utilizar para la elaboracion

de sus modelos, haciendolos mas atractivos y versatiles.

Los tipos de cubiertas que debe poder proporcionar este nuevo algoritmo son los si-

guientes: Gable Roof, Gambrel Roof, Mansard Roof, Hipped Roof y Shed Roof. El tipo

de tejado Flat Roof, la cubierta de mayor simplicidad, se encuentra ya implementada en

la librerıa de House Builder.

Figura 2.6: Tipos de Cubiertas a Implementar

6

Page 13: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

3 | TRABAJOS PREVIOS

La produccion de modelos 3D es un proceso costoso en esfuerzo, dinero, tiempo y

habilidad, los cuales pueden quedar desperdiciados en el caso de producirse un fracaso

en el proyecto. Con el fin de facilitar y abaratar el proceso, han surgido numerosas he-

rramientas que tienen como objetivo automatizar y acelerar la generacion de contenido

digital.

En el proceso de creacion del contenido digital de un videojuego, encontramos diver-

sos tipos de elementos a disenar: personajes, objetos, elementos arquitectonicos, paisajes,

etc. Es posible generar los mismos haciendo uso de herramientas que contribuyen al al-

cance de un flujo de trabajo eficiente y de menor complejidad:

BuildR: Permite a los usuarios crear construcciones en Unity3D sin la necesidad de

utilizar otros programas de modelado 3D externos. La generacion de construcciones

es simple y sencilla de realizar. Los modelos generados pueden ser editados desde

Unity y exportados en un formatos como OBJ o FBX. BuildR permite la inclusion

de elementos adicionales decorativos y disenar el interior de los modelos.[3]

MakeHuman: Es una aplicacion implementada en Python que permite la creacion

de modelos 3D de seres humanos de forma realista, listos para su uso en juegos,

animaciones, ilustraciones o software de diseno grafico como Zbrush o Mudbox.[6]

7

Page 14: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Fuse CC: Sin necesidad de tener conocimientos sobre modelado 3D, Fuse CC hace

posible la creacion de personajes humanos de forma sencilla a partir de un extenso

catalogo de partes del cuerpo, tipos de pelo, prendas y texturas para la ropa.[1]

CityGen: Genera procedimentalmente ambientes urbanos modernos con carreteras,

construcciones, plantas, terrenos y arboles, que puedan ser directamente incorpo-

rados en videojuegos 3D. El usuario puede manipular los elementos geometricos

y especificar diversos aspectos de la generacion procedimental, es decir, tiene un

control sobre el proceso creativo.[2]

8

Page 15: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

SketchUp: Es un software de modelado 3D con gran cantidad de aplicaciones, entre

ellas la creacion de viviendas con gran nivel de detalle. El mecanismo de edicion es

muy sencillo y automatico. SketchUp asimismo permite la creacion de modelos 3D

de cualquier tipo de objeto.

Revit: Aporta herramientas para el diseno arquitectonico y la construccion de vi-

viendas y edificios. Permite la adicion de gran cantidad de elementos arquitectoni-

cos y decorativos. Es un software de gran rendimiento que permite modelar de

forma muy eficaz.[5]

9

Page 16: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

4 | DESARROLLO

4.1. HERRAMIENTAS UTILIZADASPython: es un lenguaje de programacion interpretado y con una sintaxis que favo-

rece la legibilidad del codigo. Se trata de un lenguaje orientado a objetivos, inter-

pretado y con tipado dinamico. Resulta muy comodo y sencillo de aprender. Entre

las librerıas de Python utilizadas encontramos Sympy, que ofrece numerosos al-

goritmos geometricos que resultan de gran utilidad para el tratamiento de areas y

perımetros[11].

Autodesk Maya 2015: es un software dedicado al desarrollo de graficos 3D, efectos

especiales y animacion. Autodesk Maya se caracteriza por su gran potencia y su

versatilidad para la expansion y personalizacion de sus herramientas y de su inter-

faz. Ha tenido un gran impacto en la industria del cine y de los videojuegos, y su

uso se ha extendido considerablemente en los ultimos anos.

Para la utilizacion de Autodesk Maya sin hacer uso de la interfaz grafica, es decir,

por medio de codigo, ha sido necesario investigar y aprender de forma previa la fun-

cionalidad que ofrece la API de Maya para Python[4]. Las principales herramientas

de esta librerıa que han sido utilizadas para la construccion de los modelos en 3D

de las cubiertas han sido:

• Herramientas de seleccion de objetos, vertices, aristas y caras.

• Herramientas de traslacion de objetos, vertices, aristas y caras.

• Herramientas de rotacion de objetos, vertices, aristas y caras.

• Herramientas para la creacion, edicion y borrado de nodos de jerarquıa.

• Herramientas para la creacion de prismas poligonales.

• Herramientas para la resta booleana entre objetos.

• Herramientas para el duplicado de objetos.

Eclipse Mars: es un IDE, es decir, una herramienta que facilita el trabajo a la hora

de desarrollar aplicaciones, proporcionando ayudas visuales en la sintaxis, plugins,

y programas depuradores de codigo. Eclipse Mars permite tener una vista jerarqui-

ca de los proyectos sobre los que se trabaja, personalizar la interfaz y anadir fun-

cionalidades y atajos para lograr una labor mas eficaz. De igual forma, permite la

10

Page 17: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

conexion a Autodesk Maya de forma sencilla. Es por esto ultimo, especialmente,

que se ha elegido este entorno para trabajar.

PyDev: es un plugin que permite utilizar Eclipse como un IDE para Python. Posee

caracterısticas como el autocompletado de codigo, el analisis de codigo, la depu-

racion de codigo, una consola interactiva, refactorizacion, etc. Resulta un entorno

sencillo y comodo de utilizar, ası como perfecto para el manejo de los ficheros y

paquetes de la biblioteca de House Builder.

Eclipse Maya Editor: La consola propia de Autodesk Maya no permite el manejo de

ficheros y resulta algo incomoda, por lo que se ha optado por un entorno de trabajo

mas complejo y con mayores ventajas.

Eclipse Maya Editor es un plugin que permite utilizar Eclipse (PyDev) como un IDE

para Autodesk Maya. Eclipse Maya Editor establece la comunicacion entre Maya y

Eclipse de forma biyectiva. Entre sus principales funcionalidades encontramos:

• Importar el script que esta siendo editado a Maya, es decir, importar o recargar

el script al directorio de trabajo (path) de Maya.

• Enviar la totalidad de los contenidos de los ficheros del editor a Maya.

• Enviar una region de codigo seleccionada a Maya.

• Ver los resultados que devuelve la consola de Maya en la consola de Eclipse.

• Acceder de forma rapida a la documentacion de las librerıas de Maya.

Eclipse Autocompletion for Maya: El autocompletado de comandos en Eclipse se

logra anadiendo los ficheros de formato “.pypredef” del directorio de Maya al path

del IDE. Con esta accion se logra ademas que Eclipse muestre la documentacion

asociada a cada comando (procedente de la documentacion de Maya).

Configuracion de Maya para establecer la conexion con Eclipse: es necesario eje-

cutar una seccion de codigo en Autodesk Maya para establecer la conexion con

Eclipse. Esta accion debe ser realizada cada vez que se abra Autodesk Maya y se

desee que reciba codigo de Eclipse. Una forma rapida de configuracion es crear un

boton en la interfaz de Maya que ejecute la seccion de codigo mencionada.

Configuracion de Eclipse para establecer la conexion con Maya y acceder a las

librerıas de Python y a la API de Maya para Python: es necesario anadir al path

de Eclipse las librerıas de Maya, ası como configurar el interprete que utilizara el

proyecto de House Builder, de modo que este sea el proporcionado por Maya, y no

un interprete de Python como tal. La version de Python que utiliza Autodesk Maya

es la 2.7.

Instalacion de Software de Versionado (Git): La utilizacion de un software de ver-

sionado es fundamental para mantener el codigo ordenado y seguro. Se ha utilizado

un repositorio de Bitbucket para la fusion del codigo desarrollado con el codigo del

11

Page 18: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

resto del equipo de House Builder, y para llevar un control del avance de las tareas

a lo largo de los meses de trabajo.

Instalacion de Microsoft Azure (librerıas): La adicion de las librerıas de Azure al

proyecto ha permitido la descarga dinamica de texturas y otros elementos que utiliza

House Builder para la creacion de las edificaciones.

4.2. PLANTEAMIENTO INICIAL PARA LA GENERA-CION DE CUBIERTAS

Durante las primeras semanas de estas practicas, tuvieron lugar varias reuniones con

Lurtis Rules con el fin de definir la metodologıa de trabajo y el modo de alcanzar los

objetivos propuestos.

En dichas reuniones se tomo la decision de utilizar, como algoritmo de generacion de

cubiertas, el Straight Skeleton Algorithm. Se trata de un algoritmo de creacion de tejados

a cuatro aguas a partir de las coordenadas del area que se desea cubrir. Para su aplicacion

en House Builder se hizo uso de la implementacion en Python de Oliver Teboul[9].

Previamente a la incorporacion del codigo de Oliver Teboul a la librerıa de Lurtis

Rules, se realizaron una serie de pruebas con el fin de comprobar que el algoritmo cumplıa

con los requisitos de este proyecto:

1. No presenta problemas con contornos complejos.

2. No presenta problemas con contornos formados por angulos rectos.

3. Contempla la presencia de patios interiores.

4. El tiempo de ejecucion es aceptable.

5. La salida del algoritmo es una estructura de datos util para HouseBuilder.

El codigo de Oliver Teboul posee integrada una interfaz grafica, y la eliminacion de la

misma fue una de las primeras tareas a realizar sobre esta implementacion.

Una vez puesto en ejecucion el codigo de Oliver Teboul junto con la librerıa de House

Builder, se observo que el funcionamiento no era el esperado. Se encontraron los siguien-

tes problemas:

1. Para una entrada muy similar a una entrada con resultado exitoso, devuelve error.

2. Segun el orden de los vertices del contorno, el resultado es exitoso o error.

3. Segun los angulos de que formen las aristas del contorno, el resultado es exitoso o

error.

12

Page 19: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

4. Segun la forma de contorno, el resultado es exitoso o error.

Tras haber empleado una cantidad de tiempo considerable en la solventacion de estos

fallos sin la obtencion del funcionamiento perfecto del algoritmo, se comenzo a contem-

plar la posibilidad de buscar una nueva vıa para la generacion de cubiertas. Las razones

para el cambio son las siguientes:

El codigo de Oliver Teboul presenta varios fallos independientes, cuyo origen re-

sulta difıcil de detectar debido a la complejidad de la implementacion.

Proporciona unicamente soluciones para cubiertas a cuatro aguas. HouseBuilder

desea poder ofrecer al usuario distintas variedades y tipologıas de tejados.

El flujo de la implementacion de Oliver Teboul resulta incoherente en muchas sec-

ciones de codigo. Se realizan, de igual forma, instrucciones innecesarias.

Como consecuencia, se ha creado y disenado un nuevo algoritmo para la generacion

de tejados. Recibe la misma entrada y devuelve la misma salida que el algoritmo del

Straight Skeleton, sin embargo, su funcionamiento es completamente distinto.

Este nuevo metodo, posee ademas la ventaja de poder generar tejados de diferentes di-

senos (a cuatro aguas, a dos aguas, etc), e incluso de poder generar cubiertas que combine

distitnos tipos de tejados.

4.3. ALGORITMO DE GENERACION DE CUBIERTAS

4.3.1. FUNDAMENTO Y OBJETIVOEl algoritmo de generacion de cubiertas disenado se basa en la siguiente idea:

Una cubierta compuesta esta formada por la interseccion de cubiertas simples.

Figura 4.1: Cubierta Compuesta

13

Page 20: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.2: Descomposicion Cubierta Compuesta en Cubiertas Simples

Figura 4.3: Visualizacion Descomposicion en Cubiertas Simples

Como se puede observar, la cubierta compuesta de la Figura 4.1, esta formada por las

tres cubiertas simples indicadas en las figuras 4.2 y 4.3. Al intersectar las tres cubiertas

simples, se forma la cubierta compuesta.

El objetivo del algoritmo se basa la idea de hallar las dimensiones de cada una de las

cubiertas sencillas, con el fin de que, tras la construccion del modelo 3D de cada una de

ellas, obtengamos el modelo 3D de la cubierta compuesta.

4.3.2. FUNCIONAMIENTOUna vez el optimizador ha elaborado el diseno de la edificacion de acuerdo a las di-

rectrices proporcionadas por usuario en la interfaz grafica, genera un script de Python que

invocara a la creacion de cada elemento arquitectonico de la construccion.

En House Builder, el proceso de creacion de cualquier elemento se divide en dos fa-

ses. En primer lugar se crea la parte logica del elemento, y posteriormente la geometrıa

en 3D del elemento.

En el caso de una cubierta, la construccion de la parte logica consiste en el calculo de

14

Page 21: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

los vertices de la cubierta y de los distintos polıgonos que forman sus caras. La geometrıa

en 3D se consigue enviando al programa modelador estos datos para su representacion:

vertices y polıgonos.

Figura 4.4: Vertices y Polıgonos de una Cubierta

Para la parte logica, el optimizador proporciona una lista de rectangulos que cubren

completamente el area sobre la que se desea construir el tejado. No es necesario que la lis-

ta de rectangulos sea una en concreto. La unica condicion necesaria es que los rectangulos

cubran todo el area del tejado.

El algoritmo de creacion de cubiertas se divide en 5 pasos, y en cada uno se aplica un

algoritmo distinto que depende del resultado del anterior:

1. Algoritmo de creacion de contorno.

2. Algoritmo de creacion de rectangulos.

3. Algoritmo de extension de rectangulos.

4. Algoritmo de modificacion de rectangulos.

5. Creacion de geometrıa 3D.

Visualizaremos el funcionamiento del algoritmo utilizando como ejemplo una vivien-

da con un patio interior, para que la aplicacion del proceso resulte mas compleja. Los

algoritmos de cada paso se explican brevemente en este apartado, no obstante, su imple-

mentacion y funcionamiento se desarrollaran con mayor detalle en apartados posteriores.

A continuacion, explicaremos el formato de la entrada del algoritmo de creacion de

cubiertas, siendo las coordenadas de la vivienda las siguientes:

15

Page 22: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.5: Ejemplo: Coordenadas de los vertices de una Vivienda

El optimizador, para la construccion de una cubierta, debe proporcionar una lista de

rectangulos que definan, en su conjunto, el area que desea cubrir. El optimizador desco-

noce la sucesion de vertices que forman el contorno de dicha area, es por ello que propor-

ciona una lista de rectangulos. La tarea de hallar el contorno de esta lista de rectangulos

sera la primera labor a realizar por el algoritmo de construccion de cubiertas.

Una posible lista de rectangulos que definen los lımites de la cubierta deseada son:

Figura 4.6: Rectangulos proporcionados por el Optimizador

16

Page 23: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Rectangulo1 = [[0,6],[8,6],[8,10],[0,10]]Rectangulo2 = [[8,6],[12,6],[12,8],[8,8]]Rectangulo3 = [[6,4],[9,4],[9,6],[6,6]]

Rectangulo4 = [[0,0],[10,0],[10,4],[0,4]]Rectangulo5 = [[12,2],[16,2],[16,10],[12,10]]Rectangulo6 = [[10,2],[12,2],[12,4],[10,4]]

A partir de la lista de rectangulos proporcionada por el optimizador, el algoritmo de

construccion de cubiertas halla, en primer lugar, la sucesion de vertices que forman el

contorno del area definida por dicha lista. Tras invocar al algoritmo de construccion del

contorno, la salida obtenida para la vivienda propuesta serıa:

Figura 4.7: Contorno de la Vivienda

[[[16, 2], [16, 10], [12, 10], [12, 8], [8, 8], [8, 10], [0, 10], [0, 6], [6, 6], [6, 4], [0, 4],[0, 0], [10, 0], [10, 2]], [[12, 4], [12, 6], [9, 6], [9, 4]]]

Como se puede observar, el algoritmo ha devuelto dos listas de vertices. La primera

lista es el contorno exterior y la segunda es el contorno del patio interior.

El siguiente paso es la aplicacion del algoritmo de creacion de rectangulos. En base al

contorno hallado, por cada uno de los vertices del mismo se traza una vertical y una hori-

zontal, quedando la vivienda dividida en secciones rectangulares. El algoritmo devolvera

las coordenadas de cada uno de los rectangulos resultantes.

17

Page 24: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.8: Division en rectangulos por los ejes de cada vertice

Rectangulo1 = [(0.0, 0.0), (6.0, 0.0), (6.0, 2.0), (0.0, 2.0)]Rectangulo2 = [(6.0, 0.0), (8.0, 0.0), (8.0, 2.0), (6.0, 2.0)]Rectangulo3 = [(8.0, 0.0), (9.0, 0.0), (9.0, 2.0), (8.0, 2.0)]

Rectangulo4 = [(9.0, 0.0), (10.0, 0.0), (10.0, 2.0), (9.0, 2.0)]Rectangulo5 = [(0.0, 2.0), (6.0, 2.0), (6.0, 4.0), (0.0, 4.0)]Rectangulo6 = [(6.0, 2.0), (8.0, 2.0), (8.0, 4.0), (6.0, 4.0)]Rectangulo7 = [(8.0, 2.0), (9.0, 2.0), (9.0, 4.0), (8.0, 4.0)]

Rectangulo8 = [(9.0, 2.0), (10.0, 2.0), (10.0, 4.0), (9.0, 4.0)]Rectangulo9 = [(10.0, 2.0), (12.0, 2.0), (12.0, 4.0), (10.0, 4.0)]Rectangulo10 = [(12.0, 2.0), (16.0, 2.0), (16.0, 4.0), (12.0, 4.0)]

Rectangulo11 = [(6.0, 4.0), (8.0, 4.0), (8.0, 6.0), (6.0, 6.0)]Rectangulo12 = [(8.0, 4.0), (9.0, 4.0), (9.0, 6.0), (8.0, 6.0)]

Rectangulo13 = [(12.0, 4.0), (16.0, 4.0), (16.0, 6.0), (12.0, 6.0)]Rectangulo14 = [(0.0, 6.0), (6.0, 6.0), (6.0, 8.0), (0.0, 8.0)]Rectangulo15 = [(6.0, 6.0), (8.0, 6.0), (8.0, 8.0), (6.0, 8.0)]Rectangulo16 = [(8.0, 6.0), (9.0, 6.0), (9.0, 8.0), (8.0, 8.0)]

Rectangulo17 = [(9.0, 6.0), (10.0, 6.0), (10.0, 8.0), (9.0, 8.0)]Rectangulo18 = [(10.0, 6.0), (12.0, 6.0), (12.0, 8.0), (10.0, 8.0)]Rectangulo19 = [(12.0, 6.0), (16.0, 6.0), (16.0, 8.0), (12.0, 8.0)]Rectangulo20 = [(0.0, 8.0), (6.0, 8.0), (6.0, 10.0), (0.0, 10.0)]Rectangulo21 = [(6.0, 8.0), (8.0, 8.0), (8.0, 10.0), (6.0, 10.0)]

Rectangulo22 = [(12.0, 8.0), (16.0, 8.0), (16.0, 10.0), (12.0, 10.0)]

18

Page 25: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

A partir de los rectangulos hallados en el paso anterior, se procedera a la aplicacion

del algoritmo de extension de rectangulos. Este algoritmo consiste en extender/prolongar

hacia arriba, abajo, derecha o izquierda el area ocupada por cada rectangulo de la lista

anterior, tanto como se pueda hasta que colisione con los lımites de la vivienda. Si reali-

zamos la extension el rectangulo 1, se obtendra el siguiente resultado:

Figura 4.9: Ejemplo Extension de Rectangulo

Figura 4.10: Ejemplo Extension de Rectangulo hacia Arriba

19

Page 26: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Como se puede observar,el rectangulo elegido no puede ser extendido hacia la iz-

quierda o hacia abajo, debido a que las aristas que lo forman coinciden con las aristas del

contorno de la vivienda.

Figura 4.11: Ejemplo Extension de Rectangulo hacia la Derecha

La aplicacion del algoritmo de extension de rectangulos consiste en realizar el pro-

ceso descrito con cada rectangulo de la lista proporcionada por el algoritmo anterior. El

resultado es una nueva lista de rectangulos, que para el ejemplo planteado seran:

Figura 4.12: Extension de Rectangulos: Rectangulo 1

20

Page 27: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Rectangulo1 = [[(0.0, 0.0), (10.0, 0.0), (10.0, 4.0), (0.0, 4.0)]

Figura 4.13: Extension de Rectangulos: Rectangulo 2

Rectangulo1 = [[(0.0, 0.0), (10.0, 0.0), (10.0, 4.0), (0.0, 4.0)]Rectangulo2 = [(6.0, 0.0), (8.0, 0.0), (8.0, 10.0), (6.0, 10.0)]

Figura 4.14: Extension de Rectangulos: Rectangulo 3

Rectangulo1 = [[(0.0, 0.0), (10.0, 0.0), (10.0, 4.0), (0.0, 4.0)]Rectangulo2 = [(6.0, 0.0), (8.0, 0.0), (8.0, 10.0), (6.0, 10.0)]

Rectangulo3 = [(6.0, 0.0), (9.0, 0.0), (9.0, 8.0), (6.0, 8.0)]

21

Page 28: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.15: Extension de Rectangulos: Rectangulo 4

Rectangulo1 = [[(0.0, 0.0), (10.0, 0.0), (10.0, 4.0), (0.0, 4.0)]Rectangulo2 = [(6.0, 0.0), (8.0, 0.0), (8.0, 10.0), (6.0, 10.0)]

Rectangulo3 = [(6.0, 0.0), (9.0, 0.0), (9.0, 8.0), (6.0, 8.0)]Rectangulo4 = [(0.0, 2.0), (16.0, 2.0), (16.0, 4.0), (0.0, 4.0)]

Figura 4.16: Extension de Rectangulos: Rectangulo 5

22

Page 29: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.17: Extension de Rectangulos: Rectangulo 6

Figura 4.18: Extension de Rectangulos: Rectangulo 7

Rectangulo1 = [[(0.0, 0.0), (10.0, 0.0), (10.0, 4.0), (0.0, 4.0)]Rectangulo2 = [(6.0, 0.0), (8.0, 0.0), (8.0, 10.0), (6.0, 10.0)]

Rectangulo3 = [(6.0, 0.0), (9.0, 0.0), (9.0, 8.0), (6.0, 8.0)]Rectangulo4 = [(0.0, 2.0), (16.0, 2.0), (16.0, 4.0), (0.0, 4.0)]

Rectangulo5 = [(12.0, 2.0), (16.0, 2.0), (16.0, 10.0), (12.0, 10.0)]Rectangulo6 = [(0.0, 6.0), (8.0, 6.0), (8.0, 10.0), (0.0, 10.0)]Rectangulo7 = [(0.0, 6.0), (16.0, 6.0), (16.0, 8.0), (0.0, 8.0)]]

23

Page 30: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

El siguiente paso del algoritmo es la modificacion de los rectangulos, sin embargo

esto solo es necesario realizarlo para ciertos tipos de cubiertas: gable roof, gambrel roof

y shed roof.

Figura 4.19: Tipos de tejados que requieren Algoritmo Modificacion de Rectangulos

Cada rectangulo se corresponde con el area que ocupa cada cubierta simple. La modi-

ficacion de rectangulos consiste en la reduccion del area de ciertos rectangulos, es decir,

en la reduccion del tamano de ciertas cubiertas simples, con el fin de que no suceda el

fenomeno siguiente.

Figura 4.20: Cubierta con secciones incorrectas

Como podemos observar, esta cubierta compuesta (gable roof), esta formada por tres

cubiertas simples que intersectan entre sı. El area de las intersecciones (area sombreada

en la Figura 4.21) es demasiado extensa, provocando que en la cubierta final aparezcan

las zonas de cubierta simple rodeadas con lıneas discontinuas.

24

Page 31: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.21: Cubierta con areas incorrectas de interseccion

Este problema se soluciona disminuyendo el area de las intersecciones a la mitad (dis-

minuyendo el area de una de las cubiertas por abajo y de otra de las cubiertas por la

izquierda), de forma que se eliminen las partes innecesarias.

Figura 4.22: Cubierta con areas correctas de interseccion

La cubierta que se generarıa a partir de los rectangulos obtenidos con la aplicacion del

algoritmo de modificacion de rectangulos es la siguiente:

Figura 4.23: Cubierta correcta tras Algoritmo Modificacion de Rectangulos

25

Page 32: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Para la vivienda utilizada como ejemplo en los pasos anteriores del algoritmo, los

rectangulos devueltos por el algoritmo de modificacion de rectangulos son los siguientes:

Figura 4.24: Modificacion de Rectangulos: Rectangulo 1

Rectangulo1 = [(6.0, 3.0), (8.0, 3.0), (8.0, 7.0), (6.0, 7.0)]

Figura 4.25: Modificacion de Rectangulos: Rectangulo 2

Rectangulo1 = [(6.0, 3.0), (8.0, 3.0), (8.0, 7.0), (6.0, 7.0)]Rectangulo2 = [(6.0, 2.0), (9.0, 2.0), (9.0, 8.0), (6.0, 8.0)]

26

Page 33: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.26: Modificacion de Rectangulos: Rectangulo 3

Rectangulo1 = [(6.0, 3.0), (8.0, 3.0), (8.0, 7.0), (6.0, 7.0)]Rectangulo2 = [(6.0, 2.0), (9.0, 2.0), (9.0, 8.0), (6.0, 8.0)]

Rectangulo3 = [(12.0, 2.0), (16.0, 2.0), (16.0, 10.0), (12.0, 10.0)]

Figura 4.27: Modificacion de Rectangulos: Rectangulo 4

Rectangulo1 = [(6.0, 3.0), (8.0, 3.0), (8.0, 7.0), (6.0, 7.0)]Rectangulo2 = [(6.0, 2.0), (9.0, 2.0), (9.0, 8.0), (6.0, 8.0)]

Rectangulo3 = [(12.0, 2.0), (16.0, 2.0), (16.0, 10.0), (12.0, 10.0)]

27

Page 34: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.28: Modificacion de Rectangulos: Rectangulo 5

Rectangulo4 = [(0.0, 0.0), (10.0, 0.0), (10.0, 4.0), (0.0, 4.0)]Rectangulo5 = [(0.0, 2.0), (16.0, 2.0), (16.0, 4.0), (0.0, 4.0)]

Figura 4.29: Modificacion de Rectangulos: Rectangulo 6

Rectangulo1 = [(6.0, 3.0), (8.0, 3.0), (8.0, 7.0), (6.0, 7.0)]Rectangulo2 = [(6.0, 2.0), (9.0, 2.0), (9.0, 8.0), (6.0, 8.0)]

Rectangulo3 = [(12.0, 2.0), (16.0, 2.0), (16.0, 10.0), (12.0, 10.0)]Rectangulo4 = [(0.0, 0.0), (10.0, 0.0), (10.0, 4.0), (0.0, 4.0)]

28

Page 35: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.30: Modificacion de Rectangulos: Rectangulo 7

Rectangulo5 = [(0.0, 2.0), (16.0, 2.0), (16.0, 4.0), (0.0, 4.0)]Rectangulo6 = [(0.0, 6.0), (8.0, 6.0), (8.0, 10.0), (0.0, 10.0)]Rectangulo7 = [(0.0, 6.0), (16.0, 6.0), (16.0, 8.0), (0.0, 8.0))]

El ultimo paso de este algoritmo es la construccion de la geometrıa 3D de la cubierta

compuesta, lo cual se logra a partir de la construccion de la cubierta que se desee sobre

cada uno de los rectangulos obtenidos en el paso anterior.

El modelo 3D a construir dependera del tipo de cubierta elegido. En las siguientes

figuras se puede visualizar la planta, el perfil y el alzado de cada tipo de cubierta desarro-

llado. Los calculos para la generacion de cada uno de los tipos se explicaran mas adelante.

Figura 4.31: Gambrel Roof Figura 4.32: Hipped Roof

29

Page 36: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.33: Shed Roof Figura 4.34: Mansard Roof

Figura 4.35: Gable Roof

4.4. PARAMETROS PARA LA CREACION CUBIER-TAS

Como se ha mencionado, el algoritmo de generacion de cubiertas recibe como entrada

una lista de rectangulos, no obstante, recibe otros parametros que permiten personalizar

el aspecto de la cubierta, como la inclinacion o la orientacion.

A continuacion se describen los parametros con que se invoca a la creacion de cada

tipo de cubierta, de esta manera observaremos la versatilidad del algoritmo y las posibili-

dades que ofrece al usuario.

4.4.1. PARAMETROS GABLE ROOFRectangulos: Lista de rectangulos que definen el area a cubrir.

30

Page 37: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Horizontal: Booleano que indica la orientacion que se desea que tengan las cubiertas

simples del tejado. Si es True estaran orientadas a lo largo del eje y, mientras que si

es False estaran orientadas a lo largo del eje x.

Inclinacion: Grados de inclinacion que se desea que tenga la cubierta con respecto

a la horizontal. A mayor inclinacion, mayor altura.

4.4.2. PARAMETROS HIPPED ROOFRectangulos: Lista de rectangulos que definen el area a cubrir.

Inclinacion: Grados de inclinacion que se desea que tenga la cubierta con respecto

a la horizontal. A mayor inclinacion, mayor altura.

4.4.3. PARAMETROS GAMBREL ROOFRectangulos: Lista de rectangulos que definen el area a cubrir

Horizontal: Booleano que indica la orientacion que se desea que tengan las cubiertas

simples del tejado. Si es True estaran orientadas a lo largo del eje y, mientras que si

es False estaran orientadas a lo largo del eje x.

Inclinacion: Grados de inclinacion que se desea que tenga la cubierta con respecto

a la horizontal. A mayor inclinacion, mayor altura.

4.4.4. PARAMETROS MANSARD ROOFRectangulos: Lista de rectangulos que definen el area a cubrir

Horizontal: Booleano que indica la orientacion que se desea que tengan las cubiertas

simples del tejado. Si es True estaran orientadas a lo largo del eje y, mientras que si

es False estaran orientadas a lo largo del eje x.

Inclinacion: Grados de inclinacion que se desea que tenga la cubierta con respecto

a la horizontal.

Altura: Altura que se desa que tenga la cubierta.

4.4.5. PARAMETROS SHED ROOFRectangulos: Lista de rectangulos que definen el area a cubrir

Inclinacion: Grados de inclinacion que se desea que tenga la cubierta con respecto

a la horizontal. A mayor inclinacion, mayor altura.

Orientacion: Numero entero que indica la orientacion que se desea que tengan las

cubiertas simples del tejado. Si es 1 estaran orientadas hacia el sur, si es 2 hacia el

este, si es 3 al norte, y 4 al oeste.

31

Page 38: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

4.5. ALGORITMOS AUXILIARES

4.5.1. ALGORITMO DE CREACION DE CONTORNOEntrada: Lista de rectangulos. Cada rectangulo es una lista de cuatro vertices. Cada

vertice es un par del tipo [x,y], siendo “x” e “y” sus coordenadas en el eje de abscisas y

ordenadas, respectivamente.

Salida: Lista de subcontornos. Cada subcontorno una lista de vertices que definen

el perımetro o parte del perımetro del area que forman los rectangulos recibidos como

parametro de entrada.

El algoritmo de creacion de contorno consiste en la realizacion de un barrido horizon-

tal, de izquierda a derecha, sobre los rectangulos recibidos como argumento. Se halla en

primer lugar las aristas que forman parte del perımetro, descartando las aristas interiores

y, posteriormente, se clasifican estas aristas de contorno dentro de la lista subcontornos,

en la que, conforme se avanza hacia la derecha con el barrido, se construyen los subcon-

tornos que definen el contorno final.

A continuacion se muestra la implementacion del algoritmo escrita en pseudocodigo.

Se incluyen de igual forma algunas funciones auxiliares, unicamente las principales y ne-

cesarias para la comprension del proceso:

Funciones auxiliares:

1. Funcion Aux 1: crear clasificacion coord x(lista rectangulos):

Itera sobre todos los vertices existentes en lista rectangulos y los clasifica en sub-

listas segun su coordenada x. El metodo devuelve una lista con todas las sublistas

construidas. Las sublistas estan ordenadas dentro de la lista padre de menor a mayor

segun la coordenada x que representan.

2. Funcion Aux 2: es punto de contorno(punto):

Devuelve verdadero si el punto se encuentra sobre el perımetro del area de rectangu-

los, y falso si el punto se encuentra en el interior del area de rectangulos. Para deter-

minar la posicion de un punto, se crean cuatro puntos auxiliares alrededor del punto

en cuestion. Si los cuatro puntos se encuentran dentro del area de algun rectangulo,

sera un punto interior, en caso contrario se encontrara en el perımetro.

32

Page 39: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.36: Diferencia entre Punto Interior y Punto de Contorno

Figura 4.37: Diferencia entre Punto Interior y Punto de Contorno: Puntos Auxiliares

3. Funcion Aux 3: ordenar por coord y(vertices nuevos):

Devuelve una lista con los vertices de vertices nuevos ordenados de mayor a menor

segun su coordenada y.

4. Funcion Aux 4: crear aristas(vertices nuevos):

Respentando el orden de la lista de vertices nuevos, toma puntos de dos en dos

y crea aristas (pares de vertices) con ellos, y las anade a la lista a devolver.

33

Page 40: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.38: Formacion de Aristas a partir de Puntos: Paso 1

Figura 4.39: Formacion de Aristas a partir de Puntos: Paso 2

5. Funcion Aux 5: es arista correcta(arista):

Devolvera verdadero si la arista forma parte del perımetro del area y si no contiene

ningun otro vertice en su interior de los definidos en la lista de rectangulos.

6. Funcion Aux 6: buscar enlace(punto)

Realiza una busqueda por todos los subcontornos, verificando si el punto propor-

cionado enlaza con alguno de ellos por el principio o por el final. Devolvera el par

[principio/final, subcontorno de enlace] en caso de encontrarlo, si no, devolvera nu-

lo. El punto enlaza con un subcontorno cuando la nueva arista que se forma, [punto,

final] o [punto, principio], es correcta (Funcion Aux 5).

34

Page 41: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.40: Buscar Enlace para Arista

En la Figura 4.40, observamos la busqueda de enlace para la arista [EXTREMO 0,

EXTREMO 1], con los subcontornos existentes (0 y 1). Si la busqueda se realiza

para el EXTREMO 0 de la arista, se enlazara con el subcontorno 0. Si se realiza

la busqueda para el EXTREMO 1 de la arista, se enlazara con el subcontorno 1.

Supongamos que se busca un enlace para el EXTREMO 0. El vınculo se produce a

traves de la nueva arista, [FIN, EXTREMO 0], con el subcontorno 0, por lo que el

metodo devolvera [FIN,0].

Figura 4.41: Enlace para Arista Encontrado

35

Page 42: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

7. Funcion Aux 7: clean subcontours(subcontornos):

Elimina de subcontornos los vertices repetidos y los vertices innecesarios, sien-

do estos ultimos aquellos que se encuentran contenidos en el interior de una arista

definida por la secuencia de vertices de subcontornos, es decir, no son necesarios

para delimitar el perımetro, pues anaden informacion redundante.

Los puntos innecesarios y repetidos aparecen en la lista subcontornos debido a la

existencia de rectangulos que poseen algun vertice en comun. El algoritmo no con-

trola si al anadir los nuevos vertices, estos ya se encuentran en la lista.

Figura 4.42: Vertices Necesarios e Innecesarios en un Contorno

function CREAR CONTORNO (lista rectangulos)

subcontornos=[] � Lista para subcontornos finales

vertices nuevos =[] � Lista para vertices encontrados con cada paso del barrido

aristas nuevas =[] � Lista para aristas encontradas con cada paso del barrido

clasif x = crear clasificacion coord x (lista rectangulos) � Funcion Aux 1

# Se toman todos los vertices de contorno que tienen la misma coordenada x

for clasif x i de clasif x do � Para cada sublista de la lista clasif x

for punto de clasif x i do � Para cada punto de clasif x i

if es punto de contorno(punto) then � Funcion Aux 2

vertices nuevos.anadir(punto)

end ifend for

# Se ordenan los vertices por su coord. ’y’, y se crean aristas con los mismos

36

Page 43: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

vertices nuevos = ordenar por coord y(vertices nuevos) � Funcion Aux 3

aristas nuevas = crear aristas(vertices nuevos) � Funcion Aux 4

# Se comprueba que las nuevas aristas formadas son correctas, pues aunque sus

# extremos sean puntos de contorno, pueden no ser aristas de contorno. En caso

# de no ser correctas, se anadiran sus extremos como nuevos subcontornos con

# los que enlazar posteriormente.

for arista de aristas nuevas do � Para cada arista de aristas nuevas

if no es arista correcta(arista) then � Funcion Aux 5

subcontornos.anadir([arista[0]])

subcontornos.anadir([arista[1]])

aristas nuevas.borrar(arista)

end ifend for

# Se busca un enlace para cada nueva arista con los subcontornos existentes

# buscar enlace � Funcion Aux 6

for arista de aristas nuevas do � Para cada arista de aristas nuevas

enl1 = buscar enlace(a[0]) � Buscar enlace extremo 0 de arista

if hay enlace then � Si se ha encontrado un enlace [lugar,subc enlace]

if lugar enlace = cabeza subc enlace thensubc enlace.anadir al principio(a[0])

subc enlace.anadir al principio(a[1])

else if lugar enlace = cola subc enlace thensubc enlace.anadir al final(a[0])

subc enlace.anadir al final(a[1])

end ifelse � Si no hay enlace con extremo 0 de arista

enl2 = buscar enlace(a[1]) � Buscar enlace extremo 1 de arista

if hay enlace then � Si se ha encontrado un enlace [lugar,subc enlace]

if lugar enlace = cabeza subc enlace thensubc enlace.anadir al principio(a[1])

subc enlace.anadir al principio(a[0])

else if lugar enlace = cola subc enlace thensubc enlace.anadir al final(a[1])

subc enlace.anadir al final(a[0])

end ifelse � Si no se ha encontrado un enlace, se crea nuevo subcontorno

subcontornos.anadir(arista)

end ifend if

37

Page 44: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

end for

# Comprobar si los subcontornos pueden enlazarse entre sı

i = 0 � Para controlar la iteracion sobre los subcontornos

if hay mas de un subcontorno thenwhile haya mas de un subcontorno & i <longitud(subcontornos) do

# Buscar enlace extremo 0 de subcontorno[i]

enl = buscar enlace(subcontornos[i][0])

if hay enlace then � Si se ha encontrado un enlace [lugar,subc enlace]

if lugar enlace = cabeza subc enlace thensubc enlace.anadir al principio(del reves(subcontornos[i]))

subcontornos.borrar(subcontornos[i])

else if lugar enlace = cola subc enlace thensubc enlace.anadir al final(subcontornos[i])

subcontornos.borrar(subcontornos[i])

end ifelse

# Buscar enlace extremo 1 de subcontorno[i]

enl = buscar enlace(subcontornos[i][final])

if hay enlace thenif lugar enlace = cabeza subc enlace then

subc enlace.anadir al principio(subcontornos[i])

subcontornos.borrar(subcontornos[i])

else if lugar enlace = cola subc enlace thensubc enlace.anadir al final(del reves(subcontornos[i]))

subcontornos.borrar(subcontornos[i])

end ifend if

end ifi = i + 1

end whileend ifvertices nuevos = []

aristas nuevas = []

end forclean subcontours(subcontornos) � Funcion Aux 7

return devolver resultado(subcontornos)

end function

Comportamiento grafico:

En las siguientes figuras se muestra graficamente el comportamiento del algoritmo:

38

Page 45: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Tomamos el primer grupo de coordenadas ‘x’, x=0, y buscamos los puntos de con-

torno. Formamos aristas con los puntos de contorno (las sombreadas). No pueden enla-

zarse con ningun subcontorno anterior (no hay subcontornos aun). Anadimos cada arista

como un nuevo subcontorno. Los contornos no pueden unirse entre sı. Avanzamos a la

siguiente coordenada ‘x’.

Figura 4.43: Construccion de Contorno: Paso 1

Subcontornos = [[[0,0],[0,4]],[[0,6],[0,10]]]

Tomamos el siguiente grupo de coordenadas ‘x’, x=6, y buscamos los puntos de con-

torno. Formamos aristas con los puntos de contorno. La unica arista puede enlazarse con

el subcontorno[0] por el final, usando el extremo 0 de la arista. Se une la arista al subcon-

torno.

Figura 4.44: Construccion de Contorno: Paso 2

39

Page 46: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.45: Construccion de Contorno: Paso 3

Subcontornos = [[[0,0],[0,4],[6,4],[6,6]],[[0,6],[0,10]]]

Se pueden unir los dos subcontornos entre sı. El subcontorno 1 enlaza con el 0, por el

principio.

Figura 4.46: Construccion de Contorno: Paso 4

Subcontornos = [[[0,0],[0,4],[6,4],[6,6],[0,6],[0,10]]]

Tomamos el siguiente grupo de coordenadas ‘x’, x=8, y buscamos los puntos de contorno.

Formamos aristas con los puntos de contorno. La unica arista puede enlazarse con el

subcontorno[0] (el unico que hay) por el final, usando el extremo 1 de la arista. Se une la

arista al subcontorno.

40

Page 47: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.47: Construccion de Contorno: Paso 5

Figura 4.48: Construccion de Contorno: Paso 6

Subcontornos = [[[8,8],[8,10],[0,0],[0,4],[6,4],[6,6],[0,6],[0,10]]]

Tomamos el siguiente grupo de coordenadas ‘x’, x=9, y buscamos los puntos de con-

torno. Formamos aristas con los puntos de contorno. La unica arista hallada no puede

enlazarse con ningun subcontorno, de modo que se anade como un nuevo subcontorno.

41

Page 48: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.49: Construccion de Contorno: Paso 7

Subcontornos = [[[8,8],[8,10],[0,0],[0,4],[6,4],[6,6],[0,6],[0,10]],[[9,4],[9,6]]]

Tomamos el siguiente grupo de coordenadas ‘x’, x=10, y buscamos los puntos de con-

torno. Formamos aristas con los puntos de contorno. Hay dos aristas nuevas, una de las

cuales tiene sus dos extremos iguales (forma un punto). Intentamos unir cada una de la

aristas con los subcontornos.

Figura 4.50: Construccion de Contorno: Paso 8

Continuamos con el proceso hasta finalizar con la construccion del contorno.

42

Page 49: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.51: Construccion de Contorno: Paso 9

Figura 4.52: Construccion de Contorno: Paso 10

4.5.2. ALGORITMO DE CREACION DE RECTANGULOSEntrada: Contorno, lista de vertices que definen el perımetro de un area.

Salida: Lista de rectangulos, tantos como el numero de subdivisiones rectangulares

en que queda seccionada el area recibida como argumento tras la aplicacion del algorit-

mo. Cada vertice es un par del tipo [x,y], siendo “x” e “y” sus coordenadas en el eje de

abscisas y ordenadas, respectivamente.

43

Page 50: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

El algoritmo de creacion de rectangulos consiste en la division del area (definida por

el contorno y pasada como argumento) en secciones rectangulares, que surgen al trazar

una vertical y una horizontal sobre cada uno de los vertices que constituyen el perımetro

de dicha area.

Figura 4.53: Trazo de una Diagonal por un Vertice de Contorno

Figura 4.54: Trazo de las Diagonales por los Vertices de Contorno

A continuacion se muestra la implementacion del algoritmo escrita en pseudocodigo.

Se incluyen de igual forma algunas funciones auxiliares, unicamente las principales y ne-

cesarias para la comprension del proceso:

Funciones auxiliares:

1. Funcion Aux 1: obtener x e y coordenadas(contorno):

44

Page 51: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Itera sobre todos los vertices de la lista contorno recibida como argumento y crea

dos listas. La primera lista contendra todas las coordenadas ’x’ distintas encontra-

das, y la segunda, analogamente, contendra todas las coordenadas ’y’ distintas.

2. Funcion Aux 2: ordenar(lista):

Devolvera una lista con los elementos de la lista recibida como argumento orde-

nados de menor a mayor.

3. Funcion Aux 3: rectangulo en contorno(rect,contorno):

Devolvera True si el area del rectangulo se encuentra contenida en el area definida

por el contorno recibido como parametro. En caso contrario devolvera False.

Figura 4.55: Diferencia Rectangulo Contenido y No Contenido en Contorno

4. Funcion Aux 4: crear rectangulo(x1,y1,x2,y2):

Devuelve el rectangulo definido por los lımites recibidos como parametros. x1 e

y1 definen la esquina inferior izquierda del rectangulo, mientras que x2 e y2 de-

finen la superior derecha. El rectangulo devuelto sera una lista de cuatro vertices.

Cada vertice es un par del tipo [x,y], siendo “x” e “y” sus coordenadas en el eje de

abscisas y ordenadas, respectivamente.

45

Page 52: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

function CREAR RECTANGULOS(contorno):

toReturn=[] � Lista para los rectangulos finales a devolver

[xlista,ylista] = obtener x e y coordenadas(contorno) � Funcion Auxiliar 1

xlista = ordenar(xlista) � Funcion Auxiliar 2

ylista = ordenar(ylista)

i = 0 � Para controlar la iteracion sobre xlista

j = 0 � Para controlar la iteracion sobre ylista

while (j <longitud(ylista)-1): dowhile (i <longitud(xlista)-1): do

# crear rectangulo � Funcion Auxiliar 4

rect = crear rectangulo(xlista[i],ylista[j],xlista[i+1],ylista[j+1])

if rectangulo en contorno(rect,contorno) then � Funcion Auxiliar 3

toReturn.anadir(rect)

end ifi=i+1

end whilej=j+1

i=0

end whiledevolver toReturn

end function

Comportamiento grafico:

En las siguientes figuras se muestra graficamente el comportamiento del algoritmo:

Figura 4.56: Creacion de Rectangulos: Paso 1

46

Page 53: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.57: Creacion de Rectangulos: Paso 2

Figura 4.58: Creacion de Rectangulos: Paso 3

Figura 4.59: Creacion de Rectangulos: Paso 4

47

Page 54: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.60: Creacion de Rectangulos: Paso 5

Figura 4.61: Creacion de Rectangulos: Paso 6

Los rectangulos con una diagonal en su interior, por no encontrarse dentro del con-

torno, no se anaden a la lista de rectangulos a devolver, son descartados .

4.5.3. ALGORITMO DE EXPANSION DE RECTANGULOSEntrada: Lista de rectangulos. Cada rectangulo es una lista de cuatro vertices. Cada

vertice es un par del tipo [x,y], siendo “x” e “y” sus coordenadas en el eje de abscisas y

ordenadas, respectivamente.

Salida: Lista de rectangulos; los resultantes tras la aplicacion del algoritmo sobre la

lista recibida como argumento. Cada vertice es un par del tipo [x,y], siendo “x” e “y” sus

coordenadas en el eje de abscisas y ordenadas, respectivamente.

El algoritmo de expansion de rectangulos consiste en la aplicacion del proceso de ex-

pansion de rectangulos sobre cada uno de los rectangulos recibidos como argumento. La

expansion debe realizarse en las cuatro direcciones (arriba, abajo, derecha e izquierda)

48

Page 55: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

mientras sea posible. De igual forma, estas expansiones deben realizarse secuencialmen-

te en todos los ordenes posibles, es decir, en todas las permutaciones posibles de los

elementos {arriba, abajo, derecha, izquierda}. Al ser cuatro elementos, obtenemos 4! po-

sibilidades de permutacion. La expansion de cada rectangulo debe realizarse 4! veces, una

con cada tipo de permutacion, con el fin de obtener todos los rectangulos necesarios para

la creacion de la cubierta.

En las siguientes Figuras se podran visualizar los diferentes resultados que se obtienen

al cambiar el orden de las direcciones en el proceso de expansion. Pondremos unicamente

4 ejemplos de permutaciones, aunque, como hemos dicho, existen 24 (4!).

Figura 4.62: Expansion Rectangulo: Permutacion {Abajo, Derecha, Arriba, Izquierda}

Figura 4.63: Expansion Rectangulo: Permutacion {Arriba, Izquierda, Abajo, Derecha}

Figura 4.64: Expansion Rectangulo: Permutacion {Izquierda, Abajo, Derecha, Arriba}

49

Page 56: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.65: Expansion Rectangulo: Permutacion {Izquierda, Arriba, Derecha, Abajo}

A continuacion se muestra la implementacion del algoritmo escrita en pseudocodigo.

Se incluyen de igual forma algunas funciones auxiliares, unicamente las principales y ne-

cesarias para la comprension del proceso:

Funciones auxiliares:

1. Funcion Aux 1: extender rectangulos eje y(lista rectangulos):

Expande todos los rectangulos de lista rectangulos a lo largo del eje y, es decir,

hacia arriba y hacia abajo.

Figura 4.66: Expansion de Rectangulos a lo largo del eje y

2. Funcion Aux 2: extender rectangulos eje x(lista rectangulos):

Expande todos los rectangulos de lista rectangulos a lo largo del eje x, es decir,

hacia la derecha y hacia la izquierda.

50

Page 57: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.67: Expansion de Rectangulos a lo largo del eje x

3. Funcion Aux 3: extender(direccion,rect, rectangulos lista eje x/y):

Extiende el rectangulo rect todo lo posible en la direccion proporcionada. Utili-

zara los rectangulos expandidos con la Funcion Aux 1 si direccion = derecha o

izquierda, y los expandidos con la Funcion Aux 2 si direccion = arriba o abajo

El proceso de expansion se encuentra explicado con mayor detalle en el apartado

4.3.2. de este documento.

4. Funcion Aux 4: buscar rectangulo direccion(rect, rectangulos lista eje x/y, direc-

cion):

Busca un rectangulo colindante a rect en la direccion proporcionada, que pueda

ser utilizado para la expansion, es decir, debe ser mas ancho o igual de ancho que

rect en la direccion de expansion.

Figura 4.68: Expansion de Rectangulos Posible y No Posible

function EXTENDER(direccion,rect, rectangulos lista eje):

# buscar rectangulo direccion - Funcion Aux 4

search r=buscar rectangulo direccion(rect, rectangulos lista eje, direccion)

while se haya encontrado un rectangulo para expansion do

51

Page 58: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

modificar rectangulo con nuevos lımites de search r

search r= buscar rectangulo direccion(rect, rectangulos lista eje, direccion)

end whiledevolver rectangulo expandido

end function

function EXPANDIR RECTANGULOS(lista rectangulos):

# rectangulos lista eje x - Funcion Aux 1

rectangulos lista eje x = extender rectangulos eje x(lista rectangulos)

# rectangulos lista eje y - Funcion Aux 2

rectangulos lista eje y = extender rectangulos eje y(lista rectangulos)

toReturn = []

for rect de lista rectangulos do:

for permutacion de {arriba,abajo,derecha,izquierda} do:

for direccion de permutacion doif direccion es arriba o abajo then

# extender - Funcion Aux 3

rect = extender(direccion,rect, rectangulos lista eje x)

else if direccion es izquierda o derecha thenrect = extender(direccion,rect, rectangulos lista eje y)

end ifend for

end forend for

end function

4.5.4. ALGORITMO DE MODIFICACION DE RECTANGULOSEntrada: Lista de rectangulos. Cada rectangulo es una lista de cuatro vertices. Cada

vertice es un par del tipo [x,y], siendo “x” e “y” sus coordenadas en el eje de abscisas y

ordenadas, respectivamente.

Salida: Lista de rectangulos que contendra los modificados (tras la aplicacion del al-

goritmo) de los rectangulos de la lista recibida como argumento. Cada rectangulo devuelto

sera una lista de cuatro vertices. Cada vertice es un par del tipo [x,y], siendo “x” e “y” sus

coordenadas en el eje de abscisas y ordenadas, respectivamente.

El algoritmo de modificacion de rectangulos consiste en la aplicacion del proceso de

modificacion de rectangulos sobre cada uno de los rectangulos recibidos como argumen-

to. Este proceso de modificacion se realiza con el objetivo de evitar la generacion de geo-

metrıa innecesaria en las cubiertas, ası como de mejorar el aspecto y logica de las mismas.

52

Page 59: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Las circunstancias bajo las que debe modificarse un rectangulo se encuentran explica-

das con mayor detalle en el apartado 4.3.2. de este documento.

A continuacion se muestra la implementacion del algoritmo escrita en pseudocodigo.

Se incluyen de igual forma algunas funciones auxiliares, unicamente las principales y ne-

cesarias para la comprension del proceso:

Funciones auxiliares:

1. Funcion Aux 1: clasificar(lista rectangulos):

Itera sobre todos los rectangulos de lista rectangulos. Si rectangulo.largo <rectangu-

lo.ancho, lo anadira a la lista de rectangulos verticales. Si rectangulo.largo >rectangu-

lo.ancho, lo anadira a la lista de rectangulos horizontales. Si rectangulo.largo =

rectangulo.ancho, lo anadira a la lista de rectangulos iguales. Se devuelve una lista

con de las tres listas creadas

Figura 4.69: Rectangulos Verticales, Horizontales e Iguales

2. Funcion Aux 2: modif rect horizontal(rect, inclinacion, lista verticales + lista iguales):

Busca los rectangulos con los que rect interesecta tanto por la izquierda como por la

derecha, si los hay. En el caso de encontrar una interseccion, reduce el area de rect

la mitad del largo del rectangulo con el que intersecta. Puede ocurrir que se reduzca

el area por la derecha, por la izquierda, por ambas, o que no se reduzca. El metodo

devuelve las coordenadas del nuevo rectangulo.

Para conseguir un resultado arquitectonicamente correcto, se reducira el area de rect

unicamente cuando la altura del rectangulo con el que intersecta es mayor que la

altura de rect.

53

Page 60: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.70: Interseccion por la Derecha

Figura 4.71: Interseccion por la Derecha Resuelta

Figura 4.72: Interseccion por la Izquierda

54

Page 61: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.73: Interseccion por la Izquierda Resuelta

3. Funcion Aux 3: modif rect vertical(rect, inclinacion, lista horizontales + lista iguales):

Busca los rectangulos con los que rect intersecta tanto por arriba como por aba-

jo, si los hay. En el caso de encontrar una interseccion, reduce el area de rect la

mitad del ancho del rectangulo con el que intersecta. Puede ocurrir que se reduzca

el area por arriba por abajo, por ambos, o que no se reduzca. El metodo devuelve

las coordenadas del nuevo rectangulo.

Para conseguir un resultado arquitectonicamente correcto, se reducira el area de rect

unicamente cuando la altura del rectangulo con el que intersecta es mayor que la

altura de rect.

Figura 4.74: Interseccion por la Arriba

55

Page 62: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.75: Interseccion por la Arriba Resuelta

Figura 4.76: Interseccion por la Abajo

Figura 4.77: Interseccion por la Abajo Resuelta

56

Page 63: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

function MODIFICAR RECTANGULOS(lista rectangulos,horizontal,inclinacion)

toReturn = [] � Lista para los rectangulos finales a devolver

# clasificar - Funcion Aux 1

[lista verticales,lista horizontales,lista iguales] = clasificar(lista rectangulos)

if horizontal = True then � Modificar los rectangulos horizontales

for rect en lista horizontales do � Para cada rectangulo horizontal

# modif rect horizontal - Funcion Aux 2

# Si se modifican los horizontales, se encontrara intereseccion con los

# verticales y los iguales

rect = modif rect horizontal(rect, inclinacion, lista verticales + lista iguales)

toReturn.anadir(rect)

end fortoReturn = toReturn + lista verticales + lista iguales

else � Modificar los rectangulos verticales

for rect en lista verticales do � Para cada rectangulo vertical

# modif rect vertical - Funcion Aux 3

# Si se modifican los horizontales, se encontrara intereseccion con los

# horizontales y los iguales

rect = modif rect vertical(rect, inclinacion, lista horizontales + lista iguales)

toReturn.anadir(rect)

end fortoReturn = toReturn + lista horizontales + lista iguales

end ifdevolver toReturn

end function

4.5.5. CREACION DE GEOMETRIA 3D

4.5.5.1. GEOMETRIA 3D GABLE ROOF

function CALCULAR VERTICES 1(largo,ancho,inclinacion,base,p1,p2,p3,p4)

altura = calcular altura gable roof(largo,inclinacion)

punto medio 1 = punto medio [p1,p2] y subirlo altura

punto medio 2 = punto medio [p3,p4] y subirlo altura

vertices = base + [punto medio 1] + [punto medio 2]

devolver vertices

end function

function CREAR CUBIERTA SIMPLE GABLE ROOF(rectangulo, horizontal, inclinacion)

[largo,ancho] = calcular dimensiones rectangulo(rectangulo)

base = vertices de rectangulo

if largo <ancho then

57

Page 64: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

vertices = calcular vertices 1(largo,ancho,inclinacion,base,r[0],r[1],r[2],r[3])

polıgonos = [[0,1,4],[1,2,5,4],[2,3,5],[0,4,5,3]]

else if largo >ancho thenvertices = calcular vertices 1(largo,ancho,inclinacion,base,r[3],r[0],r[1],r[2])

polıgonos = [[0,1,5,4],[1,2,5],[2,3,4,5],[0,4,3]]

else � largo = ancho

if horizontal then: � Poner rectangulos iguales orientacion elegida

vertices = calcular vertices 1(largo,ancho,inclinacion,base,r[0],r[1],r[2],r[3])

polıgonos = [[0,1,4],[1,2,5,4],[2,3,5],[0,4,5,3]]

elsevertices = calcular vertices 1(largo,ancho,inclinacion,base,r[3],r[0],r[1],r[2])

polıgonos = [[0,1,5,4],[1,2,5],[2,3,4,5],[0,4,3]]

end ifend ifdevolver [vertices,polıgonos]

end function

Figura 4.78: Construccion Geometrıa 3D Gable Roof

4.5.5.2. GEOMETRIA 3D HIPPED ROOF

function CALCULAR VERTICES 2(largo,ancho,inclinacion,base,p1,p2,p3,p4)

altura = calcular altura gable roof(largo,inclinacion,eje)

desplazamiento = desplazamiento arista superior(largo)

punto medio 1 = punto medio [p1,p2] y subirlo altura

punto medio 2 = punto medio [p3,p4] y subirlo altura

if eje = y thendesplazar punto medio 1 +desplazamiento sobre eje y

desplazar punto medio 2 -desplazamiento sobre eje y

else if eje = x thendesplazar punto medio 1 +desplazamiento sobre eje x

58

Page 65: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

desplazar punto medio 2 -desplazamiento sobre eje x

end ifvertices = base + [punto medio 1] + [punto medio 2]

devolver vertices

end function

function CREAR CUBIERTA SIMPLE HIPPED ROOF(rectangulo, inclinacion)

[largo,ancho] = calcular dimensiones rectangulo(rectangulo)

base = vertices de rectangulo

if largo <ancho thenvertices = calcular vertices 2(largo,ancho,inclinacion,base,r[0],r[1],r[2],r[3])

polıgonos = [[0,1,4],[1,2,5,4],[2,3,5],[0,4,5,3]]

else if largo >ancho thenvertices = calcular vertices 2(largo,ancho,inclinacion,base,r[3],r[0],r[1],r[2])

polıgonos = [[0,1,5,4],[1,2,5],[2,3,4,5],[0,4,3]]

end ifdevolver [vertices,polıgonos]

end function

Figura 4.79: Construccion Geometrıa 3D Hipped Roof

4.5.5.3. GEOMETRIA 3D MANSARD ROOF

function CREAR CUBIERTA SIMPLE MANSARD ROOF(rectangulo,altura,horizontal,inclinacion)

[largo,ancho] = calcular dimensiones rectangulo(rectangulo)

desplazamiento interior = altura / tan(inclinacion)

base = vertices de rectangulo

if largo <ancho thennuevos vertices = desplazar ”desplazamiento interior”vertices rectangulo

59

Page 66: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

hacia el interior del rectangulo y subirlos altura

polıgonos = [[0,4,7,3],[4,5,6,7],[1,2,6,5],[0,1,5,4],[2,3,7,6]]

else if largo >ancho thennuevos vertices = desplazar ”desplazamiento interior”vertices rectangulo

hacia el interior del rectangulo y subirlos altura

polıgonos = [[0,1,5,4],[4,5,6,7],[2,3,7,6],[1,2,6,5],[3,0,4,7]]

elseif horizontal then: � Poner rectangulos iguales orientacion elegida

nuevos vertices = desplazar ”desplazamiento interior”vertices rectangulo

hacia el interior del rectangulo y subirlos altura

polıgonos = [[0,4,7,3],[4,5,6,7],[1,2,6,5],[0,1,5,4],[2,3,7,6]]

elsenuevos vertices = desplazar ”desplazamiento interior”vertices rectangulo

hacia el interior del rectangulo y subirlos altura

polıgonos = [[0,1,5,4],[4,5,6,7],[2,3,7,6],[1,2,6,5],[3,0,4,7]]

end ifend ifvertices = vertices rectangulo + nuevos vertices

devolver [vertices,polıgonos]

end function

Figura 4.80: Construccion Geometrıa 3D Mansard Roof

4.5.5.4. GEOMETRIA 3D GAMBREL ROOF

function CALCULAR VERTICES 3(largo,ancho,inclinacion,base,p1,p2,p3,p4)

altura = calcular altura gambrel roof(largo,inclinacion)

punto medio 1 = punto medio [p1,p2] y subirlo altura

punto medio 2 = punto medio [p3,p4] y subirlo altura

60

Page 67: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

vertices = base + [punto medio 1] + [punto medio 2]

devolver vertices

end function

function CREAR CUBIERTA SIMPLE GAMBREL ROOF(rectangulo,horizontal,inclinacion)

[largo,ancho] = calcular dimensiones rectangulo(rectangulo)

base = vertices de rectangulo

if largo <ancho thendesplazamiento x = largo/2.5

desplazamiento y = altura/2

vertices = calcular vertices 1(largo,ancho,inclinacion,base,r[0],r[1],r[2],r[3])

nuevos vertices = desplazar ’desplazamiento x’ y ’desplazamiento y’ los

vertices rectangulo hacia el interior del rectangulo y subirlos altura

polıgonos = [[1,2,7,6],[6,7,5,4],[0,8,9,3],[8,4,5,9],[0,1,6,4,8],[3,2,7,5,9]]

else if largo >ancho thendesplazamiento x = ancho/2.5

desplazamiento y = altura/2

vertices = calcular vertices 1(largo,ancho,inclinacion,base,r[3],r[0],r[1],r[2])

nuevos vertices = desplazar ’desplazamiento x’ y ’desplazamiento y’ los

vertices rectangulo hacia el interior del rectangulo y subirlos altura

polıgonos = [[0,1,8,9],[8,4,5,9],[4,6,7,5],[6,2,3,7],[1,2,6,4,8],[0,3,7,5,9]]

elseif horizontal then: � Modificar los rectangulos horizontales

desplazamiento x = largo/2.5

desplazamiento y = altura/2

vertices = calcular vertices 1(largo,ancho,inclinacion,base,r[0],r[1],r[2],r[3])

nuevos vertices = desplazar ’desplazamiento x’ y ’desplazamiento y’ los

vertices rectangulo hacia el interior del rectangulo y subirlos altura

polıgonos = [[1,2,7,6],[6,7,5,4],[0,8,9,3],[8,4,5,9],[0,1,6,4,8],[3,2,7,5,9]]

elsedesplazamiento x = ancho/2.5

desplazamiento y = altura/2

vertices = calcular vertices 1(largo,ancho,inclinacion,base,r[3],r[0],r[1],r[2])

nuevos vertices = desplazar ’desplazamiento x’ y ’desplazamiento y’ los

vertices rectangulo hacia el interior del rectangulo y subirlos altura

polıgonos = [[0,1,8,9],[8,4,5,9],[4,6,7,5],[6,2,3,7],[1,2,6,4,8],[0,3,7,5,9]]

end ifend ifvertices = vertices rectangulo + nuevos vertices

devolver [vertices,polıgonos]

end function

61

Page 68: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.81: Construccion Geometrıa 3D Gambrel Roof

4.5.5.5. GEOMETRIA 3D SHED ROOF

function CREAR CUBIERTA SIMPLE SHED ROOF(rectangulo,orientacion,inclinacion)

[largo,ancho] = calcular dimensiones rectangulo(rectangulo)

base = vertices de rectangulo

if orientacion = 0 o orientacion = 2 then altura = calcular altura shed roof(ancho,inclinacion)

elsealtura = calcular altura shed roof(largo,inclinacion)

end ifpunto superior 1 = segun orientacion, subir copia de vertice de rectangulo a altura

punto superior 2 = segun orientacion, subir copia de vertice de rectangulo a altura

vertices = base + [punto superior 1] + [punto superior 2]

if orientacion == 0 then polıgonos = [[0,1,2,3],[0,1,4,5],[1,2,4],[2,3,5,4],[0,5,3]]

else if orientacion == 1 then polıgonos = [[0,1,2,3],[0,1,5],[1,2,4,5],[2,3,5],[0,3,4,5]]

else if orientacion == 2 then polıgonos = [[0,1,2,3],[0,1,5,4],[1,2,5],[2,3,4,5],[0,4,3]]

elsepolıgonos = [[0,1,2,3],[0,1,4],[1,2,5,4],[2,3,5],[0,4,5,3]]

end ifdevolver [vertices,polıgonos]

end function

62

Page 69: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 4.82: Construccion Geometrıa 3D Shed Roof

63

Page 70: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

5 | RESULTADOS Y CONCLUSIONES

5.1. RESULTADOS GABLE ROOF

Inclinacion: 30 grados - Orientacion: Eje x

Figura 5.1: Gable Roof Vista 1

Figura 5.2: Gable Roof Vista 2

64

Page 71: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 5.3: Gable Roof Vista 3

Inclinacion: 50 grados - Orientacion: Eje y

Figura 5.4: Gable Roof Vista 4

Figura 5.5: Gable Roof Vista 5

65

Page 72: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 5.6: Gable Roof Vista 6

5.2. RESULTADOS HIPPED ROOF

Inclinacion: 30 grados

Figura 5.7: Hipped Roof Vista 1

Figura 5.8: Hipped Roof Vista 2

66

Page 73: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 5.9: Hipped Roof Vista 3

Inclinacion: 45 grados

Figura 5.10: Hipped Roof Vista 4

Figura 5.11: Hipped Roof Vista 5

67

Page 74: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 5.12: Hipped Roof Vista 6

5.3. RESULTADOS MANSARD ROOF

Inclinacion: 45 grados - Altura: 0.5 m

Figura 5.13: Mansard Roof Vista 1

Figura 5.14: Mansard Roof Vista 2

68

Page 75: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 5.15: Mansard Roof Vista 3

Inclinacion: 45 grados - Altura: 0.5 m

Figura 5.16: Mansard Roof Vista 4

Figura 5.17: Mansard Roof Vista 5

69

Page 76: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 5.18: Mansard Roof Vista 6

5.4. RESULTADOS SHED ROOF

Inclinacion: 15 grados - Orientacion: Norte

Figura 5.19: Shed Roof Vista 1

Figura 5.20: Shed Roof Vista 2

70

Page 77: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Figura 5.21: Shed Roof Vista 3

Inclinacion: 35 grados - Orientacion: Norte

Figura 5.22: Shed Roof Vista 4

Figura 5.23: Shed Roof Vista 5

71

Page 78: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

5.5. RESULTADOS GAMBREL ROOF

Inclinacion: 45 grados - Orientacion: Eje x

Figura 5.24: Gambrel Roof Vista 1

Figura 5.25: Gambrel Roof Vista 2

Figura 5.26: Gambrel Roof Vista 3

72

Page 79: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Inclinacion: 45 grados - Orientacion: Eje y

Figura 5.27: Gambrel Roof Vista 4

Figura 5.28: Gambrel Roof Vista 5

Figura 5.29: Gambrel Roof Vista 6

73

Page 80: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

5.6. CONCLUSIONESLa realizacion de este Trabajo de Fin de Grado ha resultado ser una experiencia muy

positiva. He adquirido conocimientos ligados a mi campo de interes y habilidades que me

ayudaran a asentarme en el mundo del modelado 3D.

El desarrollo del trabajo se ha llevado de forma tranquila y eficiente, proporcionando-

me a su vez ilusion y entusiasmo por avanzar en mis tareas. El trato que recibo de Lurtis

Rules y la experiencia vivida no puede ser mejor.

La realizacion de estas practicas me han supuesto, en el del ambito de conocimientos

informaticos:

Aprendizaje de un nuevo lenguaje de programacion: Python.

Mejora de las habilidades para la programacion.

Capacidad para establecer prioridades a la hora de implementar unas funcionalida-

des u otras.

Importancia de la documentacion.

Importancia de la refactorizacion.

Aumento del tiempo dedicado al planeamiento y analisis de problemas.

Mejora en el manejo las herramientas basicas de Maya.

Mejora en el conocimiento sobre el funcionamiento y utilizacion de la API de Maya

para Python.

Adquisicion de nuevos conceptos sobre el Modelado 3D.

En el ambito de conocimientos matematicos, el dibujo tecnico y la arquitectura:

Ejercitacion intensa de la vision espacial.

Practica con el calculo matematico, especialmente con la trigonometrıa.

Adquisicion de conocimientos sobre el dimensionado y medidas de las cubiertas de

una vivienda.

En el ambito personal:

Capacidad de adaptacion.

Capacidad de identificacion de problemas.

74

Page 81: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Capacidad de resolucion de problemas.

Capacidad de toma de decisiones.

75

Page 82: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

6 | BIBLIOGRAFIA

[1]Adobe.com. (2016). Funciones de Fuse CC (Preview) — Usa Adobe Fuse CC (Pre-

view). [online] Disponible: http://www.adobe.com/es/products/fuse/features.html [Acce-

so 14 de abril de 2016].

[2]George Kelly, Hugh McCabe () Citygen— An Interactive System for Procedu-

ral City Generation [online]. Disponible: http://www.citygen.net/files/citygen gdtw07.pdf

[Acceso 29 de abril de 2016].

[3]Forum.unity3d.com. (2016). BuildR - Create buildings within Unity — Unity Com-

munity. [online] Disponible: http://forum.unity3d.com/threads/buildr-create-buildings-within-

unity.174456/ [Acceso 14 de abril 2016].

[4]Docs.autodesk.com. (2016). Autodesk Maya API Documentation. [online] Availa-

ble at: http://docs.autodesk.com/MAYAUL/2014/ENU/Maya-API-Documentation/index.html

[Accessed 10 Feb. 2016].

[5]Autodesk.es. (2016). Familia Revit — Programas BIM — Autodesk. [online] Dis-

ponible: http://www.autodesk.es/products/revit-family/overview [Acceso 14 de abril 2016].

[6]Makehuman.org. (2016). MakeHuman — Open source tool for making 3d charac-

ters. [online] Disponible: http://www.makehuman.org/ [Acceso 14 de abril 2016].

[7]Sciencedirect.com. (2016). State of research in automatic as-built modelling. [onli-

ne] Disponible: http://www.sciencedirect.com/science/article/pii/S1474034615000026 [Ac-

ceso 14 de abril de 2016].

[8]Bentley.com. (2016). 3D Reality Modeling Software - ContextCapture. [online]

Disponible: https://www.bentley.com/en/products/product-line/reality-modeling-software

/contextcapture [Acceso 6 de mayo de 2016].

[9]Teboul, O. (2016). Olivier Teboul’s homepage. [online] Vision.mas.ecp.fr. Disponi-

ble: http://vision.mas.ecp.fr/Personnel/teboul/software.php [Acceso 10 de febrero 2016].

[10]Pypi.python.org. (2016). MeshPy 2014.1 : Python Package Index. [online] Dispo-

nible: https://pypi.python.org/pypi/MeshPy [Acceso 14 de febrero 2016].

76

Page 83: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

[11]Docs.sympy.org. (2016). Geometry Module — SymPy 0.7.2 documentation. [on-

line] Disponible: http://docs.sympy.org/0.7.2/modules/geometry.html [Acceso 13 de ma-

yo de 2016].

[12]Web3d.org. (2016). Automatic Construction of 3D Cities — Web3D Consortium.

[online] Disponible: http://www.web3d.org/case-studies/automatic-construction-3d-cities/automatic-

construction-3d-cities [Acceso 14 de mayo de 2016].

77

Page 84: Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/43536/1/TFG_CRISTINA_ARNAIZ_PEREZVILLAMIL.pdf · Esquema cubierta House Builder simple antes algoritmo ..... 5 2.5. ... Shed

Este documento esta firmado porFirmante CN=tfgm.fi.upm.es, OU=CCFI, O=Facultad de Informatica - UPM,

C=ES

Fecha/Hora Mon Jun 06 23:19:04 CEST 2016

Emisor delCertificado

[email protected], CN=CA Facultad deInformatica, O=Facultad de Informatica - UPM, C=ES

Numero de Serie 630

Metodo urn:adobe.com:Adobe.PPKLite:adbe.pkcs7.sha1 (AdobeSignature)