28
manual de ejercicios de grashopper nivel I miguel vidal calvet guillermo ramírez camarero

Manual de ejercicios de grasshopper nivel I

Embed Size (px)

DESCRIPTION

Manual de ejercicios de grasshopper nivel I applicados al diseño paramétrico de arquitectura. Orientado a arquitectos que desean iniciarse en el diseño generativo. Material de apoyo a los cursos presenciales de frikearq. Guillermo Ramírez y Miguel Vidal

Citation preview

manual de ejercicios de grashopper nivel I

miguel vidal calvetguillermo ramírez camarero

A. Conceptos básicos.

B. Números y datos.

C. Gestión de listas y condicionales

D. Geometría

E. Modelado paramétrico

índice

aplicado al diseño paramétrico de arquitecturacurso de grasshopper nivel I

00 Introducción.E01 Interfaz gráfica.E02 Objetos. Tipos y modos de visualización.E03 Modos de entrada.

02030508

06080910

1213141516

18192021

2326

E04 Dominios, rangos y series. Hilera y matriz de puntos.E05 Funciones. Parábola y espiral. E06 Paraboloide hiperbólico.E07 Superficie por puntos - Miralles.

E08 Ordenar una lista.E09 Triangulación de una cercha.E10 Malla de pilares.E11 Triangulación de la malla de pilares.E12 Malla de pilares con patio.

E13 Brújula.E14 Vector Solar.E15 Subdivisión y triangulación de una superficie.E16 Panelización de una superficie.

E17 Monumento a los judíos de Europa.E18 Mediateca de Sendai.

manual de grasshopper nivel I aplicado al diseño de arquitecturapor miguel vidal calvet y guillermo ramírez camarero

edición Noviembre 2010grasshopper v0.8.002

conceptos básicosA

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p04

introducción

00. ¿qué es grasshopper?

01. ¿cómo se trabaja en grasshopper?

Grasshopper es un entorno de programación visual dentro de Rhino. Su principal virtud es que nos permite diseñar algoritmos que operan con datos y geometría de manera intuitiva sin la necesidad de aprender ningún lenguaje de programación. Al funcionar dentro de Rhino, Grasshopper incorpora gran parte de sus coman-dos y funcionalidades, además, utiliza Rhino como entorno de visualización, de manera que podemos ver en tiempo real cómo afecta a nuestro modelo cualquier cambio que realicemos en Grasshopper.

Grasshopper es una herramienta de diseño de algoritmos. Esto quiere decir que es capaz de encadenar una sucesión de comandos e instrucciones con entradas y salidas que son geometría y datos para producir un resultado. Esta manera de operar aporta gran flexibilidad de cara a manipular grandes cantidades de datos o datos variables en el espacio y el tiempo, pero condiciona enormemente nues-tra manera de trabajar.

Llevar una idea o proyecto a grasshopper no es una tarea sencilla. No basta con conocer la herramienta y sus comandos, hace falta ser capaz de traducir nuestra idea a un lenguaje matemático en primer lugar, y, en segundo lugar, a un lenguaje que grasshopper sea capaz de entender.

Por este motivo, mientras que grasshopper es una excelente herramienta para llevar a cabo proyectos que operen con gran cantidad de información, geometría, o múltiples variables y condiciones definidas con precision y rigor, grasshopper no es una buena herramienta para manejar procesos intuitivos o difusos, que tienen dificultad para ser traducidos a un lenguaje lógico.

Idea

modelo matemático/lógico

definición en grasshopper

0002. Recomendaciones de uso de Grasshopper antes de empezar

- Lo primero, guardar el archivo :-)- Mantener un orden e higiene visual.- Elaborar un esquema de flujo de datos de lo que se vaya a hacer.- Al principio, sacar paneles de todo lo que se vaya haciendo.- Cuantos menos cables, mejor.- Comentar las definiciones.- Cambiar los nombres de parámetros y componentes a nuestro gusto para poder orientarnos mejor y hacer búsquedas rápidamente.- Siempre hay varios caminos para llegar al mismo resultado, toma, primero, el que mejor controles y, segundo, el más corto.

números y datosB

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p06

dominios, rangos y series

00. objetivo

01. componentes clave

02. procedimiento

El objetivo de este ejercicio es familiarizarnos con la creación de listas de números en Grasshopper. Para ello utilizaremos los componentes dominio, ran-go y serie para generar una colección de números que dibujarán una hilera de puntos primero y luego una matriz de puntos.

Dominio (domain) es un componente cuya entrada son dos valores reales A y B y cuya salida es un intervalo continuo de la recta real. Un dominio se escribe “A To B” y representa la colección de todos los números entre esos dos valores.

Rango (range) es un componente cuyas entradas son un dominio y un valor N, y cuya salida son valores discretos de la recta real. Es decir, es un componente que toma un dominio continuo D y lo divide N veces, generando una colección de N+1 valores discretos.

Serie (series) es un componente que genera una lista de valores ordenados a partir de un valor inicial A, un incremento o tamaño de paso N y una cantidad de valores C.

Para dibujar una hilera de puntos en la dirección del eje X utilizando los concep-tos anteriores, tendremos que seguir los pasos siguientes:

1. Sacamos un componente Series y conectamos unos sliders de número enteros a sus entradas A, N y C. El objetivo de esto es generar una lista de C coordenadas que empiecen en A y aumenten de N en N. Es decir, si le damos a nuestros sliders A, N y C los valores 1, 2 y 10 respectivamente, el componente series nos generará una lista tal que así (1, 3, 5, 7, 9, 11, 13, 15, 17, 19).

2. Conectamos la salida del componente Series a la entrada X del compo-nente Point. El significado de este paso es que asignamos cada valor numé-rico generado en la serie a cada coordenada X de una lista de puntos. Como conectamos varios valores a una entrada X, el componente dibujará varios puntos, tantos como hayamos especificado en C.

3. La hilera de puntos ya está terminada. Si ahora cambiamos los valores de los sliders podemos observar cómo afectan los cambios a la cantidad y la separación entre puntos.

4. Pero.. ¿ y si enchufamos una lista de números a la entrada Y de Point, qué ocurre? ¿cómo podemos hacer para que en vez de una hilera inclinada Grasshopper nos dibuje una matriz de puntos?

domain, range, series

A. Definición: dominio.B. Definición: rango.C. Definición: serie.D. Hilera de puntos.E. Matriz de puntos.

A. Definición: dominio.

B. Definicón: rango.

C. Definición: serie.

D. Hilera de puntos

E04

A

A

A

N divisiones

incremento N

N+1 valores

C valores

c

A+N

d

A+2N

e

A+3N

B

B

B

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p07

dominios, rangos y series

Si simplemente conectamos la serie a las entradas X e Y de Point, Point hará exactamente lo que le pedimos, es decir, dibujará una hilera de puntos que tienen la coordenada X igual a la Y, puesto que las dos listas de números provienen de la misma serie:

(1,1) (2,2) (3,3) (4,4) (5,5) ....

Ahora, si nuestra intención es hacer una matriz de puntos, debemos cruzar estas coordenadas.

Intenta hacer una matriz de puntos tridimensional.

Intenta hacer una matriz de puntos como la anterior, pero que en el que cada punto esé elevado 1 unidad en la dirección Z con respecto al anterior.

1. Empleando lo aprendido en la lección de correspondencia de datos, hac-emos clic con el botón derecho en la parte central del componente Point, y seleccionamos Cross Reference. Esto quiere decir que a cada coordenada X (1, 3, 5, 7..) Grasshopper le va a hacer corresponder todas las coordena-das Y (1, 3, 5, 7..) produciendo una lista de pares de coordenadas tal que así:

(1,1) (1,2) (1,3) (1,4) (1,5) ....

(2,1) (2,2) (2,3) (2,4) (2,5) ....

(3,1) (3,2) (3,3) (3,4) (3,5) ....

donde cada elemento se combina con todos los demás.

E. Matriz de puntos.

ejercicio propuesto

ejercicio propuesto

E04

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p08

parábola y espiral

00. objetivo

01. componentes clave

02. procedimiento

El objetivo de este ejercicio es familiarizarnos con el manejo de funciones. Us-aremos una serie para generar una lista de valores que serán afectados por una función. Visualizaremos los efectos de la función asignando los valores a coorde-nadas de puntos para dibujar una parábola primero, y luego una espiral.

Usando lo aprendido en el ejercicio E04, generamos una lista de valores con una serie. Conectando la salida de la serie a la entrada X de un componente Point, asignamos los valores de la lista a las coordenadas X de los puntos. El resultado es una hilera de puntos en X.

De momento sólo hemos operado con las coordenadas X. Sacamos un compo-nente función y lo conectamos a la salida de la serie, y la salida de la función la conectamos a las coordenadas Y de nuestro componente punto.

Conectamos un panel con el texto 0.1*x^2 . Con esto conseguimos afectar las coordenadas Y de nuestra hilera de puntos para que asciendan de manera cuadrática. El 0.1 es un coeficiente reductor que impide que la función crezca tan rápidamente que desaparezca de nuestra vista en Rhino.

Ahora aplicaremos tres funciones, una a cada coordenada. Aplicando una fun-ción cos(x) a la X y una sin(x) a la Y conseguimos que los puntos describan un círculo en planta.

Si conectamos lo valores generados en la serie directamente a la entrada Z de punto, o a través de una función x, los valores pasarán inalterados, dibujando una espiral que asciende linealmente en Z.

Si en vez de x escribimos cualquier otra función para la coordenada Z, el as-censo será diferente: prueba con x^2, o Ln(x)

series, function, point

A. Serie. Hilera de puntos en X.B. Parábola: aplicamos una función a las coordenadas Y. C. Espiral: aplicamos funciones a X, Y y Z.

A. Serie. Hilera de puntos en X.

B. Parábola: aplicamos una función a las coordenadas Y.

C. Espiral: aplicamos funciones a X, Y y Z.

E05

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p09

paraboloide hiperbólico

01. objetivos

02. conceptos clave

03. procedimiento

- repasar la noción de dominio matemático- emplear las funciones de n variables- conocer cómo dibujar superficies a partir de fórmulas- entender cómo se define una superficie a partir de puntos

Dibujamos una malla cuadrada de puntos con un dominio, al igual, que en el ejercicio E01 - malla bidimensional de puntos.

Descomponemos los puntos de la malla cuadrada base y los “recomponemos” en otro punto XYZ (esta vez sin cross reference activo), tomando las coordenadas X e Y. La coordenada Z se generará en una función de n variables (f(n)) en la que introducimos, haciendo click con el botón derecho en la banda central del componente en edit expression, la ecuación del parabolide hiperbólico. El número de variables se define, también haciendo click con el botón derecho en la parte central del componente y luego yendo a input manager.

domain, range, f(n), decompose points, surface from points

1. Dibujar una malla de puntos base2. Dibujar los puntos del paraboloide a partir de la malla base con coordenadas Z modificadas por una función de varias variables3. Dibujar el paraboloide hiperbólico con una superficie a partir de puntos

1. Dibujar una malla de puntos base

2. Dibujar los puntos del paraboloide a partir de los puntos base

E06

Dibujamos el paraboloide con una superficie definida a partir de puntos (surface grid o surface from points). La entrada P será la últim lista de puntos XYZ y U la cantidad de puntos en cualquiera de las direcciones de la superficie (esta superfice sólo funciona con plantas cuadradas) , que será Nrango + 1.

3. Dibujar el paraboloide hiperbólico con una superficie a partir de puntos

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p010

superficie por puntos - Miralles

01. objetivos

02. conceptos clave

03. procedimiento

Dibujaremos una superficie irregular cuya geometría viene dada por una función de la cual podemos controlar determinados parámetros. Para ello deberemos comprender el concepto de remapeo de números. Utilizaremos una gráfica para modificar en tiempo real una lista de valores de cotas que dará alturas diferentes a cada punto de la superficie.

Definimos una malla de puntos idéntica a la de E6 Paraboloide Hiperbólico.

Tomamos un Domain y lo definimos entre dos valores, p.ej. 0 y 1,5, que van a representar la altura mínima y máxima que alcanzará nuestra superficie. Dividimos ese domain con un range que genera tantos valores como puntos haya en nuestra malla, esto es, medimos con list length cuántos puntos hay en nuestra lista de puntos, y le restamos 1 para enchufarlo a la N del rango.

Mapeamos los valores del rango a un intervalo entre 0 y 1 con Remap. Estos valores se introducen en Graph Mapper para ser modificados por una función. A la salida del Graph Mapper se devuelven a su dominio original con un segundo Remap. Finalmente, estos valores se introducen en la coordenada Z de nuestro componente punto.

Conectamos la salida de puntoXYZ a Surface Grid. La cantidad U de puntos de la entrada es la N del rango + 1.

domain, list length, remap numbers, graph mapper, surface grid

1. Malla base de puntos. 2. Afectar la coordenada Z con una gráfica.3. Dibujar la superficie.

1. Malla base de puntos.

2. Afectar la coordenada Z con una gráfica.

3. Dibujar la superficie.

E07

Banco Lungomare, fuente: www.escofet.com Mercado de Santa Caterina, fuente: www.wikipedia.org

gestión de listas y condicionalesC

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p012

ordenar una lista

01. objetivos

02. conceptos clave

03. procedimiento

- comprender que una lista es una sucesión de elementos, en la que el orden y la posición de los mismos dentro de ella es relevante

Vamos a ordenar los puntos de división de una circunferencia según la distancia a un punto interior a la misma. Primero, dibujamos una circunferencia y la dividimos con Divide curve y dibujamos los índices de cada uno de los puntos con Point list. Y segundo, colocamos un punto dentro de ella con un parámetro de punto, haciendo click con el botón derecho y luego yendo a Set one Point.

Medimos la distancia entre la lista de puntos que salen de divide curve (A) y el punto que hemos elegido previamente (B)

sort list, point list

A. Dibujar unos puntos (lista que vamos a ordenar) B. Parámetro con el que ordenar la listaC. Ordenar la listaD. Visualización del resultado

A. Dibujar unos puntos (lista que vamos a ordenar)

B. Parámetro con el que ordenar la lista

E08

Ordenamos la lista de distancias con Sort List. En la entrada y salida K, devuelve cualquier lista numérica ordenada de menor a mayor. Y en la entrada y salida A, ordena cualquier lista, de la misma longitud que la de K, en el mismo orden que ha utilizado para K. Se pueden ordenar tantas listas como se quiera de este modo, haciendo clic con el botón derecho en Input Manager ...

C. Ordenar la lista

Para visualizar el resultado, primero dibujamos los puntos ordenados con Point List, pero, esta vez, los escalamos para que no coincidan con los del apartado 1; y, segundo, dibujamos líneas a puntos entre el punto interior y los de la circunfrerencia con Dash Pattern .

D. Visualización del resultado

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p013

triangulación de una cercha

01. objetivos

02. conceptos clave

03. procedimiento

- repasar la noción de lista como sucesión ordenada de elementos- conocer cómo se desfasan listas según índices

Tomamos como curva base de la cercha una curva dibujada en Rhino y almacenada en un parámetro de curva en Grasshopper mediante Set one Curve, haciendo click con el botón derecho en el mismo.

Los puntos base de la cercha los obtenemos dividiendo la curva base mediante Divide distance y los puntos de coronación, tomando las coordenadas X e Y de estos puntos (con point decompose) y la coordenada Z, un slider.

shift list

1. Curva base 2. Puntos para ejes3. Ejes de la estructura4. Dibujo de la estructura

1. Cordón inferior

2. Puntos para ejes

E09

- Ejes de los montantes: líneas entre puntos base y de coronación.- Diagonales: líneas entre puntos base y coronación desfasados una posición.- Cordón inferior: líneas entre puntos base y ellos mismos desfasados una posición.- Cordón superior: líneas entre puntos de coronación y ellos mismos desfasado una posición.Desfasamos tanto la lista de puntos base como la de coronación con shift list.

3. Ejes de la estructura

Finalmente, dibujamos la estructura, con un pipe de todas los ejes, almacenados en un parámetro de curva.

4. Dibujo de la estructura

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p014

malla bidimensional de pilares

01. objetivos

02. conceptos clave

03. procedimiento

- introducirse en y comparar las nociones de colecciones numéricas en Grasshopper con series y dominios- comprender el modo de correspondencia de datos entre listas en Grasshopper

Definimos las dimensiones de la malla con sliders, que devuelven números dentro de un intervalo. Se pueden modificar deslizando el puntero en la barrra.

En primer lugar, utilizaremos una serie y, en segundo lugar, un dominio y así las podemos comparar. Una serie es una colección de “C” números reales que comienza en un número inicial “S” con un salto de “N” entre cada uno de ellos. Un dominio es un tramo continuo de la recta real definido por unos límites. Para hacer discreto ese tramo continuo, dividiéndolo en partes y obteniendo como resultado una colección de números reales, utilizamos un rango.

series, domain, range, point, cross reference, line

1. Definición de parámetros de la estructura.

2. Coordenadas de los puntos de la estructura. Colecciones numéricas.

E10

1. Definición de parámetros de la estructura.2. Coordenadas de los puntos de la estructura. Colecciones numéricas.3. Dibujo de los puntos base y de coronación.4 y 5. Dibujo de los ejes y de los pilares

Tomamos, bien la salida de la serie, bien la del rango como entradas de las coordenadas X e Y. En los puntos base, la coordenada Z será 0 y en los de coronación, definimos la altura con otro slider.

3. Dibujo de los puntos base y de coronación.

Los ejes de los pilares son líneas entre dos puntos. Los puntos de inicio de las líneas (A) serán los puntos base y los de final (B), los de coronación. Para dibujar unos pilares circulares, utilizamos pipe con las líneas como curvas base (C) y otro slider como radio de los pilares.

4 y 5. Dibujo de los ejes y de los pilares

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p015

triangulación de la malla de pilares

01. objetivos

02. conceptos clave

03. procedimiento

- conocer cómo se eliminan elementos de una lista, aplicándolo a la triangulación de la malla de pilares del ejercicio E03- comprender la relación entre los índices de una lista y los valores númericos de los dominios y las series

En el caso hipotético de que quisiéramos triangular la malla de pilares del ejercicio E03, tendríamos que desfasar la lista de puntos de coronación y dibujar una línea entre los puntos base y los puntos de coronación desfasados. Si dibujáramos las diagonales resultantes, tendríamos una estructura como la de la primera imagen de la derecha.

shift list, cull pattern, cull index

4. Dibujar los ejes de los pilares5. Eliminar las diagonales sobrantes(Los apartados anteriores y posterior corresponden al ejercicio EO3)

4. Dibujar los ejes de los pilares

E11

Para deshacernos de la diagonal que atraviesa la planta, utilizaremos las herramientas de eliminación de elementos de una lista: Cull. Utilizando, por ejemplo, Cull Nth (también podríamos hacerlo, con otros valores, con Cull Index) tendremos que averiguar la relación numérica que existe entre los parámetros de la estructura y la frecuencia con que se da esa diagonal que nos sobra. Dependiendo si hemos dibujado la malla de pilares con series o con dominios y rangos, la frecuencia de esa diagonal estará relacionada, respectivamente, con la cantidad de copias (C) de la serie que da lugar a los puntos de la malla de la estructura, o con el número de divisiones del dominio (N) más una unidad.

5. Eliminar las diagonales sobrantes

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p016

malla de pilares con patio

01. objetivos

02. conceptos clave

03. procedimiento

- elaborar un algoritmo sencillo, que consiste en eliminar los pilares del ejercicio E03 en un entorno de un radio determinado para fabricar un patio en la estructura - trabajar con sentencias condicionales: comparadores y valores booleanos

Los datos que definen el patio son las distancias de un punto de origen al resto de puntos base de los pilares. Todos los puntos que estén en un entorno que determinemos alrededor de ese punto, deberán eliminarse.

La condición que vamos a establecer para eliminar pilares de ese entorno es que la distancia entre el punto de origen sea mayor (Larger than) que un valor.

booleanos, true, false, larger than, dispatch

1. Datos de filtrado 2. Evaluación esos datos3. Extraer valores booleanos4. Filtrado de los datos iniciales(Para terminar el ejercicio, dibujamos el patio con la cubierta)

1. Datos de filtrado

2. Evaluación de los datos de filtrado

E12

La pregunta de cuáles de todas las distancias son mayores que el número del slider de “entorno” devuelve una lista de valores booleanos (verdadero y falso) de la misma longitud que la lista de distancias.

3. Extraer valores booleanos

Para quedarnos con los valores que corresponden con True (verdadero), utilizamos la herramienta Dispatch, que toma una lista L, la coteja con otra lista de valores booleanos y devuelve en A los ítemoes de L que coinciden con un valor True en P y en B, los que coinciden con False. La lista L que tomamos será la de los ejes de los pilaresEl último apartado es un ejercicio geométrico que se sale ligeramente del objetivo principal del ejercicio. Lo hacemos simplemente para dejar dibujado adecuadamente el patio.

4. Filtrado de los datos iniciales

geometríaD

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p018

brújula

01. objetivos

02. conceptos clave

03. procedimiento

- definir geométricamente puntos con coordenadas XYZ y polares- utilizar funciones de una variable para cálculos matemáticos- dibujar vectores a partir de dos puntos y visualizarlos- entender cómo se miden ángulos en Grasshopper

Las coordenadas de los puntos XYZ son las coordenadas en el sistema de coordenadas universal. Las coordenadas para los puntos polares son: plano origen del punto (P), ángulo en radianes en ese plano (xy), ángulo en radianes en el plano normal (z) y distancia radial al origen (d). Utilizamos una función de una variable f(x) para pasar de grados a radianes

Conectamos las salidas numéricas de las coordenadas a las entradas correspondientes de los componentes de puntos. Utilizamos un punto XYZ como origen del dibujo y otro punto polar para definir el extremo del vector.

function, f(x), point polar, vector display, angle

1. Establecer las coordenadas de los puntos 2. Dibujo de los puntos3. Definir los vectores y visualizarlos4. Medir el ángulo entre esos vectores

1. Establecer las coordenadas de los puntos

2. Dibujo de los puntos

E13

Utilizamos el componente de vector dos puntos, entre el punto XYZ y el punto polar. Como los vectores son entidades geométricas definidas por una longitud y una dirección, no tienen una visualización, así que utilizamos “vector display” para dibujar dicho vector V utilizando el origen como punto de ancla A.

3. Fabricar vectores y visualizarlos

Computamos el ángulo entre el vector anterior y un vector unitario en el eje X. Como resultado, obtendremos dos ángulos: el convexo (A) y el reflejo (B).

4. Medir el ángulo entre esos vectores

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p019

vector solar

01. objetivos

02. conceptos clave

03. procedimiento

El objetivo es definir un vector “solar” en coordenadas polares y compararlo con el vector normal a una superficie. Colorearemos puntos sobre la superficie según su exposición a la radiación solar.

Con el componente Point Polar dibujamos un punto que gira en torno al Origen. Uniendo con Line el Origen y el punto polar, obtenemos la dirección de nuestro sencillo vector solar, con vector display podemos visualizarlo. Si tratamos a la línea como si fuera un vector, Grasshopper no tiene problemas porque la convierte automáticamente.

Referenciamos con dos Curve (icono de borde hexagonal) dos curvas dibujadas en Rhino, y conectamos ambos a la entrada S de un componente Loft. Con Divide Surface dividimos la superficie en puntos en los cuales conocemos el vector normal (salida N del Divide Surface). Un Flatten en las salidas N y P del Divide Surface nos libra de las sublistas.

point polar, loft, angle, divide surface, flatten, gradient, preview

1. Definir un vector en coordenadas polares.2. Dibujar y dividir una superficie.3. Comparar vectores y asignar color.4. Visualizar.

1. Definir un vector en coordenadas polares.

2. Dibujar y dividir la superficie.

E14

Con un Angle comparamos los vectores normales (salida N del Divide Surface) con el vector solar (salida L de Line). A estos valores de ángulo les tenemos que asignar un color. Esto se consigue con Gradient. Con la paleta de Gradient definimos el espacio de color que vamos a hacer corresponder con los valores de ángulo, este espacio queda determinado entre los límites L0 y L1. Un ángulo

3. Comparar vectores y asignar color.

El último componente, Preview, sirve para colorear: le asigna color a geometría. Nuestra información de color sale del Gradient, y la geometría a colorear son todos los puntos que salen del flatten de la salida P de Surface Divide.

de 0 radianes será rojo, uno de Pi será rojo también, y, en Pi/2, cuando los los vectores sean perpendiculares, la luz será rasante y le asignaremos el color verde.

4. Visualizar.

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p020

subdivisión y triangulación de una superficie

01. objetivos

02. conceptos clave

03. procedimiento

El objetivo de este ejercicio es subdividir una superficie alabeada en porciones menores utilizando sus coordenadas locales U y V, y luego trazar las diagonales de cada cuadrado. Las sublistas nos ahorrarán mucho trabajo.

Para dibujar una superficie alabeada, en Rhino dibujaremos dos curvas. Las referenciamos en un componente Curve (de icono hexagonal) y conectamos ambas a la entrada S de un componente Loft. Deben estar dibujadas en el mismo sentido ya que si una ha sido dibujada de izquierda a derecha y la otra al revés, aparecerá un giro extraño en nuestra superficie.

Como si de un domain2 se tratara, conectamos el Loft a la entrada de divide domain2. Grasshopper interpreta directamente que queremos trabajar sobre el dominio bidimensional de coordenadas locales de la superficie. Asignamos sliders a U y V. Conectamos la salida del divide domain2 a Isotrim (subsurface) que ahora sí, divide la superficie con el patrón del domain2. Con Brep Components explotamos cada subsuperficie en sus vértices, aristas y caras.

loft, divide domain2, isotrim, list item, sublista

1. Dibujar la superficie. 2. Dividir la superficie en partes.3. Seleccionar los vértices de cada parte.4. Dibujar las diagonales.

1. Dibujar la superficie.

2. Dividir la superficie en partes.

E15

Con cuatro list item diferentes podemos seleccionar los vértices 0, 1, 2 y 3 de cada subsuperficie. Como Isotrim ha hecho una sublista de cada cara, un list item que nos escoja el elemento 0, cogerá la misma esquina de todas las subsuperficies a la vez, ahorrándonos trabajo.

3. Selecionar los vértices de cada parte.

Ya sólo queda unir cada pareja opuesta de puntos con una linea para dibujar las diagonales. Como seguimos trabajando dentro de la estructura de sublistas, basta unir el punto 0 con el 2 para que Line nos dibuje las diagonales 0-2 de todas las caras. Repetir el proceso para las diagonales 1-3. Podemos añadir grosor a las barras si utilizamos un Pipe.

4. Dibujar las diagonales

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p021

panelización de una superficie

01. objetivos

02. conceptos clave

03. procedimiento

En este ejercicio definimos una superficie a partir de una curva que se repite en vertical y aprendemos a replicar una geometría sobre ella.

El primer paso es dibujar una curva en Rhino y almacenarla en un componente Curve en Grasshopper. Luego la copiaremos en vertical con Move. Move necesita un vector para funcionar así que conectamos a la entrada T de Move un Unit Z: un vector unitario. Conectamos una serie a la entrada F del vector para generar varios vectores verticales y así tener múltiples copias.de la curva.

Conectando la lista de curvas a un Loft obtenemos la superficie que buscamos. Luego necesitamos dividir el domain2 del loft. La entrada U del divide domain2 tiene que ser el mismo valor que el slider que regula la C de la serie, menos uno, si queremos que las subdividiones en altura coincidan con la posición de las curvas replicadas. Extraemos los dominios unidimensionales del dominio bidimensional con Domain2 Components puesto que más tarde nos hará falta.

move, domain2 components, bounding box, surface morph.

1. Repetir una curva N veces en Z2. Superficie a partir de las curvas y subdivisión.3. Surface Morph.

1. Repetir una Curva N veces en Z.

2. Superficie a partir de las curvas y subdivisión.

E16

Surface Morph toma una geometría contenida en una caja de referencia y la replica sobre una superficie deformándola de acuerdo a las coordenadas locales de la superficie. Dibujamos un objeto a replicar en Rhino, y lo almacenamos en un componente Geometry de icono hexagonal. En este caso, el objeto dibujado será una lama inclinada. Aplicamos Bounding Box a la lama para generar la caja de referencia.

3. Surface Morph

Surface Morph es un componente con mútiples entradas: en la G debemos enchufar el cable que lleva la geometría (la lama) a replicar, en la R la caja de referencia de Bounding Box que contiene la lama, en la S la superficie sobre la cual vamos a replicar la lama, en la U y V, los dominios que vienen del Domain2 Components, y por último, la W, en la que conectaremos un Slider que regulará la altura de las réplicas sobre la superficie.

modelado paramétricoE

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p023

Monumento a los judíos de Europa asesinados, Peter Eisenman

01. objetivos

02. conceptos clave

04. procedimiento

03. programa

- parametrizar un diseño de un proyecto real- aplicar la noción de dominio a medidas concretas- subdividir una región del espacio con planos- tomar medidas pseudoaleatorias para elaborar “prototipos” de diseños

1.1. Extraer los dominios de cada una de las direcciones: dibujamos el sólido capaz que contiene a la parcela (bounding box), que será una caja plana, y extraemos sus esquinas con (box corners). Los dominios de la parcela, tanto en el eje X como en Y son las coordenadas X e Y de dichas esquinas.

domain, plane, intersection, containment, duplicate data, jitter

1. Dibujar los puntos de origen de las losas 2. Dibujar las losas con las medidas de los datos de partida en esos puntos

Datos de partida:- parcela: dibujamos en Rhino un polígono similar a la planta del solar- anchura de losas: 2.38 m.- fondo de losas: 0.95 m.- número de losas: 371

“El Monumento a los judíos de Europa asesinados (...) es un monumento que recuerda en Berlín a los judíos víctimas del holocausto.Fue diseñado por el arquitecto Peter Eisenman y por la ingeniería Buro Happold. Se trata de un campo inclinado de 19000 metros cuadrados cubierto por una rejilla cuadriculada en la que están situadas 2711 estelas o losas de hormigón. Estas losas tienen unas dimensiones de 2.38m de largo y 0.95m de ancho, y varían en cuanto a su altura, desde los 0.2 m a los 4.8m. (...)”Fuente: www.es.wikipedia.org

1. Dibujar los puntos de origen de las losas

NOTA: En este ejercicio, se han reducido las medidas reales de superficie total y número de losas para dar lugar a un archivo menos pesado.

E17

Monumento a los judios de Europa asesinados, vista de satélite. Fuente: Google Earth.

Monumento a los judios de Europa asesinados, vista general. Fuente: www.wikipedia.org.

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p024

1.2. Dibujar los planos de corte para cada dirección: en primer lugar, necesitamos los puntos de origen de esos planos, que estarán contenidos en los bordes del sólido que encierra a la parcela. Tomamos los dominios de cada eje y los dividimos en números reales con un rango. El número de subdivisiones del del dominio (la N del rango) puede ser la longitud lineal del sólido capaz en cada eje (la resta numérica de las coordenadas de los bordes del dominio para cada dirección) entre la medida de la losa más un paso. En segundo lugar, una vez obtenidos los puntos, sólo tenemos que tomar los vectores unitarios adecuados para dibujar los planos en cada dirección: para los planos en la dirección X, los vectores serán los unitarios en los ejes Y y Z; y para los planos en la dirección Y, los vectores serán los unitarios en los ejes X y Z. El último plano para fabricar las intersecciones que darán lugar a los puntos será el plano universal XY.

1.3 . Puntos de losas: una vez obtenidos los planos, tan sólo nos queda fabricar las intersecciones con Intersect plane|plane|plane (3PX). Para quedarnos solamente con los puntos interiores de la parcela, utilizamos la herramienta Point Containment, que comprueba si una lista de puntos (P) están o no en el interior de una curva cerrada C y devuelve en R la relación entre el punto y la curva (0 si está sobre la curva, 1 si está dentro de la curva y 2 si está fuera de la curva de región) y en P’ la proyección de dicha lista de puntos sobre el plano que contiene a la curva plana cerrada. Sólo nos queda quedarnos con los puntos coincidentes con los valores “2” de la salida R de Point Containment con una igualdad y Dispatch. Por último, nos quedaremos con los valores de la salida A de Dispatch.

2.1. Rectángulo base de losas: Dibujamos una lista de rectángulos, tomando como puntos de origen P los puntos de origen fabricados en el apartado anterior y dimensiones X e Y, el ancho y fondo de la losa de los datos de partida respectivamente; la entrada de R corresponde al radio de redondeo de las esquinas, en este caso, es igual a cero (el valor por defecto).2.2. Número exacto de losas: con Random reduce eliminamos ítemes de la lista L de forma pseudoaleatoria. Eliminaremos tantos elementos R hasta llegar a la contidad de losas de los datos de partida

2. Dibujar las losas con las medidas de los datos de partida

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p025

2.3 Extrusión de los rectángulos base de las losas : Para reproducir el paisaje del monumento, tomamos unas alturas de losas prefijadas, como medidas de unos prefabricados, que distribuiremos de un modo aparentemente aleatorio, utilizando la herramienta jitter. Necesitamos tantos valores de extrusióncomo losas, para ello repetimos la lista de alturas de losas con “duplicate data”, que repite los valores de una lista D N veces. Jitter desordena los elementos de una lista, modificando sus índices pseudoaleatoriamente.Para terminar, tapamos la extrusión con cap holes.

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p026

estructura de la Mediateca de Sendai, Toyo ItoE1801. objetivos

02. conceptos clave

03. procedimiento

El objetivo de este ejercicio es realizar un repaso de los conceptos generales aprendidos en todos los ejercicios anteriores. Dibujaremos un sólo pilar triangulado de la mediateca de Sendai, de Toyo Ito. Comenzaremos con un punto, luego un círculo, luego una colección de círculos transformados (copiados, escalados, rotados) y finalmente resolveremos su triangulación.

El primer paso es dibujar el centro desde el cual se va a referenciar toda la definición: será un punto dibujado en Rhino y almacenado en un componente Point de icono hexagonal. Conectamos el punto a la entrada P de un Circle, con radio gobernado por un slider que llamaremos Radio Maestro. El siguiente paso es replicar el círculo en altura. Lo haremos como hicimos en E16, con una serie y un vector Unit Z conectados a un Move. Le daremos el nombre H al slider que se conecta con la N de la serie, y el nombre Cantidad al slider que se conecta con la C de la serie. Este último slider es muy importante y lo vamos a conectar a muchas partes de nuestra definición posteriormente.

move, scale, rotate, center, random, jitter.

1. Dibujar un círculo y replicarlo en altura.2. Desplazar aleatoriamente en el plano XY.3. Escalar aleatoriamente respecto de cada centro.4. Rotar cada anillo..5. Dibujar la superficie y dividirla.6. Explotar las subsuperficies y seleccionar sus vértices.7. Triangular y dar grosor a las barras.

1. Dibujar un círculo y replicarlo en altura.

Ahora definiremos otro vector de traslación para un nuevo Move, pero en este caso con Vector XYZ. Generaremos valores aleatorios con Random para la X, comprendidos entre -1.1 y 1.1, y los barajaremos con Jitter para introducirlos en la Y. Este uso combinado de Random y Jitter nos evita tener que hacer dos

2. Desplazar aleatoriamente en el plano XY.

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p027

estructura de la Mediateca de Sendai, Toyo ItoE18

colecciones independientes de valores aleatorios. Simplemente generamos una colección y la barajamos. Es importante que haya números aleatorios positivos y negativos para permitir desplazamiento en cualquier dirección del plano XY. Los números aleatorios deben ser tantos como anillos haya. Esto se logra conectando el slider inicial Cantidad a la N del Random.

Debemos agrandar y encoger cada círculo de manera diferente y cada uno desde su propio centro. Con un componente Center conectado a nuestra última colección de círculos, hallamos los centros de cada uno de ellos. Estos centros conectarán con la entrada C de un componente Scale. Los factores de escala F serán números aleatorios (generados como en el paso anterior) comprendidos entre e. 0.7 y el 1.2 aproximadamente. Como en el paso anterior, debe haber tantos valores aleatorios como anillos haya. Esto se logra conectando el slider inicial Cantidad a la N del Random.

3. Escalar aleatoriamente respecto de cada centro.

Este paso es el más complicado de comprender. Es más fácil dibujar hasta el paso 5 y luego pararse y retroceder. Nuestra estrategia es generar una piel con un loft, luego subdividirla y triangularla como hicimos en E15, pero para que los triángulos de la subdivisión sean isósceles y no rectángulos debemos retorcer los anillos. Retorcer significa rotar el primer anillo un ángulo α, el segundo un ángulo 2α y así sucesivamente. Sacamos un Slider que llamamos Divs (divisiones). Este slider cobrará mayor sentido en el paso 5. Pasamos el valor de Divs por una función que divide Pi/Divs. Este resultado es el incremento de ángulo de rotación que resulta de un anillo al siguiente y que debemos conectar a la entrada N de una Serie. La C de la serie es el slider inicial Cantidad. La serie va conectada a la A de Rotate. Si el anillo se define como un polígono de cantidad de lados igual a Divs, entonces y sólo entonces tendremos una triangulación en la que los vértices de los anillos poligonales superiores caen sobre los puntos medios de los anillos poligonales inferiores (uf!!). Si no nos queremos creer esto, podemos probar valores de ángulo cualesquiera para la A para entender cómo se comporta la estructura.

4. Rotar cada anillo.

manual de grasshopper nivel IMiguel Vidal

Guillermo Ramírez

p028

estructura de la Mediateca de Sendai, Toyo ItoE18

En el paso 5 empezaremos a ver los efectos del retorcimiento que planeamos en el punto 4. Este paso es análogo al E15. Enchufamos los anillos rotados al Loft, y marcamos dentro de Loft Options loft la opción UNIFORM. Esto hará que el loft se ajuste con precisión a los anillos. Dividimos el loft con Divide Domain2, cuya U es el valor de Cantidad - 1, y cuya V viene del slider Divs. Aquí observamos que el slider Divs regula la cantidad de lados del anillo. Con Isotrim aplicamos el patrón de corte del Divide Domain2 a nuestra superficie generando las subsuperficies.

En el paso 5 continuamos con lo aprendido en E15. La técnica es idéntica. Explotamos las subsuperficies con Brep Components y seleccionamos los vértices con List Item haciendo uso de la estructura de sublistas para ahorrarnos trabajo. Con tres list item que seleccionen el vértice 1, 2 y 3 de cada subsuperficie debería valernos.

5. Dibujar la superficie y dividirla.

6. Explotar las subsuperficies y seleccionar los vértices.

Este paso es muy sencillo. Con tres Line diferentes, unimos la salida del List Item1 con el 3, la del 1 con el 2, y la del 2 con el 3. Luego le damos grosor a las barras con un Pipe como hicimos en E15.

7. Triangular y dar grosor a las barras.