|
|
|
|
1
|
|
1
|
|
2
|
-#Recursión - Figuras Recursivas
|
|
|
|
|
2
|
+# Recursión - Figuras Recursivas
|
3
|
|
3
|
|
4
|
![main1.jpg](images/main1.jpg)
|
4
|
![main1.jpg](images/main1.jpg)
|
5
|
![main2.jpg](images/main2.jpg)
|
5
|
![main2.jpg](images/main2.jpg)
|
6
|
![main3.png](images/main3.png)
|
6
|
![main3.png](images/main3.png)
|
7
|
|
7
|
|
|
|
8
|
+[Verano 2016 - Ive]
|
8
|
|
9
|
|
9
|
Una técnica muy utilizada en programación es la *recursión*. Con esta técnica se resuelven problemas resolviendo un problema similar pero para casos más pequeños. Podemos construir conjuntos de objetos o procesos utilizando *reglas recursivas* y *valores iniciales*. Las *funciones recursivas* son funciones que se auto-invocan, utilizando cada vez conjuntos o elementos más pequeños, hasta llegar a un punto en donde se utiliza el valor inicial en lugar de auto-invocarse. Los fractales son un ejemplo de figuras que se pueden crear usando recursión. En esta experiencia de laboratorio practicarás la definición e implementación de funciones recursivas para dibujar formas auto-similares (fractales).
|
10
|
Una técnica muy utilizada en programación es la *recursión*. Con esta técnica se resuelven problemas resolviendo un problema similar pero para casos más pequeños. Podemos construir conjuntos de objetos o procesos utilizando *reglas recursivas* y *valores iniciales*. Las *funciones recursivas* son funciones que se auto-invocan, utilizando cada vez conjuntos o elementos más pequeños, hasta llegar a un punto en donde se utiliza el valor inicial en lugar de auto-invocarse. Los fractales son un ejemplo de figuras que se pueden crear usando recursión. En esta experiencia de laboratorio practicarás la definición e implementación de funciones recursivas para dibujar formas auto-similares (fractales).
|
10
|
|
11
|
|
11
|
Los ejercicios de esta experiencia de laboratorio son una adaptación de https://sites.google.com/a/wellesley.edu/wellesley-cs118-spring13/lectures-labs/lab-6-turtle-recursion.
|
12
|
Los ejercicios de esta experiencia de laboratorio son una adaptación de https://sites.google.com/a/wellesley.edu/wellesley-cs118-spring13/lectures-labs/lab-6-turtle-recursion.
|
12
|
|
13
|
|
13
|
|
14
|
|
14
|
-##Objetivos:
|
|
|
|
|
15
|
+## Objetivos:
|
15
|
|
16
|
|
16
|
1. Practicar el definir e implementar funciones recursivas.
|
17
|
1. Practicar el definir e implementar funciones recursivas.
|
17
|
|
18
|
|
18
|
|
19
|
|
19
|
-##Pre-Lab:
|
|
|
|
|
20
|
+## Pre-Lab:
|
20
|
|
21
|
|
21
|
Antes de llegar al laboratorio debes haber:
|
22
|
Antes de llegar al laboratorio debes haber:
|
22
|
|
23
|
|
|
|
|
|
92
|
|
93
|
|
93
|
En la experiencia de laboratorio de hoy implementarás funciones recursivas para producir fractales.
|
94
|
En la experiencia de laboratorio de hoy implementarás funciones recursivas para producir fractales.
|
94
|
|
95
|
|
95
|
-###Ejercicio 1: Copo de nieve
|
|
|
|
|
96
|
+### Ejercicio 1 - Copo de nieve
|
96
|
|
97
|
|
97
|
Una de las figuras fractales más simples es la figura de un copo de nieve. Esta figura se forma a partir de un triángulo isósceles, sustituyendo el segmento del tercio del medio de cada lado por una "V" invertida. La medida de los lados de la "V" es igual a la medida del segmento que sustituye. Usaremos el copo de nieve para ilustrar el proceso de recursión.
|
98
|
Una de las figuras fractales más simples es la figura de un copo de nieve. Esta figura se forma a partir de un triángulo isósceles, sustituyendo el segmento del tercio del medio de cada lado por una "V" invertida. La medida de los lados de la "V" es igual a la medida del segmento que sustituye. Usaremos el copo de nieve para ilustrar el proceso de recursión.
|
98
|
|
99
|
|
|
|
|
|
104
|
|
105
|
|
105
|
---
|
106
|
---
|
106
|
|
107
|
|
107
|
-####Instrucciones
|
|
|
|
|
108
|
+#### Instrucciones:
|
|
|
109
|
+
|
|
|
110
|
+1. Carga a `QtCreator` el proyecto `RecursiveShapes`. Hay dos maneras de hacer esto:
|
|
|
111
|
+
|
|
|
112
|
+* Utilizando la máquina virtual: Haz doble “click” en el archivo `RecursiveShapes.pro` que se encuentra en el directorio `/home/eip/labs/recursion-recursiveshapes` de la máquina virtual.
|
|
|
113
|
+* Descargando la carpeta del proyecto de `Bitbucket`: Utiliza un terminal y escribe el commando `git clone http:/bitbucket.org/eip-uprrp/recursion-recursiveshapes` para descargar la carpeta `recursion-recursiveshapes` de `Bitbucket`. En esa carpeta, haz doble “click” en el archivo `RecursiveShapes.pro`.
|
108
|
|
114
|
|
109
|
-1. Carga a QtCreator el proyecto `RecursiveShapes` haciendo doble "click" en el archivo `RecursiveShapes.pro` en el directorio `Documents/eip/Recursion-RecursiveShapes` de tu computadora. También puedes ir a `http://bitbucket.org/eip-uprrp/recursion-recursiveshapes` para descargar la carpeta `Recursion-RecursiveShapes` a tu computadora.
|
|
|
110
|
-
|
|
|
111
|
2. Compila y corre el programa para que veas una figura del copo de nieve construida con 3 iteraciones de la función `snowflake`. Puedes ver el código que define esta función en el archivo `snowflake.cpp` del proyecto de `Qt`.
|
115
|
2. Compila y corre el programa para que veas una figura del copo de nieve construida con 3 iteraciones de la función `snowflake`. Puedes ver el código que define esta función en el archivo `snowflake.cpp` del proyecto de `Qt`.
|
112
|
|
116
|
|
113
|
En la función `main`, busca la línea en donde se declara y dá valor a la variable `level`. Cambia el valor de `level` a `0` y corre el programa de nuevo. Podrás ver el triángulo que representa el caso base de la recursión para el copo de nieve. Continúa cambiando el valor de la variable `level` y corriendo el programa para que veas el proceso de la recursión y de producir figuras auto-similares.
|
117
|
En la función `main`, busca la línea en donde se declara y dá valor a la variable `level`. Cambia el valor de `level` a `0` y corre el programa de nuevo. Podrás ver el triángulo que representa el caso base de la recursión para el copo de nieve. Continúa cambiando el valor de la variable `level` y corriendo el programa para que veas el proceso de la recursión y de producir figuras auto-similares.
|
114
|
|
118
|
|
115
|
|
119
|
|
116
|
-###Ejercicio 2: Cajas autosimilares
|
|
|
|
|
120
|
+### Ejercicio 2 - Cajas autosimilares
|
117
|
|
121
|
|
118
|
Tu tarea en este ejercicio es programar una función recursiva `boxes`, en el archivo `boxes.cpp`, que produzca las siguientes figuras.
|
122
|
Tu tarea en este ejercicio es programar una función recursiva `boxes`, en el archivo `boxes.cpp`, que produzca las siguientes figuras.
|
119
|
|
123
|
|
|
|
|
|
131
|
* `shrinkFactor`: un número real que determina la razón del siguiente nivel de cuadrados. Por ejemplo, si `sideLength` es `100`, y `shrinkFactor` es `0.3`, el largo de los lados del cuadrado más grande será `100` unidades, y el largo de los lados del próximo cuadrado más pequeño será `100*.3=30` unidades. Se colocan 4 copias de ese cuadrado más pequeño dentro del cuadrado anterior, **un cuadrado en cada esquina**.
|
135
|
* `shrinkFactor`: un número real que determina la razón del siguiente nivel de cuadrados. Por ejemplo, si `sideLength` es `100`, y `shrinkFactor` es `0.3`, el largo de los lados del cuadrado más grande será `100` unidades, y el largo de los lados del próximo cuadrado más pequeño será `100*.3=30` unidades. Se colocan 4 copias de ese cuadrado más pequeño dentro del cuadrado anterior, **un cuadrado en cada esquina**.
|
132
|
* `smallestLength`: es un valor entero que determina el largo del lado del cuadrado más pequeño que será dibujado. Por ejemplo, en la Figura 6, `boxes(400, 0.4, 200)` solo dibuja el cuadrado con lados de largo `400`, ya que el tamaño que le seguiría sería `400 * 0.4 = 160`, que es más pequeño que `200`. Por otro lado, `boxes(400, 0.4, 75)` dibuja el cuadrado de tamaño `400` y los cuadrados de tamaño `160`, pero no los siguientes en tamaño, porque serían de tamaño `160 * 0.4 = 64`, que es menor que `75`.
|
136
|
* `smallestLength`: es un valor entero que determina el largo del lado del cuadrado más pequeño que será dibujado. Por ejemplo, en la Figura 6, `boxes(400, 0.4, 200)` solo dibuja el cuadrado con lados de largo `400`, ya que el tamaño que le seguiría sería `400 * 0.4 = 160`, que es más pequeño que `200`. Por otro lado, `boxes(400, 0.4, 75)` dibuja el cuadrado de tamaño `400` y los cuadrados de tamaño `160`, pero no los siguientes en tamaño, porque serían de tamaño `160 * 0.4 = 64`, que es menor que `75`.
|
133
|
|
137
|
|
134
|
-####Instrucciones
|
|
|
|
|
138
|
+#### Instrucciones:
|
135
|
|
139
|
|
136
|
1. Estudia la función `box` incluida en el archivo `boxes.cpp`. Esta función recibe como argumentos las coordenadas de la esquina superior izquierda, el largo de los lados y el color de una caja. La función dibuja una caja con esas especificaciones.
|
140
|
1. Estudia la función `box` incluida en el archivo `boxes.cpp`. Esta función recibe como argumentos las coordenadas de la esquina superior izquierda, el largo de los lados y el color de una caja. La función dibuja una caja con esas especificaciones.
|
137
|
|
141
|
|