Вы находитесь на странице: 1из 45

Captulo 3 Generando Geometra La primera parte del libro se centrar en el Diseo [Generativo].

Como trat superficialmente en el captulo dos, la idea tras el diseo generativo (algortmico) es descubrir las relaciones y reglas de objetos en el campo del diseo y disponer estas reglas como algoritmos capaces de generar productos de diseo. Desde el momento en que estas reglas trabajan con procesos algortmicos, necesitan elementos de entrada (input) y proporcionan elementos de salida (output), independientemente del nmero de stos (cientos o miles). It is just the matter of data which should be processed. El Dato (Data) es el ingrediente bsico a ser considerado y analizado en cualquier prctica de diseo. En el Diseo Generativo, los datos deben ser convertidos en valores reconocibles por los algoritmos. Estos incluyen Datos numricos (Numerical Data), Series (Strings), Booleanos (Booleans)Los Diseadores necesitan proporcionar varios tipos de datos para disear algoritmos. 3 _ 1 _ Sketching by numbers Los algoritmos empiezan con matemticas y nmeros. Los nmeros esconden los cdigos del Universo. Los nmeros y las matemticas son el lenguaje de la naturaleza, estn en todas partes. Hay valores numricos (numerical values), secuencias numricas (numerical sequences) y dominios (domains) en Grasshopper , los cuales deben ser estudiados para empezar a bosquejar/disear a travs de la computacin. 3 _ 1 _ 1 _ Valores Numricos (Numerical Values) Hay componentes que pueden proporcionar uno o varios valores numricos.

El ms til generador de nmeros es el componente <Number slider> o simplemente <Slider> (Params > Special > Number Slider), el cual genera un nmero ajustable manualmente. Puede ser entero, real, par, impar y su valor puede estar limitado tanto inferior como superiormente. Puedes ajustar estas condiciones mediante el apartado Edit del men contextual. Para ajustar uno o varios nmeros fijos puedes ir a Parmetros (Params) > Primarios (Primitive) > Integer (Enteros) / Number to set one (Nmero para elegir uno) / multiple Integer (mltiples enteros) / Nmeros reales (real number (s)). Hay otros componentes numricos como <Digit Scroller> el cual genera un nmero ajustable.

Numerical Sets: Series de nmeros (Series of numbers) Podemos producir un lista de nmeros con el componente <series> (Sets>Sequence>Series). Este componente genera una lista de nmeros, la cual empieza en el primer nmero que definimos (Start) y aumenta un valor determinado cada vez (Step), indicando adems el nmero de valores que tendr la Serie (Count) (Start:0/Step:1/Count: 100) : 0,1,2,3,,99 (Start:2/Step:2/Count: 50) : 2,4,6,8,,100 (Start:10/Step:10/Count: 1000) : 10,20,30,40,,10000

Fig.3.1. A el componente <Series> ha sido usado para generar una serie de nmeros que empiezan en el 20, y aumenta 0.5 cada vez. El nmero de valores en la serie est fijado en 8 para generar 8 valores (de 0 a 7). El componente amarillo es <Panel> de Params> Special el cual muestra el contenido de cualquier componente al que es conectado.

Dominios (Domain) Los Dominios proporcionan todos los nmeros reales entre un nmero limite inferior y uno superior. Hay dominios unidimensionales y bidimensionales, adems de varios componentes para crearlos y trabajar con ellos. Los Dominios por s mismos no proporcionan nmeros. Son extremos, con lmite inferior y superior. Rango de nmeros en un Dominio Hay innumerable belleza en las matemticas. Una de ellas es que entre cualquier dos nmeros reales hay infinitos nmeros reales. Hay infinitos nmeros entre 1 y 2. Hay tambin infinitos nmeros entre 1 y 1.000000001. Teniendo los valores lmite inferior y superior de un dominio numrico, es posible dividirlo en partes iguales para obtener un rango de nmeros. Con un Dominio definido, uno puede elegir el nmero de valores entre el lmite superior e inferior para obtener un rango de nmeros (Sets > Sequences > Range) Cualquier dominio numrico (ejemplo 1 a 10) puede ser dividido para crear nmeros: 1, 1.5, 2, , 10 1,2,3,, 10 1, 2.5, 5,, 10 1,5,10

Fig.3.2.A el componente <Range> divide el dominio entre 1 y 10 en 5 partes por lo que se generan 6 valores. El dominio es elegido en esta ocasin manualmente pero hay otros componentes para designar dominios. Hay que hacer click derecho en la D de <Range> para elegir el Dominio.

3_1_2_ Puntos y rejillas de puntos (Points and Points Grids) Los puntos son entre otras cosas los elementos bsicos para generar geometras en Algoritmos Generativos. Marcan una posicin especfica en el espacio, pueden ser puntos de inicio de curvas, centro de circunferencias, orgenes de planos etc. En Grasshopper podemos generar puntos con varios procedimientos. Vamos a ver como podemos relacionar tipos de datos numricos y geometras de puntos. - Podemos simplemente seleccionar un punto o grupo de puntos de Rhino e introducirlos al espacio de trabajo mediante el componente <point> (Params>Geometry>Point) y usarlos para algn propsito (Estos puntos pueden ser manipulados manualmente en Rhino y afectar a todo el proyecto. Ejemplo en el Captulo_2) - Podemos producir puntos mediante los valores de sus coordenadas. Para hacer esto, necesitamos un componente <Point XYZ> (Vector > Point > Point XYZ) y suministrar las coordenadas del punto mediante nmeros. - Podemos hacer varios tipos de rejillas de puntos como <grid hexagonal> en Vector> Grids. - Podemos extraer puntos de otras geometras de diferentes formas como puntos finales (endpoints), puntos medios (midpoints) etc. - Algunas veces podemos usar planos (origen) y vectores (tips) como puntos para empezar otras geometras. Hay otras formas de generar puntos en Vector>Points. Has visto el primer ejemplo de como generar puntos en el captulo_2 peor vamos a echar un vistazo a cmo podemos producir puntos y rejillas de puntos a partir de valores numricos.
Fig 3.3. Suministrando al componente <Point XYZ> tres coordenadas X,Y y Z definidas manualmente mediante <number slider>

Generando series de puntos usando el componente <Series> para proporcionar series de nmeros en lugar de un nmero

Actualizado a 0.9 Generando una rejilla de puntos mediante el componente <Series> y <Point XYZ>. The data match de <Point XYZ> fijados en Cross Reference mediante el componente <CrossRef> (Versin 0.9)

Dividiendo el dominio 1 a 2 en 15 partes usando el componente <Range>

3_1_2_X <Cross reference> (A partir de Grasshopper 0.9) Cuando Grasshopper itera sobre una lista de elementos, emparejar el primer elemento en la lista A con el primer elemento en la lista B. Despus el segundo elemento en la lsita A con el segundo elemento en la lista B y as sucesivamente. Algunas veces sin embargo quieres que todos los elementos en la lista A se combinen con todos los elementos en la lista B, el componente [Cross Reference] permite hacer esto.

Aqu tenemos 2 listas {A,B,C} and {X,Y,Z}. Normalmente Grasshopper iterara sobre esas listas y solo considerara las combinaciones {A,X}, {B,Y} and {C,Z}. Sin embargo, hay seis combinaciones mas que normalmente no son consideradas, que son: {A,Y}, {A,Z}, {B,X}, {B,Z}, {C,X} and {C,Y}. Como puedes ver el output del componente [Cross Reference] es tal que las nueve permutaciones estn realmente presentes. Podemos indicar el comportamiento de [Cross Reference] mediante una tabla. Las filas representan la primera lista de elementos, las columnas la segunda. Si creamos todas las permutaciones posibles, la tabla tendr un punto en cada cuadrcula, ya que cada celda representa una combinacin nica de dos ndices de fuente de la lista:

A veces, sin embargo usted no desea todas las permutaciones posibles. A veces desea excluir ciertas reas, ya que dara lugar a clculos sin sentido o no vlido. Un principio de exclusin comn es ignorar todas las cldas que estn en la diagonal de la tabla. La imagen de arriba muestra la opcin "holstic" , mientras que la opcin "diagonal" (disponible en el men de Cross Reference) tiene huecos para {0,0}, {1,1}, {2,2} and {3,3}:

Si aplicamos esto a nuestro ejemplo{A,B,C}, {X,Y,Z}, debemos esperar no ver las combinaciones para {A,X}, {B,Y} and {C,Z}:

La regla aplicada a la opcin diagonal es: "Omitir todas las permutaciones donde todos los elementos tienen el mismo ndice de lista". La opcin Coincident es lo mismo que la opcin diagonal en el caso de dos listas de entrada por lo que no voy a mostrar un ejemplo de ello aqu (ya que slo se trata de ejemplos de 2 lista), pero la regla es sutilmente diferente: "Omitir todas las permutaciones en la que dos objetos tienen el mismo ndice de lista". Los cuatro restantes algoritmos son variaciones sobre el mismo tema. En la opcin "Lower triangle" se aplica la regla: "Omitir todas las permutaciones donde el ndice de un elemento es menor que el ndice del elemento en la lista siguiente", lo que resulta en un tringulo vaco pero con elementos de la diagonal.

La opcin Lower triangle (strict) va un paso mas all y elimina los elementos de la diagonal.

Upper Triangle y Upper Triangle (strict) son imagines simtricas de los dos algoritmos previos, resultando un tringulo vaco en el otro lado de la diagonal.

3_1_2 Operaciones y Funciones Los componentes numricos predefinidos en Grasshopper pueden ser insuficientes para generar objetos. Es posible generar secuencias numricas, pero cmo podemos calcular el Seno de esos nmeros u otras operaciones matemticas? Las operaciones matemticas son simples y directas, disponibles en Math> Operators. Las Funciones son componentes capaces de realizar funciones matemticas en Grasshopper (Math>Script). A un componente funcin debemos suministrar (input) datos relevantes (no siempre numricos tambin Booleanos, secuencias) y que realiza una funcin definida a partir de los datos de entrada (input). Para definir la funcin hay que hacer click derecho en la entrada (F) del componente y escribirla o ir al Editor (Expression Editor). Este editor tiene muchas funciones predefinidas, as como una biblioteca para elegir. Hay que prestar atencin al nombre de las variables que utiliza en la expresin, y a los datos asociados que vinculas al componente funcin! Funciones Matemticas Un grfico matemtico muestra cmo los datos estn vinculados entre s. El grfico de una funcin f son todos los pares de puntos de coordenadas (x,f(x)) representados en el grfico. Vamos a dibujar algunas grficas de funciones. Cul es el grfico para los valores x entre 3 y 3 para la funcin f(x)= x2?

Fig.3.4. Lo que necesitamos es definir los valores de X, calcular f(x) y dibujar el grfico. Teniendo los lmites inferior y superior de los valores de X, podemos definir un dominio unidimensional de -3 a 3 dividido por el componente <Range> para obtener los valores de X que suministraremos a <Point XYZ>. Para calcular los valores de Y, los cuales son el resultado de una funcin f(x), necesitamos una <Function> para calcular x2. La Funcin es definida en la entrada F del componente. Si clickas con el botn derecho sobre F aparece la opcin Expression Editor , en la que puedes definirla. El grfico muestra estos pares de nmeros (x,f(x)) como puntos.

Fig.3.5.A Para hacerlo un poco mas complicado, podemos dibujar una circunferencia mediante coordenadas de puntos. La definicin matemtica de una circunferencia es X = r*Cos(t) e Y=r*Sen(t) siendo r= radio y (t) un rango de nmeros que va de 0 a 2Pi. Todos los valores de (t) son proporcionados por un Dominio que va de 0 a 2Pi dividido por un componente <Range> para calcular los valores X e Y en radianes. El nmero de segmentos en <Range> confirma cuntos puntos necesitamos para definir la circunferencia. Las operaciones <Sin> y <Cos> estn en Math>Trig Ejemplo no presente en el original

Fig.3.5.B En este caso en vez de usar los componentes <Sin> y <Cos> hemos definido las funciones que definen las coordenadas de X e Y, siendo stas X = r*Cos(t) e Y=r*Sen(t) dentro del componente <Evaluate> el cul evala una expresin con el nmero de variables que indiquemos (resuelve la funcin), en este caso r (radio) y t(0 a 2Pi). De esta forma adems de controlar el nmero de puntos, controlamos el radio de la circunferencia generada a travs de un <Slider>.

Fig.3.6.A El componente <Range> de 0 a 6Pi se divide en 100 partes. Los valores numricos resultantes se usan para alimentar el componente <Point XYZ> a travs de las funciones matemticas: X = t*cos(t) Y = t*sin(t) Al multiplicar Cos(t) y Sen(t) pot (t), comprobamos que los puntos empiezan a alejarse del centro y han generado una forma espiral.

Fig.3.7. Hasta el momento todos los valores de Z eran 0. Utilizando los mismo valores del componente <Range> como valores de Z convertimos la espiral en una Hlice.

Hay varios tipos de espirales como la espiral de Fermat, de Cornu, hiperblica, de litius etc. Todas pueden formularse y ser implementadas en Grasshopper. Jugar en torno a las funciones matemticas podra ser interminable. Puedes encontrar varios recursos matemticos a los que vincular tus series de datos. Aqu, la idea de operaciones y funciones matemticas que pueden cambiar el conjunto original de datos es importante para futuros propsitos de diseo

3_1_4_ Valores aleatorios El diseo Contemporneo abarca la complejidad y la aleatoriedad controlada. A los diseadores no les gusta seguir rdenes de series de nmeros o geometras clsicas. Aadiendo cierta aleatoriedad controlada aumentaremos la complejidad del proyecto de una forma conveniente. Hay varias formas de tratar con valores aleatorios en Grasshopper. Podemos usar Vector>Grids>Populate 2D/3D para generar un conjunto aleatorio de puntos en una determinada regin. Esto ayuda a establecer algunos elementos de diseo en posiciones aleatorias. Hasta el momento hemos logrado dibujar una circunferencia mediante su definicin matemtica. En los lmites de estas circunferencias haba puntos distribuidos de manera uniforme. y si queremos distribuir estos puntos a distancias aleatorias?

Fig.3.8. Siguiendo el mismo concepto que en la generacin de la circunferencia, aqu un valor aleatorio ha sido aadido a los valores numricos proporcionados a las operaciones seno/coseno. Como vemos en la imagen, los puntos que generan la circunferencia estn distribuidos a distancias aleatorias debido a que los valores numricos estn ahora modificados de su estado original de divisiones equidistantes. Hay que tener en cuenta que al nmero de elementos para el componente <Random> se le aade uno con el fin de producir el mismo nmero de elementos que el componente <Range> (Se define N + 1 en el input N de <Random>, marcado con (*) para avisar de que hay algo extra definido en el componente). Fig.3.9. En este ejemplo, hay un par de cajas cuya finalidad es hacer una vista previa en color (custom preview) para mostrar claramente la aplicacin. En la primera imagen, todas las cajas estn en un orden el cual las hace aceptar un rango de colores desde la esquina derecha superior a la esquina inferior izquierda consecutivo. Pero en el segundo ejemplo, se ha aadido un componente <Jitter> despus de las cajas. Este componente baraja una lista de datos distribuyendo los elementos aleatoriamente. Como resultado las cajas de colores estn ordenadas aleatoriamente, sin embargo, se encuentran en la misma posicin y aceptan el mismo rango de colores. (Los componentes para el color son <Custom preview> (Params>Special) y <Colour RGB> (Vector>Colour)

3_2_Razonamiento 3_2_1_ Toma de decisiones El Diseo Generativo no est limitado a un progreso lineal de produccin, a veces se necesita decisiones y pensamiento crtico. Basado en la situacin de diseo, el diseador necesita a veces limitar algunas acciones, progresiones ramificadas para diferentes condiciones etc. Como en la generacin, las decisiones tambin deben ser tomadas a travs del progreso de los datos. Los datos no se limitan a nmeros. Hay otros tipos de datos tiles para diferentes propsitos en programacin y algortmica. Si queremos decidir si aplicar o no una funcin, necesitamos sentencias condicionales en programacin (declaraciones if). En los condicionales, comprobamos si una declaracin cumple con ciertos criterios o no, sobre esa base, aplica la funcin o no. Esto necesita un conjunto de datos especficos llamados Booleanos. 3_2_2_Tipos de Datos Booleanos La respuesta a una pregunta condicional es simplemente si o no. En los algoritmos usamos datos booleanos para representar estas respuestas. Los datos Booleanos son nicamente valores Verdaderos (True = yes) o Falsos (False = no). Si la instruccin cumple con los criterios, la respuesta es True, en cualquier otro caso es False. Con Booleanos, podemos indicar al algoritmo si aplicar una funcin o no, seleccionas alguna parte de los objetos, bifurcar la progresin de los algoritmos etc.

Fig.3.10. Hay 10 valores aleatorios <Random>. Queremos comprobar si esos valores son mayores que 0.5 o no. Si es as, queremos ejecutar otra funcin para esos valores, los dems sern omitidos. Usando un componente <Larger> (mayor que) (Scalar>Operators) es posible comparar todos los nmeros aleatorios con 0.5. Siempre que los nmeros aleatorios cumplen el criterio, <Larger> indica True para valores mayores que 0.5, en cualquier otro caso indica False.

Fig.3.11. Vamos a probar este concepto en el contexto de la geometra. La cuestin es sobre puntos. Hay un grupo de puntos en el espacio de trabajo y queremos encontrar aquellos cuyas coordenada X sea menor que 14. Necesitamos comparar la coordenada X de los puntos con 14 usando el componente <Smaller>. Obtenemos True en el <panel> para puntos que cumplen X<14. Las coordenadas de los puntos son extradas con el componente <Descompose> en Vector>Point (El inverso de <Ponit XYZ>).

Como puedes ver en estos ejemplos, existe la posibilidad de examinar bajo algn criterio valores numricos y obtener datos Booleanos. Pero a veces, queremos saber si la situacin cumple con criterios distintos, y decidir basndonos en el resultado de los mismos. Por ejemplo basndonos en el ejemplo anterior, queremos identificar los puntos cuya coordenada X es menor que 5 y adems, que su coordenada Y es mayor que 3. Sabemos identificar estas condiciones de forma separada. Pero cmo podramos encontrar los puntos que cumplen ambas condiciones al mismo tiempo? Para encontrar la solucin, debemos comparar los resultados de ambas operaciones: esto es lo que llamamos Operaciones Booleanas. Podemos encontrar estas operaciones en Math>Boolean. Ayudan a trabajar y decidir proporcionando ms valores Booleanos.

Fig.3.12. Aqu se combinan ambos conceptos. Coordenadas X comparadas con 14 y las coordenadas Y comparadas con 3 de forma separada. Usando el componente <Gate And> (Math> Operator> Gate And) obtenemos la conjuncin Booleana de ambos. El resultado ser true si ambos valores Booleanos de entrada son True, en cualquier otro caso, ser False. Los puntos que satisfacen ambos criterios pasarn como True.

Hay mltiples operadores Booleanos que puedes usar y combinar para crear un criterio, tomar decisiones y establecer un diseo basado en estas decisiones. La combinacin de estas operaciones ayuda a controlar qu es deseable y qu no y debe ser omitido en un diseo. Pero antes de profundizar en estas operaciones, veamos qu podemos hacer con estos datos Booleanos.

3_3_ Manipulacin de Datos_ Lista de Datos 3_3_3_ Culling Lists Hay muchas razones por la que podramos querer seleccionar algunos de los elementos de una lista de datos determinada y no aplicar una funcin a todos. Para hacer esto, necesitamos seleccionar algunos de los elementos especficos de una lista u omitir otros. Hay diferentes formas de conseguir esto, pero vamos a empezar con la omisin o la eliminacin selectiva de las listas de datos mediante factores de manipulacin de datos. Hay diferentes componentes <Cull> en la pestaa Set de la barra de herramientas de Grasshopper, los cuales nos ayudan a omitir alguna parte de los datos de una lista (cualquier tipo de datos). Mientras <Cull Nth> omite cada elemento N de una lista dada de datos, <Cull pattern> toma un patrn de valores Booleanos (True/False) y elimina una lista de datos, basado en este patrn, esto significa que cualquier elemento de la lista asociado con un valor Booleano True pasa y los asociados con False, son omitidos de la lista. Si el nmero de valores en la lista de datos y la lista de Booleanos coincide, cada elemento de la lista ser evaluado por el mismo elemento en la lista Booleana. Pero tambin podemos definir un patrn simple de valores Booleanos (como False/false/True/True el cual est predefinido en el componente) y el componente <cull> repetir el mismo patrn a todos los elementos de la lista. Distance example Estoy pensando en seleccionar algunos puntos de un grupo de puntos basndome en la distancia a un punto de referencia. Tanto el grupo de puntos como el punto de referencia estn definidos por el componente <Point>. En primer lugar, necesitamos un componente <distance> (Vector>Point>Distance) que mide la distancia entre los puntos y el punto de referencia y como resultado proporciona una lista de nmeros (distancias). Hemos comparado estas distancias con un nmero definido (<number slider>) mediante el componente <Smaller>. Esta comparacin genera una lista de valores Booleanos (True/False) para mostrar si el valor es menor (True) o mayor (False) que el <slider>. Suminstrar estos valores Booleanos al componente <Cull pattern>. Como mencion anteriormente, el componente <Cull pattern> toma una lista de datos genricos y una lista de datos Booleanos y omite los datos de la lista genrica asociados a un valor False de la lista Booleana. As que en este caso los elementos de salida (output) del componente <Cull pattern> son el grupo de puntos asociados a valores True, lo cual significa que estn a una distancia menor del punto de referencia que el nmero indicado en el <slider> distance. Para mostrarlo mejor he conectado estos puntos con el punto de referencia mediante el componente <line>.

Fig.3.13. Seleccin de puntos especficos de un grupo de puntos por la distancia a un punto de referencia, usando el componente <Cull Pattern>

Ejemplo Altura Hay un grupo de puntos asociados con las lneas de topografa en algn lugar del mundo. La idea es seleccionar puntos a una altura superior a 25 metros en las lneas de topografa y adems que estn a una distancia menor a 650 metros de la antena.

Fig.3.14. Puesto que hay dos criterios diferentes, los puntos deben compararse primero por su altura (coordenada Z) a una altura predefinida y luego sus distancias debern ser calculadas a partir de la antena para seleccionar aquellas que estn mas cerca. Usando un componente <Gater And>, nos aseguramos que los puntos proporcionados por el componente <Cull Pattern> cumplen ambos criterios, altura mayor a 25 y distancia menor a 650 m a la antena. Estos puntos son seleccionados para futuros propsitos de diseo.

3_3_2_ Gestin de Listas de Datos Es evidente que los datos y la gestin de los mismos es algo bsico en el diseo algortmico. Listas de datos pueden estar formadas por cualquier tipo de datos, como nmeros, puntos, geometras etc. Cualquier operacin geomtrica fcilmente proporciona una lista de datos como resultado. Es importante el control de estas listas de datos, con el fin de obtener el resultado deseado. Esto requiere manipulacin de datos.
Fig.3.15. Hay 2 listas de puntos, que queremos conectar mediante una lnea pero al conectarlos vemos que el orden de los puntos en la lista no es el mismo y no obtenemos lo que queremos. En este ejemplo vemos que necesitamos algn tipo de gestin de datos para obtener el resultado apropiado

Hay varios componentes en Grasshopper que ayudan a controlar y administrar listas de datos, pero ahora nos centraremos en Sets>Lists. Hay mltiples componentes que podemos usar para la manipulacin de datos. Es posible extraer un elemento de una lista de datos por su nmero de ndice, extraer parte de una lista por el menor y superior nmero de ndice, invertir el orden de los datos en una lista etc. Algunos ejemplos:
Fig.3.16. Aunque es una situacin muy simple, para resolver el problema de las listas de puntos desordenadas, usamos el componente <Reverse> antes de <line> y ahora vemos que las lneas se conectan sin intersecar entre ellas.

Fig.3.17. Aqu hay una lista de puntos. Quiero seleccionar el punto con la coordenada X ms baja. Como dije antes, un componente <point descompose> te da las coordenadas de los puntos. Necesitamos encontrar el menor el valor de X entre todos los valores X de los puntos. Para conseguirlo tengo que ordenar todas las coordenadas X de menor a mayor para encontrar el mnimo (el primer elemento de la lista). Esto es lo que <Sort list> har. Bsicamente el componente <sort>, ordena una lista (o mltiples listas) de datos basada en una lista de datos numricos como referencia, as que cuando ordena nmeros, el dato asociado puede ser ordenado tambin. As que aqu he ordenado todos los puntos con sus coordenadas X como dato clave. Lo que necesito es seleccionar el primer elemento de la lista. Necesito un componente <Item> el cual extrae un elemento de una lista por su nmero de ndice. Como el primer elemento (ndice 0) tiene el mnimo valor de X, extraigo el ndice 0 de la lista y el elemento de salida del componente ser el punto con el mnimo valor de X del grupo de puntos.

Cmo puedo obtener el punto con la mayor coordenada X? Podemos seleccionar el ltimo elemento de la lista extrayendo su nmero de ndice. Pero qu pasa si el nmero de puntos de la lista de datos cambia? Entonces deberamos cambiar el nmero de ndice. Qu pasa si lo queremos para 1000 listas de datos diferentes? Debemos cambiar el nmero de ndice cada vez? Aqu sera mejor invertir la lista de puntos para seleccionar el elemento de la primera lista de nuevo. Entonces estaramos seguros de que el punto tiene el mayor valor de X de la lista Tenemos una lista de circunferencias generadas mediante otro proceso algoritmo y son geometras bsicas para generar un cilindro. Hay dos tipos de cilindros: Cilindros normales para circunferencias con un dimetro menor a 1 y cilindros porosos para dimetros mayores. Cmo deberamos disear nuestro algoritmo para generar cilindros con los criterios anteriores? Necesitamos bifurcar datos y el componente <dispatch> lo har por nosotros. Este componente necesita una lista de datos Booleanos para evaluar y bifurcar los datos en dos listas (asociados con True/ False). El criterio es el radio de la circunferencia.

Fig.3.18. El radio de las circunferencias es calculado por el componente <Center> (Curve>Analysis) y comparo con el valor definido de 0.5 (radio). Usamos la lista de Booleanos resultante para bifurcar los datos. As que el dimetro de las circunferencias en la salida A de <dispatch> es menor que 1 y en la salida B dimetros mayores para futuras aplicaciones de diseo. Para una mayor claridad visual, convertimos las circunferencias mayores en superficies.

Normalmente necesitamos combinar distintos componentes de manipulacin de datos para conseguir el dato deseado. Puesto que la manipulacin de datos es para propsitos de diseo vamos a hacer un experimento de diseo ms interesante.

Fig.3.19. Hemos dibujado dos circunferencias, la segunda de ellas con un mayor valor de Z y todos los puntos estn conectados por <Line>. Usando un componente <Shift> desplazamos los puntos en la lista para generar una simple superficie reglada.

Fig.3.20. Incluso en un ejemplo tan simple como este hay errores que resolver. Mirando ms de cerca la geometra, vemos que hay cuatro lneas conectadas al primer punto en vez de dos. La razn es que al generar los puntos mediante valores numricos. Tenemos el primer y ltimo punto (0 y 2Pi) en la misma posicin. As que aparece este pequeo error de diseo. Debemos omitir por tanto, el primer o ltimo punto.

Fig.3.21. Podramos desconocer el nmero de ndice del ltimo elemento a eliminar pero sin embargo, siempre sabemos que el ndice del primer elemento es 0. Usando el componente <Cull index> con el ndice 0, eliminamos el primer punto de ambas listas. Ahora deberamos tener una superficie reglada sin errores. Fig.3.22. Dos variaciones de la superficie reglada a partir del cambio en el Offset Value de <Shift>

3_4_ Teselaciones Teselaciones y patrones geomtricos estn relacionados con la idea de cubrir. Por lo general, abarca un proceso que consiste en subdividir una superficie en pequeas partes y repetir un patrn, pieza o plantilla para cubrirla. En cualquier caso, la repeticin de la forma no debe originar ningn solapamiento ni hueco en medio. Hay varios tipos de teselaciones basadas en diferentes piezas, pero solo existen tres tipos de teselaciones regulares con tringulos regulares, cuadrados y hexgonos. Tambin hay teselados semi-regulares e irregulares. La historia de la arquitectura tiene una amplia gama de ejemplos de embaldosados, los cuales son interesantes para estudiar y usar en las aplicaciones de diseo contemporneas. Teselaciones y baldosas estn entre los posibles problemas de diseo que se nos pueden presentar con algoritmos generativos y Grasshopper. Es posible establecer reglas para generar una baldosa y aplicar estas reglas al rea que queremos teselar, o la posibilidad de disear un motivo (motif) y hacerlo proliferar como un patrn en el espacio de diseo.

Fig.3.23. Estudios geomtricos y lgica de un patrn formado por geometras simples.

Fig.3.24. Mucarnas, complejas geometras de las Mucarnas en la Mezquita de Isfahan y patrones de azulejos repetidos en el espacio

Fig.3.25. Cpula de la Mezquita Lotfollah en Isfahan con un complejo diseo de azulejos bajo la cpula y en las paredes. Usando unas simples reglas geomtricas se genera un sistema bastante complejo en la cobertura de la cpula.

Hay varios mtodos y enfoques para el diseo de patrones (design tiling). Es posible usar un motivo y repetirlo. Teniendo un patrn predefinido, podemos usar transformaciones para repetirlo en el espacio de diseo. Otra forma es extraer reglas subyacentes de puntos, lneasy configurar el diseo, usando estas reglas subyacentes como fuerza generativa del diseo. Esta opcin parece interesante para esta parte del libro. Diseando un patrn Aqu hay varios dibujos de un patrn simple el cual he decidido he decidido generar con elementos bsicos como puntos y lneas. Bsicamente el patrnse generar a partir de ciertas lneas que conectan puntos en el espacio. Por lo que generando estos puntos en un orden deseado, es posible conectarlos y generar lneas bases de diseo.

Fig.3.26. La idea es generar puntos como base geomtrica y entonces aadir lneas. He empezado la definicin con <series>, que posibilita controlar el nmero de valores (nmero de puntos) y la distancia entre los mismos (Distancia horizontal entre puntos). Para crear la forma en zigzag de las lneas, necesito dos filas de puntos. He generado la segunda fila de puntos con valores de Y provenientes de un <number slider> que hace posible controlar la distancia vertical entre las 2 filas de puntos. En el siguiente paso, he omitido los puntos de las listas segn un determinado patrn booleano con <cull pattern> para obtener los datos del patrn en zigzag. Pero si conectamos

ambos componentes <cull pattern> a un componente <Poly line> (Curve>Spline), obtenemos como resultado una lnea en forma de Z. Esto ocurre porque el orden de los puntos es primero los puntos de la primera lista y luego los puntos de la segunda. Sin embargo, tienen que estar ordenados de la siguiente forma: 1er punto de la lista 1, 1er punto de la lista 2, 2 punto de la lista 1, 2 punto de la lista 2 El componente que ordena puntos de la forma que hemos descrito es <Weave> (Logic>List). El cual toma datos de mltiples listas y los ordena en un patrn definido en la entrada P (True/False). El resultado es una lista de puntos ordenados que cuando conectamos a <Pline> vemos como se genera la primera lnea en zigzag.

Fig.3.27. Hay otras maneras mejores, pero necesitan un mayor nivel de manipulacin de datos, Aqu con el mismo concepto, generamos la tercera fila de puntos, y con otro componente <weave> Y <Pline>, dibujamos la segunda lnea en zigzag del patrn. El proceso es el mismo para el resto del algoritmo.

Fig.3.28. Hay varias formas de controlar y cambiar el motivo y por lo tanto el patrn. Puedes cambiar la forma en que generas los puntos base o manipular la lista de datos. El resultado podran ser diferentes patrones de lneas intersecadas que podran ser la geometra generatriz de complejos modelos. Aqu los dibujos de arriba se convierten se usan para desarrollar un modelo en 3D mediante extrusin

Teselacin mediante la repeticin de un diseo Mientras que en el ejemplo previo hemos desarrollado las reglas bsicas para generar un patrn, aqu la idea es crear un diseo y repetirlo en el entorno del diseo. El diseo por s mismo es simple y generable a partir de reglas bsicas que ya conocemos.

Fig.3.30. El primer paso es definir el lmite del diseo. Es como una celda. Usamos el componente <Rectangle> para generar esta celda (Curve>Primitive). Dividimos este rectngulo mediante <Divide Curve> para generar algunos puntos (Curve>Division). Numeramos los puntos mediante el componente <Point list>

Fig.3.31. La idea es seleccionar puntos en el rectngulo mediante un orden predefinido y conectarlos mediante una polilnea <Polyline> para generar la forma bsica del diseo.

Fig.3.32. Dado que el diseo se genera en base a una celda rectangular, debera ser posible cambiar esta celda y obtener el mismo resultado. Usamos el componente <Grid Square> (Vector>Grids) para generar un gran nmero de celdas en lugar de una y sustituimos el rectngulo anterior por stas. Vemos que el diseo rellena todas las celdas. Fig.3.33. Antes de finalizar con el algoritmo de teselacin, puedes manipular el diseo para ver los diferentes resultados que obtienes. Puedes cambiar el orden numricos de los ndices usados para seleccionar los puntos.

Fig.3.35. Ms adelante en el proceso de diseo, podemos asumir que cualquier red rectangular 3D puede ser un lugar en el que podremos ubicar este diseo y obtener varios resultados del mismo proceso.

CAPTULO CUATRO
TRANSFORMACIN

Captulo Cuatro Transformacin Mientras que el primer paso en el diseo algortmico es Generar la geometra, el siguiente es modificar lo generado o la ya existente y abordar el diseo modificando objetos. Las Transformaciones son operaciones esenciales para hacerlo. Nos permiten obtener variaciones del objeto inicial, nos ayudan a reescalar y orientar objetos, moverlos, copiarlos, rotarlos y realizarles simetras, o quizs ayudarnos a acumular objetos u otras operaciones complejas. Hay diferentes tipos de Transformaciones como Planas, Espaciales, Afines, Proyectivas etc. Mientras que las Transformaciones Lineales mantienen las lneas rectas, las Transformaciones No Lineales transforman lneas rectas en curvas. Mientras que las Transformaciones Planas suceden en un plano, las Transformaciones Espaciales suceden en un espacio tridimensional. En trminos de cambio de forma, transformaciones como translaciones, rotaciones y simetras mantienen la forma original. Adems de stas, hay diferentes tipos de cortes y escalados no uniformes en tres dimensiones, as como transformaciones espirales y helicoidales y proyecciones las cuales provocan ms variaciones en entornos tridimensionales. Para transformar objetos, conceptualmente necesitamos mover y orientar objetos o partes de ellos, como sus vrtices, en el espacio. Las transformaciones se hacen posible mediante el uso de vectores y planos como elementos bsicos de estas operaciones matemtico/geomtricas. No vamos a discutir las reglas geomtricas de las transformaciones y su lgica matemtica, pero vamos a hacer un pequeo recordatorio sobre vectores y planos ya que los necesitamos para trabajar.

Fig.4.1. La Transformacin tiene un gran potencial para generar formas complejas a partir de formas simples. La naturaleza nos ofrece muchos ejemplos sobre transformacin.

4_1_Vectores y Planos El vector es una entidad matemtica/geomtrica que tiene direccin, magnitud (o longitud) y sentido. Parte de un punto y se dirige a otro con cierta longitud y direccin. Los vectores tienen un amplio uso en diferentes campos como la geometra y las transformaciones.

Fig.4.2.A: Elementos bsicos de un vector, B: desplazamiento de un punto con un vector

Simplemente si tenemos un punto y un vector, este vector puede desplazar el punto una distancia igual a la magnitud del vector a lo largo de su direccin y crear una nueva posicin del mismo. Usamos este simple concepto para generar nuevos objetos o mover, escalar, proyectar, realizar una simetra y otras transformaciones en el espacio tridimensional. Los planos son otro grupo de entidades geomtricas bastante tiles, los cuales podemos describir como superficies planas infinitas con un punto de origen. Por ejemplo los planos de construccin de Rhino (Cplane) son planos. Podemos usar estos planos para colocar nuestra geometra en ellos y aplicarles alguna transformacin basada en su orientacin y origen. Por ejemplo en un espacio 3D, no podemos orientar un objeto con un vector, necesitamos un plano donde orientar nuestra geometra. Los vectores tienen direccin y magnitud y los planos tienen orientacin y origen. Son diferentes tipos de construcciones que pueden ayudarnos a crear, modificar, transformar y orientar objetos en el espacio. Grasshopper tiene algunos de los vector y planos bsicos definidos como componentes. Esto incluye los vectores unitarios X, Y y Z y los planos XY, XZ e YZ. Hay otros componentes para producirlos y modificarlos de los cuales hablaremos en nuestros experimentos.

4_2_Curves Las curvas como geometras unidimensionales tiene mltiples funciones en el diseo. Hay diferentes tipos de curvas las cuales incluyen simples lneas, polilneas, arcos, poli-arcos, NURBS o curvas Bzier, circunferencias, rectngulos, polgonos etc. Como los puntos, las curvas pueden usarse como geometra base para la construccin de muchos objetos diferentes. Una curva puede ser extruida a lo largo de otra para generar una superficie, conectar diferentes curvas juntas y obtener superficies y slidos, o pueden ser usadas para distribuir otros objetos a lo largo de sus posiciones internas. El nacimiento de una estrella! Para hacer algunos experimentos con curvas y vectores, la idea es generar algunas lneas que comienzan en una cuadrcula de puntos y terminan en un punto externo. Podemos asumir que aparecern un gran nmero de lneas convergentes.
Fig.4.3. Usamos <Grid rectangular> (Vector>Grids) el cual produce una cuadrcula y los puntos de las esquinas de stas, podemos controlar el nmero de celdas/puntos en X e Y, as como la distancia entre los puntos. Con <XY plane> modificamos la posicin de la cuadrcula. Aqu lo desplazamos en la direccin Z con <unit Z>

Si introducimos un punto externos y los conectamos con los puntos de la cuadrcula median <line>, obtendramos un grupo de lneas con diferentes longitudes. Pero cmo podramos dibujar estas lneas con la misma longitud? Tenemos que cambiar la forma de dibujar las lneas. Un componente <line SDL> (Curve>Primitive) dibujar una lnea a partir de un punto inicial, una direccin y una longitud. Por lo que podemos controlar la longitud de la lnea con este componente. Tenemos los puntos de partida de la cuadrcula y queremos definir la longitud de las lneas manualmente. Y la direccin? La direccin de las lneas debe ser hacia el punto externo. Para definir la direccin, necesitamos un grupo de vectores, cada uno correspondiente a una lnea para definir su direccin en el espacio 3D. Teniendo el punto inicial y final de las lneas, podemos definir los vectores, usando <Vector 2pt>. Podemos usar estas lneas para continuar con nuestros experimentos y generar pirmides. Para generar estas pirmides, necesitamos aadir un polgono al final de cada lnea y extruirlos hacia el punto final de la lnea. Los polgonos necesitan planos sobre los que colocarse. Estos planos deben estar en el inicio de las lneas y perpendiculares a su direccin.

Fig.4.4. Creando vectores desde los puntos iniciales de la cuadrcula mediante el componente <Vector 2pt> (Vector>Vector). Podemos usar <Vector display> para visualizar los vectores generados

Fig.4.5. El componente <line SDL> genera un grupo de lneas desde los puntos de la cuadrcula hacia el punto externo que parecen propagarse en el espacio. Cambiando la posicin del punto externo o las caractersticas de la cuadrcula variamos las caractersticas de esta propagacin.

Fig.4.6. Usando un componente <end points> (Curve>Analysis) y usando los puntos iniciales (Start points) como orgenes de los planos (origin points) puedo generar los planos base. Aqu he usado el componente <Plane Normal> (Vector>Plane) el cual produce un plano a partir de un punto de origen y la direccin normal (perpendicular) al plano. Hemos usado como vectores normales los mismos vectores de las direcciones de las lneas. Con un componente <Polygon> obtenemos un grupo de polgonos cuyo centros son los inicios de las lneas y el plano que los contiene es perpendicular a las mismas.

Fig.4.7. En el ltimo paso, he usado un componente <Extrude Point> (Surface>Freeform) en el que he usado los puntos finales de las lneas como los puntos hacia los que extruir los polgonos.

Fig.4.8. Es posible cambiar el tamao de los polgonos usando series de nmeros en lugar de <number slider>. Es tambin posible cambiar la longitud de la lnea (<line SDL>) de x a x cambiando la direccin de las lneas y obtener pirmides con valores negativos. Finalmente puedes convertir el objeto en una entidad de Rhino (bake) y renderizar las formas geomtricas obtenidas a partir de nuestros experimentos con curvas y vectores.

Fig.4.9. Modelo final (Renderizado con polgonos y circunferencias como base)

4_3_Torres Paramtricas Una de las caractersticas del diseo algortmico es el potencial para esbozar ideas relativamente rpido. Comprendiendo algunos conceptos de geometra y procedimientos algortmicos resulta fcil visualizar las primeras ideas de diseo y bosquejarlas mediante algoritmos, crear variaciones del diseo and push one further for design development. Uno de estos temas sobre los que se ha experimentado bastante son las torres paramtricas. Dado que una torre es un conjunto de plantas apiladas unas sobre otras, es posible, siguiendo esta idea, para desarrollarla mediante diseo algortmico. El ejemplo siguiente intenta abarcar este tema mediante operaciones de transformacin. _Torre paramtrica _Contorno de la torre Aunque las torres del movimiento moderno de Mies tienen un contorno rectangular, ahora es posible (tecnolgica, estructural, sistemticamente ) disear torres con distintas formas y contornos. Este contorno representa la periferia de las plantas las cual queremos copiar sobre s misma para generar las plantas de la torre. Cualquier tipo de curva cerrada puede ser el contorno de la torre.

_Apilando plantas Un componente <move> (Transform>Euclidean) puede trasladar un objeto en el espacio con un vector. Puede mover (copiar) un objeto en varias posiciones del espacio usando unos cuantos vectores. Por lo que usando un componente <move> con varios vectores Z obtendremos un conjunto de plantas apiladas una sobre otra.

_Rotando El componente <Rotate> rota un objeto alrededor del centro de un plano. Las plantas podra ser el objetivo de la rotacin. Es posible rotar las plantas gradualmente. Para definir el ngulo de rotacin de todas las plantas, debe haber un valor numrico para cada una, as que el nmero de ngulos de rotacin es igual al nmero de plantas (tenemos que restar 1 a <Range> ya que proporciona un nmero extra).

_Piel Aplicando el componente <loft> a las plantas giradas generamos la piel de la torre.

_ Escalando Sera interesante cambiar el tamao de las plantas gradualmente usando <Scale> (Transform>Affine). Es posible definir un dominio unidimensional para elegir el minimo y mximo valor de escalado y dividir este dominio para proporcionar los factores para escalar.

El problema al escalar es que cambiamos el tamao de la torre debido a que escalamos cada planta usando como centro del escalado el origen del plano base. Para mantener el tamao de la torre, debera haber un plano al nivel de cada planta.

_Re-Escalando Aunque es posible cambiar la escala de las plantas de pequeo a grande, podramos no querer cambiar la escala de esta forma lineal. Podramos querer hacer la torre mayor en el centro y despus volverla a hacer pequea. U otras posibilidades de re-escalado. Introducimos un <Graph Mapper> entre scale factors y <scale> (Params>Special). El componente <Graph Mapper> puede distribuir valores numricos basado en una funcin matemtica, podemos cambiar todos los factores de escala basndonos en varios tipos de grficos disponibles en el componente.

_Eje de Rotacin Aunque la curva de contorno fue dibujada alrededor del origen y la rotacin ocurri alrededor del eje Z del plano XY, es posible cambiar el eje de rotacin y rotar las plantas alrededor de otro eje para conseguir plantas desviadas del eje central del contorno

El ltimo paso es manipular los valores del algoritmo y convertir la piel de la torre en una entidad de Rhino (bake) para poder comparar diferentes variaciones.

4_4_Manipulacin de datos 2 _ rboles de datos En Grasshopper los datos se estructuran en ramas y stas juntas forman los rboles de datos. Hasta ahora hemos trabajado con listas de datos. Una lista de datos son una serie de objetos en un orden. Pueden contener diferentes tipos de datos como nmeros, puntos o curvas. En el concepto de rbol de datos, cada lista representa una rama, por lo que un rbol de datos es un conjunto de lista de datos. Algunos componentes proporcionan datos en forma de rbol, alguno de ellos necesita recibir los datos en ramas separadas y otros necesitan que los datos no estn ramificados. Disear con Grasshopper requiere que dominemos este nivel de manipulacin de datos, para conseguir los datos de salida esperados en situaciones de diseo complejas. Data Tree Hay 4 curvas diferentes contenidas en un componente <Curve>. Conectando este componente a otro componente <Param viewer> (Params>Special), vemos que los datos estn contenidos una misma rama de datos. Si seleccionamos el ndice 0 de la lsita de curvas, seleccionaremos la primera de ellas.

Si usamos <divide curve> y revisamos la estructura de los datos de salida con <Param Viewer>, vemos que los datos estn divididos en ramas, concretamente 4, el mismo nmero que curvas. Dado que podramos necesitar acceder a los puntos de cada curva por separado, el componente ha ramificado los datos. Si ahora seleccionamos el ndice 0 de los puntos, vemos que hemos seleccionado todos los puntos de la primera curva, no slo el primer punto de la primera curva.

Por qu es importante esto? Hay muchas situaciones en las que necesitamos manipular estas estructuras de datos. En el ejemplo anterior, si queremos dibujar una <Polyline> conectando todos los elementos de ndice 0 de las curvas divididas, vemos que no funciona. Tenemos 4 puntos en 4 ramas de datos diferentes y <Polyline> los reconoce como 4 puntos separados, no como puntos de una misma lista de datos que conectar.

Hay un grupo de componentes en Sets>Tree mediante los que podemos controlar y administrar estructuras de datos de este tipo. Aqu por ejemplo, usando <Flatten Tree> conseguimos reunir los datos en una misma rama (lista de datos) y <Polyline> podr conectar los puntos entre s. Usaremos estos componentes para la manipulacin de los datos en nuestros experimentos de diseo.

4_5_Curve Evolution Curve evolution es el proceso smooth mediante el cual cambia la forma de una curva. Por ejemplo cuando realizamos una transicin (loft) entre varias curvas para generar una superficie, curve evolution se produce entre ellas, para cambiar el perfil suavemente y producir una superficie suave tambin. Hay varias tcnicas y aplicaciones de la curva de evolucin o curva de flujo pero aqu queremos usar el concepto a nuestra manera, de forma que nos beneficie a la hora del diseo de aplicaciones. Dado que en el diseo contemporneo se emplean curvas en diversas situaciones es interesante manipularlas y extraer diferentes perfiles de una curva primaria definida. Esto nos ayudar a disear superficies de formas suaves cuya fluidez es deseable en las tendencias de los diseadores. En nuestro espacio de diseo tenemos una curva y queremos generar otras a partir de ella mediante suaves variaciones para futuras cuestiones de diseo. La idea es ampliar una curva cerrada contenida en <Curve> tomando como base su punto central (centroide), usando puntos contenidos en la misma y alejarlos del centro a partir de una serie de valores aleatorios <Random> en el primer ejemplo. <Vector Display> nos muestra los vectores que desplazan los puntos a lo largo de la curva. El componente <Area> nos proporciona el centroide de la curva cerrada.

Usando <interpolate>, podemos dibujar la curva aleatoriamente generada. Pero esta evolucin aleatoria podra no ser la deseada y quizs queremos buscar otras opciones. Supongamos que queremos generar la curva de manera que se desvie de la curva inicial desde un valor mnimo, alcanzando un valor mximo en el medio de la curva y de nuevo vuelva al valor mnimo para cerrar la curva.

En lugar de valores aleatorios <Random>, usamos un rango de nmeros dividido entre 0 y Pi. La funcin seno <Sine> genera una serie de nmeros repetidos de 0 a 1. Este conjunto de nmeros remapeados mediante <Remap number> (Math>Domain) con el fin de aumentar la cantidad de desviacin mediante un nuevo dominio numrico. Estos valores numricos se han usado para potenciar vectores y desplazar puntos. Ahora que entiendes el concepto puedes proporcionar cualquier conjunto de nmeros para controlar la evolucin de la curva.

Un componente <Graft> (Sets>Tree) genera una rama separada para cada elemento de la lista de datos, Combinndolo con <series>, obtenemos varios rangos numricos vlidos, que se traduce en un conjunto de curvas. Cambiando los valores numricos controlamos el mnimo y mximo del dominio.

Y si queremos usar varias curvas en vez de una? Nos encontramos con la necesidad de gestionar otro rbol de datos para obtener el resultado buscado. Dado que todas las curvas estn en una rama de datos pero sus puntos de divisin estn en ramas separadas, necesitamos dividir todos los centroides con <Graft> con el fin de generar vectores en diferentes ramas de datos. El resultado estara bien si tenemos un dominio numrico para desarrollar cada curva. Ahora podemos pensar como desarrollar todas las curvas de la lista de entrada de datos, ms de una. Para esto es necesario una complicada gestin de listas y rboles de datos.

Intenta cambiar los valores numricos mediante <Graph Mapper> para redistribuir otra vez los nmeros.

Todos los experimentos estn disponibles con el libro para futuras investigaciones as que seguir con las explicaciones lo mnimo posible.

Ahora intenta combinar todos los experimentos a la vez. [Parametric Tower] con [Curve Evolution] podran tener potencial para desarrollar proyectos interesantes, nicamente usando conceptos geomtricos simples y transformaciones.

CAPTULO CINCO
ESPACIO PARAMTRICO

Captulo Cinco Espacio Paramtrico Nuestro estudio sobre algoritmos generativos y generacin de geometra incluye la observacin de objetos en el espacio; La representacin digital de formas y arquitectura; interaccin de slidos y superficies adems de mltiples procesos de formacin; desde las clsicas ideas de simetra y retculas a la complejidad y quizs, el caos. Manipulamos objetos. Los cuales pueden ser cajas, esferas, conos, curvas, superficies o cualquier interaccin entre ellos. Teniendo en cuenta su presencia en el espacio generalmente se clasifica a los puntos como adimensionales, curvas como unidimensionales, superficies como bidimensionales y slidos como objetos tridimensionales. Controlamos el espacio mediante un sistema de coordenadas para identificar algunas propiedades bsicas como posicin, direccin y medida. El sistema de coordenadas Cartesiano es un espacio tridimensional, el cual tiene un punto de origen O=(0,0,0) y tres ejes ortogonales que intersecan en l los cuales definen las direcciones X, Y y Z. Aunque debemos considerar que este sistema de Coordenadas 3D tambin incluye sistemas bidimensionales (planos (x,y)) y unidimensionales (espacios lineales (x)). En el diseo paramtrico, tratamos con estos sistemas. Necesitamos entrar en el espacio conformado por curvas y superficies. Parametrizamos objetos y manipulamos sus parmetros con el fin de disear.

5_1_Espacio paramtrico Unidimensional (1D) En el sistema Cartesiano el eje X es una lnea infinita la cual tiene nmeros asociados a diferentes posiciones. Simplemente x=0 es el origen y x=2.35 se asocia a un punto en la direccin positiva del eje X, a 2.35 unidades de distancia al origen. Un sistema de coordenadas unidimensional puede ser parametrizado en cualquier curva del espacio. As que, bsicamente, no slo el eje X tiene algunos nmeros reales asociados a diferentes posiciones en l, sino que cualquier curva tiene el potencial de ser parametrizada mediante una serie de nmeros reales que muestran diferentes posiciones en la curva. As que en el espacio paramtrico Unidimensional, cuando hablamos de un parmetro, podramos describirlo como un nmero real asociado a un punto especfico de una curva. Dado que no vamos a trabajar en el eje X, es importante saber que cualquier curva tiene su propio espacio paramtrico y que estos parmetros no coinciden exactamente con el sistema universal de medida. Cualquier curva en Grasshopper tiene un dominio que empieza en cero y termina en un nmero real positivo.

Fig.5.1. Espacio Paramtrico 1D de una curva. Cualquier valor `t es un nmero real asociado a una posicin en la curva.

Fig.5.2.Espacio paramtrico 1D y conversin al sistema de coordenadas 3D. Cuando trabajamos con una curva y referenciamos algn punto especfico, no necesitamos controlar el punto en el espacio 3D (P=(X,Y,Z)) sino que podemos situar el punto en la curva mediante un parmetro especfico de la misma P = t

Fig.5.3. <Point on Curve> divide el dominio de la curva de 0 a 1 y genera un punto en la curva referencia por un nmero entre 0 y 1.

Fig.5.4. <Evaluate Curve> evala puntos en una curva basado en valores numricos del dominio de la curva.

Fig.5.5. Como ya hemos visto, cuando trabajamos con valores numricos, es posible manipular nmeros.

Вам также может понравиться