AAD Algotithms Aided Design Parametric - Arturo Tesdechi

Descargar como txt, pdf o txt
Descargar como txt, pdf o txt
Está en la página 1de 43

Al escribir el prólogo del primer libro de Arturo Tedeschi, "Arquitectura

paramétrica con Grasshopper", el escenario que describí sobre el uso de


herramientas digitales y algoritmos generativos en la arquitectura era bastante
diferente al actual. Fue hace solo unos años, pero la disciplina aún no había
completado el ciclo revolucionario retratado: tanto la investigación académica como
las prácticas arquitectónicas avanzadas en todo el mundo aún estaban en el proceso
de descubrir la novedad de la era digital con poco enfoque real en la industria de
la construcción. . Desde principios de los noventa hasta el comienzo del nuevo
milenio, la arquitectura atravesó un período increíble de aceleración creativa que
a veces llevó la disciplina progresivamente más allá del diseño de productos, el
diseño de automóviles y el arte en general. De hecho, muchos lenguajes espaciales,
procesos y patrones desarrollados en este período por estudiantes y arquitectos
pioneros digitales con herramientas de diseño generativo, han sido posteriormente
incorporados y producidos en otros campos con gran éxito. Entonces puede sonar un
poco paradójico que la disciplina que generó este cambio de diseño revolucionario
es también la que tardó más en beneficiarse de sus implicaciones en escenarios del
mundo real como la fabricación y la construcción. Este retraso se debió a una serie
de cuestiones intrínsecas a la arquitectura: la complejidad de un organismo
construido, su delicado vínculo con el contexto socioeconómico y político y, por
último, pero no menos importante, el plazo y los costos involucrados en la
construcción de edificios ambiciosos e imprevistos.

Hoy en día, la popularidad de las herramientas generativas y la forma en que los


estudiantes pueden absorber información y entrenar sus habilidades ha crecido
exponencialmente. Al comienzo del nuevo milenio, la capacitación computacional aún
no se incluía dentro de los programas académicos y el estudiante promedio solo
podía observar pasivamente los resultados de la nueva era digital en Internet,
considerando esos experimentos visionarios como parte de una educación elitaria a
la que solo se puede acceder asistiendo. escuelas caras. Ahora se puede representar
un paradigma cambiado. No es alternativo ni contrastante, simplemente evolucionó.
Mirando hacia atrás en los avances de las herramientas digitales en arquitectura en
la última década, dos aspectos son claros. En primer lugar, la investigación y el
conocimiento computacional se han difundido ampliamente gracias a aquellos
arquitectos, investigadores y universidades que compartieron sus experiencias. La
web se ha convertido en una fuente invaluable de tutoriales publicados en blogs o
sitios web que inspiran a las generaciones jóvenes de diseñadores digitales. Al
mismo tiempo, los estudiantes tienen la oportunidad de aprender procesos y teoría a
través de talleres organizados por expertos y escuelas visitantes que muestran los
métodos didácticos utilizados por las universidades más avanzadas de todo el mundo.
Esto brinda a los estudiantes, que provienen de un entorno más conservador, la
oportunidad de comprender de manera práctica este nuevo enfoque del diseño.
Paralelamente, el interés más amplio hacia el tema ha desencadenado la activación
de muchos programas de arquitectura avanzada, departamentos computacionales e
instalaciones de fabricación digital de universidades internacionales que
anteriormente se sabía que fomentaban un enfoque más conservador hacia la
investigación arquitectónica. Una mejor conciencia de las posibilidades creativas
de las herramientas digitales también ha fortalecido la sensibilidad global de los
arquitectos por la estética creciente del diseño computacional, que se acepta cada
vez más como un estilo emergente global.

La afirmación de la cultura del diseño digital concluye de facto la era


especulativa que comenzó en los años noventa con los pioneros que utilizaron
software de animación para generar formas paramétricas y terminaron con diseños
basados en agentes programados mediante Processing. Treinta años enriquecidos por
una arquitectura altamente experimental que ha cambiado para siempre la forma en
que percibimos y diseñamos los espacios.
El segundo aspecto, que creo que podría desencadenar una evolución en la forma en
que los arquitectos hacen uso del diseño digital, es el cambio hacia un uso
integrado del diseño computacional que ya está en marcha. Al tratar de contrastar
un escenario socioeconómico inestable, el principal interés de los arquitectos es
pasar de una mera búsqueda de la complejidad espacial y la novedad a adoptar los
flujos de trabajo colaborativos, la sostenibilidad y la capacidad de construcción.
El resultado de la investigación arquitectónica ya no puede ser una hermosa imagen
impresa en una revista o un libro, esperando ser finalmente convertida en realidad
después de años de ingeniería inversa y dinero gastado. El diseño digital puede y
debe confrontar la realidad desde las etapas del concepto dando respuestas tanto a
criterios funcionales como de desempeño y logrando soluciones diseñadas para
superar las limitaciones de la industria de la construcción contemporánea.
El auge de las tuberías premontadas en las obras de construcción, la necesidad de
reducir el número de piezas especiales, las restricciones económicas derivadas de
una era de recesión constante y, más notablemente, la necesidad de planificar un
ciclo de vida sostenible para el edificio son parte de la ecuacion. Estos son
conceptos que pueden verse como opuestos al avance de la investigación
arquitectónica; sin embargo, la arquitectura digital debe llevarse al siguiente
nivel: la forma debe reflejar la integración entre múltiples disciplinas. En última
instancia, conduce a una fuerte convergencia entre los lenguajes arquitectónicos,
el rendimiento estructural y los subsistemas de construcción. Para el diseñador,
esto significa evaluar la salida de su definición de Grasshopper, Mel o script de
Processing para variables más allá de la visión espacial personal. Para triunfar en
el mercado actual es fundamental ir más allá. Es fundamental dominar herramientas y
procesos para lograr un mayor nivel de coordinación dentro del diseño.

La necesidad de que los diseñadores y artistas digitales redefinan su agenda está


bastante bien descrita en el artículo escrito por Michael Parsons para Design
Review: "Tolerancia y personalización: una cuestión de valor". Incluso si no puedo
adherirme completamente a la visión del autor, creo que tiene razón cuando sostiene
que a medida que las herramientas digitales se vuelvan más populares y ordinarias,
las formas complejas que estas herramientas hacen posibles perderán su estatus de
investigación de vanguardia a menos que se apoyen sus cualidades estéticas y
espaciales. mediante estrategias constructivas y funcionales significativas.
Parsons sitúa como caso emblemático el algoritmo de Voronoi. Anteriormente, un
territorio solo explorado por los diseñadores computacionales más hábiles, el
algoritmo de Voronoi ahora se ha convertido en una herramienta accesible. Es obvio
que solo una comprensión profunda de sus propiedades geométricas y una
implementación inteligente de las mismas puede impulsar y justificar su uso.
Cualquier otra cosa es solo una mera prueba de saber cómo usar una definición
programada por otros, en cuyo caso, como dice Michael Parsons, "no hay ninguna
habilidad involucrada en ello" y yo agregaría que tampoco hay progreso. El
objetivo, en cambio, debe ser lograr un equilibrio perfecto entre complejidad y
coherencia.
En este libro Arturo Tedeschi entrega un texto que es una referencia tanto teórica
como práctica para los profesionales y estudiantes de la arquitectura. El texto
demuestra técnicas de flujo de trabajo de búsqueda de formas digitales avanzadas,
que permite a los lectores dar un paso adelante, hacia la implementación madura de
herramientas digitales en arquitectura.
El diseño computacional ha refinado el lenguaje arquitectónico, y
Ahora es el momento de que los diseñadores hagan poesía dramática pero
significativa con él.

Los arquitectos siempre han dibujado antes de construir, acto que diferencia la
arquitectura de la mera construcción. Los dibujos han sido el medio de los
arquitectos para organizar ideas, recursos, espacio, etc. y representan la facultad
de los arquitectos para predecir los resultados del diseño. A medida que han
evolucionado los métodos de representación, han surgido nuevos estilos.
Herramientas como la perspectiva en el Renacimiento y la geometría proyectiva en el
Modernismo han marcado avances en el diseño. Sin embargo, estas herramientas han
dependido de un conjunto estable de instrumentos durante siglos: papel, utensilios
de dibujo, regla y brújula. En este modelo cada acto creativo se traduce en un
alfabeto geométrico mediante gestos que establecen un vínculo directo entre la idea
y el signo.

El acto de dibujar es un gesto natural que se ejecuta utilizando herramientas de


dibujo tradicionales que establecen un vínculo directo entre ideas y signos. Una
interacción natural es característica de aquellas herramientas que pueden
considerarse como un molde manual.

PÁGINA 22

Modelado algorítmico

¿Qué es un algoritmo? Un algoritmo ^ es un procedimiento utilizado para dar una


solución a una pregunta, o para realizar una tarea en particular, a través de una
lista finita de instrucciones básicas y bien definidas. Los algoritmos siguen la
aptitud humana para dividir un problema en un conjunto de pasos simples que se
pueden calcular fácilmente y, aunque están fuertemente asociados con la
computadora, los algoritmos podrían definirse independientemente de los lenguajes
de programación. Por ejemplo, una receta se puede considerar como algo similar a un
algoritmo. Podemos establecer un procedimiento para cocinar un pastel de chocolate,
basado en una simple lista de instrucciones:

0. Mezcle los ingredientes;


1. Unte en una sartén;
2. Hornee el bizcocho en el horno;
3. Saque el bizcocho del horno;
4. Deje enfriar.

NOTA 2
El término "algoritmo" lleva el nombre del matemático persa del siglo IX Al-
Khwarizmi.

Sin embargo, tal procedimiento no puede considerarse correctamente un algoritmo, ya


que las instrucciones están lejos de estar bien definidas y contienen ambigüedades:
"mezclar ingredientes", pero ¿qué ingredientes? ¿Cuánto tiempo debe cocinarse el
pastel? Este ejemplo básico señala algunas propiedades importantes de los
algoritmos:

•Un algoritmo es un conjunto inequívoco de instrucciones correctamente definidas.


Los algoritmos dependen de las instrucciones ingresadas. El resultado será
incorrecto si el algoritmo no está definido correctamente. Dicho de otra manera, si
los pasos del pastel se invierten o se saltan, las posibilidades de que el pastel
sea exitoso disminuyen.

• Un algoritmo espera un conjunto definido de entrada. La entrada puede ser


diferente para el tipo y la cantidad. El paso {0} requiere ingredientes, el paso
{2} requiere información cuantitativa como la temperatura y el tiempo de horneado.
Además, cada entrada tiene una condición previa, p. Ej. un requisito que debe
cumplirse, como un rango de temperaturas de horneado, por ejemplo: 160 ° C - 200 °
C.

• Un algoritmo genera una salida bien definida

Si una receta ambigua conduce a un pastel no comestible, en el ámbito digital:

• Un algoritmo puede producir mensajes de error y advertencias dentro del editor


específico. La entrada es específica. Si no se cumplen las condiciones previas, p.
Ej. los números se imputan en lugar de texto, el algoritmo devolverá un error.

Aunque los algoritmos a menudo se estudian de manera abstracta, aprovechan el


potencial de la computadora, que tiene la capacidad de realizar tareas de acuerdo
con un conjunto de instrucciones. Cuando los cálculos algorítmicos son ejecutados
por una computadora, se usa un editor específico para escribir las instrucciones.
Los editores pueden ser aplicaciones independientes o integradas en una aplicación
de software. Por ejemplo, los editores independientes incluyen C #, Python, etc. y
los editores integrados son editores de scripts proporcionados por programas como
Rhinoceros y Autocad que permiten a los usuarios escribir instrucciones para
automatizar tareas.

Los algoritmos constan de diferentes clases, una clase de algoritmo que conduce a
un número se llama procedimiento de cálculo, mientras que un algoritmo que genera
sí o no se llama procedimiento de decisión. Los algoritmos también pueden generar
geometrías. Por ejemplo, si se utiliza un editor integrado dentro de CAD u otro
software de modelado, se crea una geometría 3D manipulando el conjunto estándar de
primitivas proporcionadas por el software o definidas por procedimientos mediante
una secuencia de instrucciones. Por ejemplo, una línea se puede definir por dos
puntos, un inicio y un final; los puntos a su vez se pueden definir por sus
coordenadas {x, y, z}. Por ejemplo, un modelo de jarrón se puede definir como una
revolución de una curva de perfil alrededor de un eje, y se pueden obtener objetos
más complejos estableciendo un conjunto de reglas.

Los objetos ya no se manipulan con el mouse, sino que se definen mediante


procedimientos expresados en un lenguaje de programa específico: AutoLisp® en
Autocad®, RhinoScript® en Rhinoceros®, MEL® en Maya® u otros lenguajes
multiplataforma como Python®.

Este enfoque, generalmente denominado scripting, es completamente nuevo para los


diseñadores y transforma el vínculo entre la idea y el resultado final.

La secuencia de comandos consta de dos entornos de trabajo:

• el editor (A);
• el entorno de modelado 3D (B).

Además, produce dos salidas:

• el algoritmo;
• la salida del algoritmo, constituida por geometría asociativa 3D o 2D.
La salida final no es sólo una "señal digital", sino que puede considerarse como un
modelo digital interactivo que responde a variaciones en la entrada manipulando
todo el sistema. Por ejemplo, si las coordenadas de los puntos se cambian de {x, y,
z} a {x \ y ', z'} de la línea mencionada, el algoritmo mantiene la relación
establecida de que la línea está definida por los dos puntos y no por su ubicación.
. Los algoritmos establecen relaciones asociativas entre diferentes entidades como
números, primitivas geométricas y datos. Por ejemplo, las geometrías complejas se
pueden definir mediante una secuencia inequívoca de instrucciones que impulsan las
interrelaciones. El diseño de algoritmos permite a los usuarios diseñar un proceso
en lugar de un solo objeto.

Bruce Mau, en su Manifiesto incompleto para el crecimiento de 1998, afirma que "un
proceso es más importante que el resultado. Cuando el resultado impulsa el proceso,
solo llegaremos a donde ya hemos estado. Si el proceso impulsa el resultado, es
posible que no sepamos dónde vamos, pero lo haremos, ahora queremos estar ahí". La
cita de Mau resume el concepto central del diseño algorítmico; el potencial para
generar y controlar la complejidad del diseño más allá de las capacidades humanas.
Un conjunto de reglas y restricciones asociativas bien definidas puede dar lugar a
formas sin precedentes o resultados impredecibles y coherentes con los parámetros
establecidos. El diseño algorítmico permite a los diseñadores encontrar nuevas
soluciones y superar las limitaciones del software CAD tradicional y los
modeladores 3D.

Los algoritmos pueden definir todo tipo de geometría. El método para construir
geometrías procedimentalmente se basa en escribir un borrador y traducirlo a un
lenguaje de programación. Por ejemplo, la imagen a continuación se puede dibujar
escribiendo la siguiente lista de instrucciones:

0. Dibuja cuatro círculos;


1. Subdividir los cuatro círculos en N partes; obtenemos N puntos por cada círculo;
2. Conecte los puntos correspondientes.

El mismo elemento podría definirse mediante diferentes parámetros, pero es natural


escribir un algoritmo de manera que establezca relaciones entre las partes
variables de un objeto. En el ejemplo, el número de líneas se ve afectado por el
número de subdivisiones (N), que es el parámetro principal. Sin embargo, el
algoritmo sigue siendo ambiguo ya que no especifica orígenes únicos con respecto a
la coordenada z: {x, y, z '}, {x, y, z''} y {x, y, z '''}, un radio para cada
círculo (r '), (r '') y (r '''), y el método para conectar las líneas. Estos
refinamientos se realizan al pasar del borrador al algoritmo final.

El diagrama paramétrico como medio inteligente

En los últimos años, muchas empresas de software han desarrollado herramientas


visuales para hacer que los scripts sean más accesibles para los usuarios con poca
o ninguna habilidad de programación. En efecto, las reglas asociativas y las
dependencias se pueden expresar mediante un método gráfico basado en diagramas de
nodos.

El bloc de dibujo de Sutherland representó todas las restricciones definidas


durante el proceso de dibujo. A través de un diagrama especial, un diagrama de
flujo, el usuario no solo podía visualizar el árbol de dependencias, sino que
también podía manipular el gráfico con efectos instantáneos en el dibujo.

Muchos software han permitido a los usuarios interactuar con objetos digitales
mediante una manipulación directa o mediante diagramas basados en nodos. Los
sistemas de software basados en nodos, como Generative Components® de Bentley
Systems y Grasshopper® de Robert McNeel & Associates, son dos softwares que
permiten a los usuarios construir geometrías complejas asociando primitivas
paramétricas. Las secuencias de comandos visuales hacen posible un proceso en el
que se puede construir una línea conectando dos objetos puntuales, un cuadrado
conectando cuatro objetos de línea, etc.

"En principio, se puede construir cualquier red concebible de relaciones entre un


conjunto dado de atributos de elementos".

De manera similar a las secuencias de comandos, las secuencias de comandos visuales


se basan en dos entornos de trabajo principales:

• el editor visual (A);


• el entorno de modelado 3D (B).

Tal proceso genera dos salidas:

• el diagrama de nodo, también llamado diagrama paramétrico o algoritmo visual;


• la salida del diagrama paramétrico constituido por geometría paramétrica 3D o 2D.

Los diagramas de nodos se pueden utilizar para crear geometrías. Por ejemplo, la
siguiente figura es la transposición visual del algoritmo "redactado" en la página
26.

El diagrama consta de nodos y conexiones. Los nodos cuadrados son las funciones
principales: dibujar un círculo, dividir un círculo, crear una línea. Los nodos
circulares son los parámetros: el radio de cada círculo y el número de
subdivisiones. La salida del diagrama es la misma geometría generada a través del
procedimiento paso a paso mostrado anteriormente.

La ventaja de un diagrama de nodo reside en la lógica intuitiva que le permite


interactuar rápidamente con los parámetros. Por ejemplo, si se modifica el
parámetro N, se generan más líneas.

La geometría se puede modificar aún más manipulando uno de los parámetros (R), el
radio de (R3) se incrementa en la figura.

La geometría se puede modificar una vez más manipulando (R1, R2, R3, R4) como se
muestra en la figura.

El diagrama paramétrico tiene el potencial de crear modelos asociativos que


exploran múltiples configuraciones a través del control de los parámetros de
entrada.
Se cita a Patrick Schumacher:

"Si bien los atributos de las primitivas gráficas / digitales [...] se determinan y
fijan completamente en cualquier momento, dentro del diagrama paramétrico siguen
siendo variables. Esta variabilidad podría estar restringida dentro de un rango
definido sobre la base de funciones asociativas que imbuyen el proceso diagramático
con una inteligencia incorporada "^.

El diagrama paramétrico puede considerarse un medio inteligente para la


arquitectura y el diseño, ya que proporciona una autoconsistencia interna
transpuesta en un lenguaje gráfico que se puede manipular fácilmente, lo que
permite a los diseñadores explorar estrategias de búsqueda y creación de formas.
Jerry Laiserin se cita:

"La creación de formas, vagamente definida, es un proceso de inspiración y


refinamiento (la forma precede al análisis de las influencias programáticas y las
limitaciones de diseño) frente a la búsqueda de formas como (vagamente) un proceso
de descubrimiento y edición (la forma surge del análisis). La creación de formas
extremas no es arquitectura sino escultura [...]. Encontrar formas extremas tampoco
es arquitectura, sino ingeniería aplicada, donde la forma está determinada
exclusivamente por la función ".

PÁGINA 40

1.3 Componentes y datos

Como se discutió en la introducción, un algoritmo es un procedimiento que divide


una tarea compleja en una lista básica de instrucciones bien definidas. Grasshopper
proporciona a los usuarios una interfaz amigable de componentes para construir un
conjunto de instrucciones como un algoritmo visual. Por lo tanto, es esencial
comprender cómo funcionan los componentes.

Hay tres tipos de componentes:

1. Componentes que realizan operaciones sobre datos (componentes estándar)

La mayoría de los componentes de Grasshopper realizan operaciones con datos, lo que


significa que estos componentes esperan un conjunto definido de datos de entrada
que se procesan para generar una salida. Por ejemplo, el componente de punto
requiere un conjunto de coordenadas numéricas {x, y, z} como entrada para generar
un punto como salida, mientras que un componente de loft requiere un conjunto
definido de curvas como entrada para generar una superficie como salida. La salida
de un componente se puede utilizar como entrada para otro componente.

2. Componentes de entrada

Los componentes de entrada proporcionan datos (números, colores, etc.) que el


usuario puede modificar. Están alojados en el panel Entrada de la pestaña
Parámetros. Los componentes de entrada no esperan datos de entrada.

PÁGINA 69

2 Datos: cómo administrar datos en Grasshopper

El modelado digital se ha basado tradicionalmente en la manipulación virtual,


mediante la presencia pseudofísica del mouse y el teclado en el entorno digital. El
modelado algorítmico, por el contrario, se basa en la lógica y carece de
manipulación "física". Los algoritmos se basan en la capacidad de establecer
asociaciones conceptuales entre geometría y matemáticas. En otras palabras, se
manipulan datos en lugar de objetos digitales.

Un algoritmo se puede imaginar como una red de flujos de datos y, para operar
selectivamente en la red, es necesario filtrar, desviar y modificar datos para
manipular virtualmente la geometría. Dentro de este contexto, las matemáticas y la
lógica son el mouse y el teclado.

2.1 filtros

Una de las consecuencias de la falta de interacción "física" en Grasshopper es la


aparente dificultad para seleccionar elementos individuales entre un conjunto de
objetos. En el siguiente ejemplo, dos curvas dibujadas en Rhino se importan a
Grasshopper (mediante dos componentes de Curva renombrados como Curva 01 y Curva
02) y luego se dividen en diez partes. Como resultado, se generan once puntos en
cada curva.

Una operación simple como conectar dos puntos arbitrarios entre el conjunto de 22
puntos de división (ver siguiente imagen), parece imposible de conseguir usando el
componente Línea, ya que aún no conocemos las técnicas para seleccionar elementos
individuales.

De hecho, conectar un componente de línea a la salida P de los dos componentes de


Divide Curve indicará a Grasshopper que genere once líneas que conecten todo el
conjunto de puntos correspondientes.

Para analizar la salida de un componente, se puede conectar un Panel (Parámetros>


Entrada) a la salida de un componente para mostrar la estructura de datos. Los
paneles son herramientas de visualización que se pueden utilizar para visualizar
los datos de salida.

Grasshopper estructura los datos en rutas, es decir, niveles jerárquicos que


contienen listas. Las listas se subdividen en elementos que están indexados con un
número natural (0 a i) para hacer referencia a la posición de un elemento dentro de
la lista. Por ejemplo, la salida de datos de la ranura de componentes de la curva
de división (P) es un triplete de coordenadas que representan matemáticamente un
punto {x, y, z}. Cada punto o dato está referenciado por un índice, el primer punto
de la lista (-141.07, 228.4, 0.0) tiene un índice de 0. Los índices siempre
comienzan desde 0 y cuentan en números enteros hasta I. Las rutas se discutirán más
adelante (capítulo 5 ).

Grasshopper clasifica los datos según la forma en que se configuran. Por ejemplo,
los objetos establecidos en Rhino se organizarán en Grasshopper en el mismo orden
en que se seleccionan en Rhino. En el caso de Dividir curva, los puntos se ordenan
según la dirección de la curva.

2.1.1 Elemento de lista: seleccione un elemento de una lista

La comprensión de las listas permite a los usuarios seleccionar fácilmente un dato


específico dentro de una lista haciendo referencia a su índice mediante un filtro.
Grasshopper tiene muchos componentes para filtrar y dirigir datos.

Por ejemplo, el componente Elemento de lista (Conjuntos> Lista) es un filtro para


seleccionar un elemento de índice específico. Para seleccionar un elemento, conecte
una lista desde la que seleccionar en la entrada L del elemento de lista y un
número entero en la ranura del elemento (i). El valor del número entero especifica
el elemento que selecciona el filtro.
Se puede generar una línea entre las salidas del elemento de la lista (I)
conectando cables desde las salidas i a las entradas A y B de la línea. El control
deslizante "Índice" indica el punto seleccionado de la lista para conectarse como
puntos finales de la línea.

Para seleccionar dos o más elementos, se pueden conectar varios controles


deslizantes a la entrada i del elemento de lista del componente, utilizando el
componente Fusionar o presionando y manteniendo presionado el botón shift en el
teclado mientras conecta varios cables.

De esta manera, se pueden generar dos líneas especificando dos elementos de índice
de la salida P utilizando el componente Elemento de lista.

El componente List Item se puede utilizar para filtrar cualquier dato formateado en
una lista. Por ejemplo, el componente List Item se puede utilizar para seleccionar
un círculo específico dentro de una lista de círculos.

Por ejemplo, al usar un contenedor de geometría, se establecen seis círculos desde


Rhino, usando la opción Establecer múltiples geometrías del menú contextual.
Grasshopper ordena los círculos según su posición en el eje x. Para seleccionar y
extruir el cuarto círculo, el elemento de índice 3 debe especificarse como la
entrada del List Item. El componente Extruir (Superficie> Forma libre) se utiliza
para extruir el círculo según una distancia y dirección (D) especificadas por un
vector. En este caso, el componente Unit Z (Vector> Vector) especifica un vector en
la dirección z con una magnitud de 1. Usando la multiplicación escalar, se
establece una magnitud específica usando un control Number Slider (factor).

2.1.2 Cull Index: seleccione todos los datos excepto un elemento

El componente Cull Index {Sets> Sequence) realiza la acción inversa del componente
List Item:

Cull Index elimina los elementos de índice especificados de una lista.

Por ejemplo, para eliminar el índice 1 de la lista, se conecta un control


deslizante establecido en 1 a la entrada i del componente Cull Index (consulte la
siguiente imagen). Como resultado, si la lista inicial tiene N elementos, la salida
de Cull Index es una nueva lista que alberga N menos el número de elementos
seleccionados.

En el siguiente ejemplo, se crea un conjunto de líneas entre parejas de puntos


correspondientes excluyendo los puntos identificados por el índice 3.

2.1.3 Patrón de selección: seleccione elementos utilizando un modelo repetido

Se pueden usar patrones repetidos de valores verdaderos y falsos (valores


booleanos) para seleccionar y excluir, respectivamente, elementos de una lista. El
componente Cull Pattern (Sets> Sequence) se usa en Grasshopper para filtrar listas
según un patrón repetido de valores booleanos.

El componente Boolean Toggle (Params> Input), se puede utilizar para definir


patrones de selección. La salida del componente se puede cambiar haciendo clic
izquierdo en la parte Verdadero / Falso del botón, para declarar Verdadero o Falso
respectivamente. Se pueden combinar varios componentes de alternancia booleana en
una sola lista utilizando el componente Fusionar.

El patrón declarado Verdadero / Falso se repite a lo largo de la lista, lo que


significa que si el patrón es (Verdadero, Falso) y la lista tiene una longitud de 4
(contiene números de índice 0,1,2,3), el patrón se repetirá resultando en un patrón
de selección (Verdadero, Falso, Verdadero, Falso). Con referencia al ejemplo
anterior, se pueden dibujar líneas entre parejas alternas de puntos
correspondientes.

Los modelos repetidos pueden basarse en patrones de más de dos declaraciones. Como
se muestra en la siguiente imagen, el Cull Pattern se basa en una repetición de
tres valores booleanos (Verdadero, Verdadero, Falso).

2.1.4 Lista de turnos (Shift List): datos de desplazamiento en una lista

El componente Shift List (Sets> List) desplaza los números de índice, hacia arriba
o hacia abajo. La entrada S del componente es el desplazamiento de desplazamiento,
la entrada L es la lista para cambiar y la entrada W (Wrap) es un parámetro
booleano que declara si el desplazamiento resultante debe volver a agregarse. Los
números negativos desplazan la lista hacia abajo y los números positivos hacia
arriba. Por ejemplo, si el desplazamiento de desplazamiento (S) se establece en -3
y el ajuste (W) se establece en verdadero, los índices originales de la lista se
desplazan 3 unidades hacia el final de la lista y la lista se vuelve a agregar, lo
que significa que los tres índices inferiores 8, 9 y 10 se convierten en índices 0,
1 y 2 respectivamente.

Si el desplazamiento de desplazamiento se establece en 3 y el ajuste (W) se


establece en falso, los índices originales se desplazan 3 unidades hacia el
principio de la lista y se eliminan los primeros tres valores.

El siguiente algoritmo genera un conjunto de líneas que conectan el punto genérico


i en la primera curva con el punto i + 1 en la segunda curva. La lista de salida
resultante del componente se desplazará 1 valor hacia el principio de la lista y la
lista se volverá a agregar con respecto a la lista de entrada, lo que significa que
el índice 10 de la Curva 01 se conectará al índice 0 de la Curva 02.

El componente Cull Index se puede utilizar para eliminar la línea que conecta el
índice 10 de la Curva 01 con el índice 0 de la Curva 02, especificando el número de
índice.

2.1.5 Lista dividida / Longitud de lista

El componente Split List (Conjuntos> Lista) divide una lista de entrada única en un
índice específico en dos listas A y B.

El componente List Length (Conjuntos> Lista) calcula cuántos elementos hay en una
lista. Para mostrar la longitud de las listas, conecte un panel a la salida L de
List Length.

Si el índice de división se establece igual a la Longitud de la lista, la Lista A


será la misma que la lista inicial y la Lista B estará vacía.

El componente Split List se puede utilizar para realizar diferentes operaciones en


un conjunto de geometrías. Por ejemplo, después de dividir el conjunto en dos
listas, la lista A se extruye en una magnitud de 200 unidades en la dirección UnitZ
y la lista B se extruye en una magnitud de 100 unidades en la misma dirección.

2.1.6 Lista inversa (List Item)

Con frecuencia es útil invertir el orden de una lista de datos. Refiriéndonos al


ejemplo anterior, queremos crear una línea que conecte el "último punto" en la
Curva 01 con el "primer punto" en la Curva 02. Además, dicha regla debe funcionar
incluso si se cambia el número de subdivisiones mediante la entrada N de Divide
Curve.

El "primer punto" se puede encontrar fácilmente mediante un componente de elemento


de lista establecido en 0. El "último punto", en cambio, depende del número de
subdivisiones (N). Para encontrar este último, podemos confiar en dos estrategias
principales. El primero consiste en crear un "enlace paramétrico" utilizando el
mismo control deslizante para "alimentar" la entrada N y la entrada i del primer
elemento de la lista.

De esta manera, incluso si cambia el número de subdivisiones, el List Item siempre


seleccionará el "último punto" en la curva 01.

La segunda estrategia se basa en el componente Reverse List (Conjuntos> Lista) que


invierte el orden de una lista (en este caso, la lista de salida P), lo que
significa que el índice 10 se convierte en 0, el índice 9 en 1, etc. ranura de
entrada incorpora la funcionalidad para invertir los datos de entrada haciendo clic
con el botón derecho en la ranura y seleccionando Invertir en el menú contextual.
Con la Reverse List, el mismo control deslizante establecido en 0 puede alimentar
los dos componentes del List Item.

2.2 Secuencias numéricas

Los componentes Series, Repeat Data, Random y Range crean y manipulan secuencias
numéricas para crear listas que gestionan la geometría.

2.2.1 Serie

El componente Serie (Conjuntos> Secuencia) genera secuencias numéricas de acuerdo


con:

• El primer número de la serie (S);


• El tamaño del paso para cada número subsiguiente (N);
• El número de pasos de la serie (C).

Las configuraciones predeterminadas del componente Serie son: S = 0, N = 1, C = 10,


lo que da como resultado la secuencia: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9).

Por ejemplo, estableciendo los parámetros en; S = 2, N = 2 y C = 6, se genera una


serie de 6 números que parte de 2 y tiene una distancia de 2 unidades entre un
número y su siguiente: 2, 4, 6, 8, 1 0, 1 2 .

El componente Serie puede crear infinitas secuencias numéricas únicas que aumentan
o disminuyen según los parámetros de entrada.

La serie se usa a menudo junto con componentes de transformación, como Move, para
obtener múltiples transformaciones. El componente Mover (Transformar> Euclidiano)
traduce una geometría (G) según un vector (T). El componente Serie describe una
lista de valores escalares que se pueden multiplicar por un vector unitario para
definir un vector de traslación (T) para el componente Mover. Por ejemplo, un cubo
definido por Rhino se puede trasladar a lo largo del eje x utilizando el componente
Mover junto con el componente Serie. El componente Serie genera la secuencia
numérica (0, 2, 4, 6, 8) de valores escalares que se multiplican por un vector
unitario en la dirección x, lo que da como resultado los vectores de traslación
(Ox, 2x, 4x, 6x, 8x).

Los vectores de traducción están conectados a la entrada T del componente Move, lo


que produce una serie de cubos traducidos unidimensionalmente. El primer vector de
traducción es Ox, lo que significa que la primera geometría traducida se superpone
con la geometría del conjunto de Rhino.

Si desea mostrar solo los cubos traducidos (salida de Move), debe deshabilitar la
vista previa de Geometría, así como la vista previa del objeto inicial en Rhino
(comando Ocultar objetos).

Los componentes Move y Series, utilizados en combinación, pueden crear infinitas


secuencias de vectores únicas. Las secuencias pueden comenzar en cualquier valor,
tener cualquier tamaño de paso y contar hasta cualquier longitud.

Por ejemplo, si (S) es igual a 3, (N) es igual a 1,5 y (C) es igual a 5, resultará
la secuencia (3,0, 4,5, 6,0, 7,5, 9,0). Si la secuencia se multiplica por el vector
Unidad X, se definirán los vectores de traslación (3.0x, 4.5x, 6.Ox, 7.5x, 9.Ox).
La introducción de los vectores de traslación en la entrada T del componente Move
define la traslación One Dimension. El primer vector de traslación es 3.Ox, lo que
significa que la primera geometría trasladada no se superpondrá con la geometría
del conjunto de Rhino.

2.2.2 Coincidencia de datos

Por lo general, un componente recibe dos o más cables y la misma cantidad de flujos
de datos. Cuando los datos ingresan a un componente, se combinan de acuerdo con una
lógica predeterminada que debe entenderse para obtener resultados específicos. Un
ejemplo explicará este concepto. A partir del algoritmo anterior, nuestro objetivo
es obtener la siguiente cuadrícula de cubos (basada en una cuadrícula de 5 x 5).
Como primer intento, podemos modificar el algoritmo agregando un nuevo componente
Move conectado a una Serie para trasladar los cinco cubos (salida del primer Move)
de acuerdo con el eje y.

Sin embargo, el resultado final es bastante diferente de una cuadrícula de cubo:


las cajas crearán una disposición diagonal.

Tal resultado depende de una lógica particular llamada "Coincidencia de datos" que,
por defecto, coincide, uno por uno, con los elementos correspondientes de
diferentes listas que entran en el mismo componente. En el ejemplo, el segundo
componente Move coincide con dos flujos, el primero transfiere geometrías (entrada
G) y el segundo transfiere vectores (entrada T). Según esta lógica, el componente
Move mueve la primera geometría según el primer vector (longitud 0), la segunda
geometría según el segundo vector (cuya longitud es 2) y así sucesivamente.

Para obtener la cuadrícula. Grasshopper debe mover cada cubo de acuerdo con todos
los vectores. Esto implica que tenemos que manipular la lógica de emparejamiento.

Grasshopper compara los datos de acuerdo con tres métodos principales:

• El modo Lista más corta hace coincidir cada elemento de la primera lista con el
elemento correspondiente de la segunda lista. Si las listas no tienen la misma
longitud, la longitud de la lista más corta reducirá la lista más larga a la misma
longitud.

• El modo Lista más larga (método predeterminado) hace coincidir cada elemento de
la primera lista con el elemento correspondiente de la segunda lista. Si las listas
no tienen la misma longitud, el último punto de la lista más corta se conectará a
los puntos restantes de la lista más larga.

• El modo de referencia cruzada hace coincidir cada elemento de la primera lista


con todos los elementos de la segunda lista.

Para modificar la lógica de emparejamiento, Grasshopper nos proporciona tres


componentes específicos: Lista más corta, Lista más larga y Referencia cruzada,
todos alojados en el panel Lista de la pestaña Conjuntos. El componente Referencia
cruzada se puede usar, en el ejemplo, para crear una matriz bidimensional, es
decir, la cuadrícula de caja deseada, como se ilustra en la siguiente imagen.

El componente Cross Reference también se puede utilizar para crear matrices


tridimensionales, conectando una secuencia de vectores de traslación en Z y
haciendo "referencias cruzadas" de los datos con el segundo componente de
movimiento.

El algoritmo utiliza los mismos tres controles deslizantes numéricos para alimentar
los componentes de las tres series. De esta manera podemos cambiar la distancia
entre cubos (en las tres direcciones) actuando sobre el control deslizante
conectado a la entrada N de las tres Series (en nuestro ejemplo, el cubo inicial
tiene una longitud de lado igual a 1).

2.2.3 Repetir datos

Otro componente útil es Repetir datos (Conjuntos> Secuencia) que extiende una
secuencia numérica a una longitud especificada repitiendo los datos de entrada. La
entrada D del componente recopila un conjunto definido de números y la entrada L
define la longitud de la lista de salida. Por ejemplo, si los números (2,6,1) se
combinan en una sola lista conectada a la entrada D de Repetir datos, la lista
resultante es (2, 6,1, 2, 6) si la entrada L es establecido en 5.

La salida del componente Repeat data se puede utilizar para definir geometría
secuencial. Para visualizar cómo Repeat Data puede manipular la geometría, se
utilizará un algoritmo simple para obtener la siguiente superficie.

Dos curvas establecidas de Rhino se dividen mediante el componente Divide Curve y


las líneas se conectan a los puntos correspondientes en las listas mediante el
componente Line. Las líneas se evalúan utilizando Point on Curve para calcular el
punto medio de cada línea.

Cada punto medio es movido por un z-vector de traslación (visualizado por el


componente Vector Display), usando el componente Move.

Luego, la salida de la curva de división (P) de la curva 01, los puntos trasladados
y la salida de la curva de división (P) de la curva 02 se conectan en las ranuras
A, B, C del componente Arco 3Pt (Curva> Primitiva) respectivamente. .

La siguiente imagen muestra el conjunto final de arcos. Desactivamos la vista


previa de todos los componentes excepto / Arc 3Pt (también puede ver las dos curvas
dibujadas en Rhino).

Por último, la salida A del componente Arc 3Pt se conecta a la entrada C del
componente Loft (Surface> Freeform) para generar una superficie loft, definida como
una superficie a través de un conjunto de curvas de sección.

La entrada O de Loft se utiliza para modificar las opciones de superficie. Las


opciones se pueden establecer localmente o, alternativamente, modificar mediante el
componente Loft Options (Superficie> Forma libre) conectado a la entrada O. Como
ejemplo, cuando el número de curvas de sección no es suficiente para crear una
superficie "suave", se debe establecer la opción de reconstrucción (entrada Rbd).
Loft Options también permite cerrar el loft, ajustar las costuras y seleccionar el
tipo de loft, que se define mediante un número entero (0 = Normal, 1 = Suelto, 2 =
Apretado, 3 = Recto, 4 = Desarrollable, 5 = Uniforme).

El algoritmo ahora está completo. Para modificar la superficie, los arcos


recubiertos se pueden manipular utilizando el componente Repeat Data. La
modificación de un algoritmo cambiando las entradas es un método de trabajo común
en Grasshopper. Por ejemplo, si el control deslizante numérico conectado al
componente vectorial de la unidad Z se reemplaza con una lista de números repetidos
(con la longitud de la lista establecida igual al número de elementos del
componente de Line), la geometría de transición se actualizará y expresará el
cambio en la traslación de z, en su forma de superficie. La superficie se puede
variar a través de cambios infinitos de la entrada de secuencia en el componente
Unit Z.

2.2.4 Random / Construct Domain

El componente Random (Sets> Sequence) genera una lista de (N) números aleatorios
dentro de un dominio numérico definido (R). La entrada S especifica el valor
semilla del componente, si el valor semilla se cambia y todas las demás entradas
permanecen iguales, se generará una nueva lista de valores aleatorios. De forma
predeterminada, el componente Random genera números reales. Para especificar
números enteros, haga clic con el botón derecho en el componente Random y
seleccione la opción Números enteros del menú contextual y aparecerá una bandera de
Enteros negra en la parte inferior del componente. El componente Construct Domain
(Maths> Domain) se utiliza para definir un dominio numérico entre dos extremos
numéricos. Por ejemplo, un dominio definido entre un valor mínimo de 2 y un valor
máximo de 8 se conecta a un componente Random especificando que se va a generar una
lista con cinco elementos. La salida del componente aleatorio son cinco números
aleatorios dentro del dominio numérico.

2.2.5 Range

El componente Range (Sets> Sequence) define un rango de números dentro de un


dominio numérico (D) con (N) subdivisiones. En otras palabras, el dominio numérico
se divide en partes iguales. Cuando el dominio se divide en N partes, se definen
valores N + 1.

2.3 Funciones matemáticas

El componente Evaluate F(x) (Maths> Script) se puede utilizar para definir


secuencias numéricas que siguen funciones matemáticas.

2.3.1 Funciones de una variable

Una función de una variable tiene un dominio de valores en el eje X y un codominio


de valores en el eje Y, lo que significa que para cada valor de entrada (xi) la
función proporciona un valor de salida (yi).

Para construir un algoritmo con una función matemática:

1. Definición de una función.

El componente Evaluate F(x), puede definir una función al hacer doble clic en el
nodo para mostrar el Expression designer. Por ejemplo, una parábola puede definirse
por la ecuación explícita y = x ^ 2, así que se escribiría en el Expression
designer. El operador cuadrado se puede encontrar dentro de la biblioteca de
operadores y una lista completa de funciones y sus firmas están disponibles
haciendo clic en el botón f: n> r (en la esquina superior derecha).

Alternativamente, se puede definir una función ingresando una ecuación en un panel


y conectando su salida a la ranura de entrada F del componente Evaluate.

2. Definiendo un dominio

Para que una función devuelva un resultado, la función requiere valores numéricos
como entrada. El componente Construct Domain junto con el componente Range pueden
generar salida numérica. Por ejemplo, si se conecta un dominio [-2,2] a un
componente de rango con N establecido a 10,11 valores, que se dividen igualmente
con respecto al dominio. Los valores numéricos de salida se pueden usar como
entrada para el componente Evaluate F (X).

La salida R del componente Evaluate es el co-dominio de la función. Examinando la


salida del componente Evaluate, la lista de números disminuye hasta cero y luego
aumenta nuevamente después de cero; Los resultados esperados de la función x ^2.

Cada punto de una curva matemática plana tiene dos coordenadas, X e Y, donde X es
un valor del dominio y Y el co-dominio de salida. Si las salidas del componente del
Range (R) y el componente Evaluate (R) están conectadas al componente Construct
Point en las ranuras (x) y (y) respectivamente, se generará un conjunto de puntos
que definen la apariencia gráfica de la función. Se puede dibujar una curva a
través de estos puntos utilizando el componente Interpolate Curve (Curve> spline)

2.3.2 Funciones de dos variables.

Una función de dos variables tiene un dominio compuesto por un subconjunto de


puntos que pertenecen al plano XY y un co-dominio de valores en el eje Z, lo que
significa que para cada valor de entrada (XI, YI), la función proporciona un valor
de salida (ZI ).

Para generar una superficie a partir de una función de dos variables: primero,
defina una ecuación y la segunda defina el dominio. Luego, construye puntos con la
salida respectiva (XI, YI, ZI) e interpolan una superficie a través de los puntos.
Las funciones de dos variables tienen un dominio bidimensional, lo que significa
que se requieren valores de entrada para (xi) y (yi) para ser definidos.

Por ejemplo, un paraboloide puede ser definido por la ecuación; z = - ((x2 + y2) /
4) +4. Para generar una cuadrícula de puntos para definir una superficie
paraboloide, se requieren las listas de entrada (XI) y (Yi) para que se
"referenciadas" antes de evaluar la función.

El componente Evaluate genera una coordenada (zi) para cada par de entrada (xi, yi)
basada en la ecuación especificada. El componente Construct Point combina los datos
de las listas de salida (xi), (yi) y (zi) en un punto (xi, yi, zi).

El componente SrfGRID (surface> FreeForm) crea una superficie de una cuadrícula de


puntos (ver 3.6). Para generar la superficie paraboloide, la salida PT del
Construct Point está conectado a la entrada P del componente SrfGRID, y el
componente List Length se usa para especificar la cantidad de puntos en la
dirección X o Y y así satisfacer la (U) Entrada del componente SrfGRID.

La siguiente imagen ilustra cómo es posible obtener la configuración real del Museo
Británico, el gran techo de la corte se refiere a las ecuaciones publicadas por
Chris JK Williams ^. La forma de los techos se genera por una suma de tres
ecuaciones de dos variables.

2.4 Condiciones
El componente Evaluate no solo es útil para crear curvas y superficies a partir de
ecuaciones específicas, sino que también nos permite definir condiciones en
Grasshopper. A menudo, es crucial que un algoritmo realice diferentes operaciones
si se cumple o no una condición. Se puede establecer una condición en la entrada F
de Evaluate (como alternativa, puede escribir la condición dentro del editor del
Diseñador de expresiones) y puede incluir un número arbitrario de variables (x,
y, ...).

2.4.1 Operadores lógicos / valores booleanos

Las condiciones se crean a través de variables y operadores lógicos (de


comparación) como: Igualdad (=), Menor que (<), Mayor que, que se pueden encontrar
en el panel Operadores de la pestaña Matemáticas. Otros operadores (por ejemplo,
desigualdad, menor o igual) se pueden encontrar dentro del editor de Expression
Designer. Por ejemplo, el componente Evaluate se puede utilizar para probar si un
conjunto de variables numéricas cumple una condición definida. Evaluar devuelve
valores booleanos *: Verdadero si se cumple la condición y Falso si no se cumple la
condición.

Las declaraciones condicionales se pueden utilizar para definir Cull Patterns. Por
ejemplo, un conjunto de círculos cuyo radio se calcula utilizando el componente
Deconstruct Arc / DArc (Curva> Análisis) se comparan con el enunciado condicional
R> 8, los círculos que satisfacen esta condición se extruyen 20 unidades en la
dirección z, círculos que no satisfacen esta condición son sacrificados.

Alternativamente, el componente Dispatch (Conjuntos> Lista) se puede utilizar para


filtrar datos con una lista de valores booleanos correspondiente. El componente
Dispatch devuelve dos listas: la lista A contiene datos que devolvieron True, es
decir, se cumplió con la declaración condicional, y una lista B contiene datos que
devolvieron Falso, es decir, datos que no cumplieron con la declaración
condicional. Haciendo referencia al ejemplo anterior, Despatch compara el radio de
los círculos con la declaración condicional (R> 8) y ordena los círculos de modo
que los círculos que devuelven Verdadero se extruyen 20 unidades en la dirección z
y los círculos que devuelven Falso se extruyen 5 unidades en la dirección z.

El componente Concatenate {Conjuntos> texto), se puede utilizar para unir dos o


múltiples fragmentos de texto. Por ejemplo, la declaración "el gato está sobre la
mesa" se puede crear concatenando los paneles "el gato" y "está sobre la mesa".
Concatenate puede usarse para escribir una condición "paramétrica" concatenando el
texto "x>" escrito dentro de un Panel (no presione ENTER en su teclado después de
escribir "x>" pero confirme con OK dentro de la ventana Propiedades del Panel) con
un Number Slider o entrada de un número genérico.

La salida de Concatenate se puede utilizar como entrada F del componente Evaluate.

2.4.2 Condicional: If/then (si/entonces)

El componente Evaluate se puede utilizar para definir declaraciones if / then, es


decir, la declaración condicional if (prueba. A, B) devuelve A si la prueba es
verdadera, B si la prueba es falsa.
Las entradas A y B no tienen que ser números. Por ejemplo, el texto "gato" se puede
devolver cuando la declaración es falsa.

2.4.3 Otros operadores: Contains (contiene)

El operador Contains contiene (s, "p") comprueba si la cadena p está en la lista de


datos s. El componente Evaluate prueba el operador y devuelve un valor booleano. El
siguiente ejemplo prueba si aparece "4" dentro de la lista de números conectados a
la entrada x, y arroja Verdadero como valor booleano.

El operador Contains también se puede utilizar para buscar geometrías específicas


dentro de una lista. Por ejemplo, para probar si una lista de geometrías
(importadas por un contenedor de geometría) contiene una línea, el operador
Contains (x, "line") se puede configurar en la entrada F de Evaluar. Luego, un
Panel debe usarse como un "puente" entre Geometría y la entrada x de Evaluar. Las
descripciones del panel que contienen el texto "Línea" darán como resultado una
declaración Verdadero y cualquier otro texto dará como resultado una declaración
Falsa.

2.5 Remapping numbers / Attractors (Página 114)

El componente Remap Numbers (Maths> Domain) evalúa una lista de números que van de
A a B y los redimensiona proporcionalmente a un nuevo dominio numérico A'a B'. El
componente Remap requiere una lista para reasignar (V), un dominio de origen (S) y
un dominio de destino (T). El dominio de origen de la secuencia numérica se puede
encontrar usando el componente Bounds (Matemáticas> Dominio), mientras que el
dominio de destino se especifica usando el componente Construct Domain. Por
ejemplo, la lista de números (2, 4, 6, 8) cuyo dominio de origen es [2,8] se puede
reasignar a un nuevo dominio [0,1], dando como resultado la lista de valores (0.0,
0.33, 0.67, 1.0)

2.5.1 Atractores

El componente Remap se utiliza para realizar transformaciones basadas en la


distancia, utilizando "atractores". Un atractor es una entidad geométrica: un
punto, una curva u otro elemento, que se utiliza para modificar la geometría a su
alrededor dentro de límites definidos. El impacto que tiene un atractor sobre otra
geometría depende de la distancia entre el atractor definido y el objeto que está
manipulando. Para visualizar cómo un atractor puntual puede escalar una cuadrícula
de círculos, se utilizará como ejemplo un algoritmo simple.

El componente Círculo (Primitivo> Curva) genera un círculo con el centro en el


punto {0,0,0} y un radio de 1. El círculo definido se ordena bidimensionalmente
usando Mover y Serie en conjunto, creando una cuadrícula de círculos.

Un conjunto de puntos de Rhino se utiliza como mecanismo de atracción midiendo la


distancia entre el punto de atracción y el centroide de cada círculo y devuelve una
lista de valores numéricos. Para escalar los círculos se requiere un factor de
escala entre 0 y 1. El componente Remap se utiliza para reasignar las distancias
reales (entre el punto atractor y cada centroide) proporcionalmente a un nuevo
dominio entre (0,1). Un factor de escala de cero produciría resultados nulos, por
lo que se utiliza un valor cercano a cero.

El componente Scale (Transformar> Euclidiana), escala la geometría (G) de acuerdo


con un centro de escala (C) y un factor de escala (F). El dominio reasignado (0,1]
se utiliza como factores de escala. A medida que se mueve la posición de los puntos
atractores, las distancias respectivas cambian y la escala se actualiza
asociativamente. El componente Limit (Superficie> Forma libre) crea superficies
planas a partir de curvas cerradas. El componente Degradado (Parámetros> Entrada)
se puede utilizar para mostrar los factores de escala respectivos gráficamente
mediante una gradación de color. Para cambiar el color preestablecido del
componente Gradient: haga clic con el botón derecho en el componente, seleccione el
ajuste preestablecido del submenú y especifique un degradado de color.

Una curva también se puede utilizar como atractor mediante el componente Curve
Closest Point (Curve> Analysis). El componente Curve Closest Point mide la
distancia (D) entre el centro de cada círculo y el punto más cercano de la curva.
Los factores de escala se pueden visualizar utilizando el componente Gradient.

Los valores reasignados también se pueden usar para mover los puntos del centroide.
Por ejemplo, los puntos se pueden mover en la dirección z. Cambiar el dominio
reasignado a [3,15] enfatiza la traducción cuando la multiplicación escalar se
lleva a cabo dentro del componente Unit Z.

También se pueden definir múltiples puntos atractores. Por ejemplo, se pueden


establecer dos puntos atractores sumando sus distancias relativas al centroide de
cada círculo. La lista para reasignar (V) será la salida del componente Addition
(Matemáticas> Operadores). Si invertimos los extremos del dominio [0.82, 0.01]
obtenemos un efecto de escala opuesta (imagen B).

Para limitar el efecto de un atractor, la distancia entre el punto y el centroide


se puede dividir por un número arbitrario, que es el rango operativo del atractor.
La división devuelve una lista de valores que están conectados a la entrada F del
componente Scale. Los factores de escala deben ser menores que 1 para reducir la
geometría original. El componente Minimum (Matemáticas> Util) se puede utilizar
para probar si una lista de números es mayor que un número de comparación (B). Los
valores que satisfacen el componente se reemplazan por el valor mínimo (B). Por
ejemplo, las distancias superiores a 0,8 se sustituyen por 0,8 como factor de

3_Control: curvas y superficies en Grasshopper


Antes del advenimiento de las herramientas digitales, la investigación formal se
limitaba a las técnicas de dibujo tradicionales que se basaban en primitivas
geométricas y modelos matemáticos básicos. Las herramientas emergentes y las
técnicas de fabricación han cambiado la forma en que los diseñadores conciben la
arquitectura, abriendo nuevas trayectorias formales. Este cambio de paradigma de
lápices, cuadrados y brújulas a herramientas informáticas se ha producido en las
últimas tres décadas.
La computadora o, más específicamente, el software de modelado 3D ha superado los
límites de la exploración formal al digitalizar el diseño iterado manualmente. La
próxima transición de época: el modelado algorítmico requiere un conocimiento
sólido de los principios detrás de la generación de formas; específicamente una
comprensión de las geometrías NURBS.

3.1 curvas NURBS

NURBS o Non-Uniform Rational B-Splines son representaciones matemáticas de la


geometría 3D que pueden describir con precisión cualquier forma, desde una simple
línea, círculo, arco o curva 2D hasta la superficie o sólido de forma libre
orgánica 3D más complejo.

Una curva NURBS es una curva matemática definida por su grado, un conjunto de
puntos de control ponderados, un vector de nudos y una regla de evaluación:

• Grado: un número entero positivo. Por ejemplo, las líneas NURBS y las polilíneas
NURBS son de grado 1, los círculos NURBS son de grado 2 y la mayoría de las curvas
de forma libre son de grado 3 o 5. El valor igual a grado + 1 se llama orden.

• Puntos de control: Una curva NURBS está condicionada por la posición y el peso de
los puntos de control. Los pesos regulan la atracción entre los puntos de control y
la curva; un peso> 1 atrae la curva y un peso entre 0 y 1 repele la curva. El
número de puntos de control no puede ser menor que el orden (grado + 1).

• Nudos: son una lista de (grados + N-1) números, que controlan la suavidad de una
curva.

• Regla de evaluación: es una fórmula que ingresa: grado, puntos de control y nudos
y da salida a la ubicación de un punto.

Las curvas NURBS se pueden dibujar colocando puntos de control en un espacio


tridimensional o en un plano bidimensional. La siguiente imagen es una curva NURBS
plana con un grado de 3 controlada por la posición de los 7 puntos de control.

FIGURA 3.1
Una curva NURBS con 7 puntos de control.

Si el grado de la curva cambia, se generarán diferentes curvas. Una curva de grado


1 coincide con el polígono de control.

FIGURA 3.2
Curvas NURBS con 7 puntos de control y diferente grado.
La siguiente imagen muestra cómo el peso de los puntos de control afecta una curva
NURBS.

GRÁFICO 3.3
Un punto de control con un peso> 1 atrae la curva,
por el contrario, un punto de control con un peso entre 0 y 1 empuja fuera de la
curva.

3.2 Representación paramétrica de una curva

El entorno de Rhino se basa en un sistema de coordenadas mundial (WCS) y los puntos


de una curva NURBS se definen mediante un triplete de coordenadas (x, y, z,). Si z
= 0 para cada punto, la curva es una curva plana y está definida por las
coordenadas (x, y).

FIGURA 3.4
Cada punto de una curva NURBS está definido por un triplete de coordenadas.

Otra forma de encontrar puntos en una curva se basa en la representación


paramétrica. Las coordenadas de un punto arbitrario P se expresan en función de una
variable t que oscila entre 0 y 1. Para t = 0 y t = 1 obtenemos los puntos finales
de la curva y para t que oscila entre 0 y 1 describimos la curva completa.

También podemos decir que una curva está parametrizada entre 0 y 1 o,


alternativamente, que su dominio es [0,1]. La representación paramétrica se puede
considerar como un sistema de coordenadas local (LCS). A grandes rasgos, se trata
de un sistema puesto "sobre" la curva que presenta grandes ventajas ya que solo
requiere un parámetro para identificar un punto, que aún está definido en el
Sistema de Coordenadas Mundial (ver imágenes a continuación).

Es importante señalar que t no mide distancias. Podemos imaginar t como el tiempo


que una "partícula" tarda en pasar de t = 0 a la posición instantánea P (t). Este
tiempo se ve afectado por la posición de los puntos de control y, en particular, el
movimiento de la "partícula" se ralentiza cuando pasa por una concentración de
puntos de control (ver imagen siguiente). Por esta razón t = 0,5 no es el parámetro
que especifica el punto medio de la curva.

Incluso si la curva se reconstruye con Rhino, lo que da como resultado una


redistribución uniforme de los puntos de control, el punto medio no coincide con el
punto correspondiente a t = 0,5.

3.3 Análisis de curvas en Grasshopper

Los siguientes párrafos introducirán componentes, lógicas y estrategias para


controlar las curvas NURBS usando Representación Paramétrica.
3.3.1 Encontrar puntos en una curva: componente Evaluate Curve

La representación paramétrica permite a los usuarios encontrar puntos a lo largo de


una curva. El componente Evaluate Curve (Curva> Análisis) requiere una curva (C)
para analizar y un parámetro (t) en el dominio de la curva para evaluar, que se
puede definir mediante un control deslizante numérico.

La representación paramétrica asume que una curva está parametrizada entre 0 y 1.


Sin embargo, las curvas en Rhino suelen tener dominios diferentes. El dominio de
una curva se puede establecer en [0,1] reparametrizando la curva. La opción
Reparametrizar está disponible haciendo clic con el botón derecho en el componente
de la curva y seleccionando Reparametrizar en el menú contextual. Si se establecen
varias curvas con dominios diferentes, su dominio local se establecerá en [0,1]
seleccionando la opción Reparametrizar.

FIGURA 3.5
La opción Reparametrizar está disponible dentro del menú contextual del componente
Curva.

La salida de Evaluate Curve (P) expresa la ubicación de los puntos en el sistema de


coordenadas mundial, la salida T es el vector tangente en f. El componente Vector
Display se puede utilizar para visualizar el vector tangente (T). El vector
tangente (T) es un vector unitario que se puede amplificar mediante la
multiplicación escalar utilizando el componente Multiplication.

3.3.2 Inversión de dirección: componente Flip Curve

Las curvas parametrizadas se describen mediante un punto inicial (t = 0), un punto


final (t = 1) y una dirección desde el punto inicial hasta el punto final. La
dirección de las púas depende del arado en el que se dibujó la curva, es decir, del
orden de los puntos de control que definen la curva.

Reparametrizar una curva no cambia la dirección. La dirección de una curva se puede


cambiar utilizando el componente Flip Curve (Curva> Util). La siguiente imagen
muestra 2 curvas con direcciones opuestas: La curva 1 tiene una dirección de
izquierda a derecha, mientras que la curva 2 tiene una dirección de derecha a
izquierda. A es el punto de inicio de la Curva 1, mientras que B es el punto final
de la Curva 2. Nuestro objetivo es conectar los puntos A y B mediante una línea. Si
usamos un componente Evaluate Curve para extraer puntos, debemos cambiar
previamente la dirección de la Curva 1 o la Curva 2 mediante Invertir curva. De
esta forma, el punto B se convertirá en el punto de inicio de la Curva 2 y podremos
crear la línea.

La entrada G de Flip especifica una curva de referencia utilizada para unificar la


dirección del conjunto de curvas. Por ejemplo, un conjunto de curvas con diferentes
direcciones (las curvas 1 y 2 están orientadas de izquierda a derecha y las
restantes están orientadas de derecha a izquierda) se configuran y combinan
(consulte la siguiente imagen). La lista combinada está conectada a la entrada C de
un componente Flip y la Curva 4 se establece como la curva guía en la entrada (G),
lo que da como resultado un conjunto de curvas orientadas de derecha a izquierda.
El componente Evaluar curva se puede utilizar para especificar puntos a lo largo de
las curvas (es importante volver a parametrizar la entrada C)

3.3.3 Encontrar puntos en una curva: conversión de mundo a local

De forma predeterminada, los puntos de ajuste de Rhino se expresan en el Sistema de


coordenadas mundial. El componente Curve CP (Curva> Análisis) se utiliza para
convertir un punto expresado en el WCS al parámetro t local de una curva dada. La
salida t de la Curve CP es el parámetro en el dominio de la curva expresado en el
Sistema de Coordenadas Local.

El componente Curve CP permite a los usuarios encontrar el punto P'más cercano en


una curva, dado un punto externo P. La distancia de desplazamiento entre los puntos
P y P' es proporcionada por la salida D. Cuando se utiliza la curva CP para
convertir de WCS a LCS: P = P' y D = 0

3.3.4 Encontrar puntos en una curva: componente Point on Curve

Como se discutió en el capítulo 1, el componente Point on Curve (Curva> Análisis)


puede operar de manera similar a los comandos Object Snap de los paquetes CAD. El
componente se puede utilizar para buscar puntos como inicio, trimestre, mitad,
etc., haciendo clic con el botón derecho en el componente y seleccionando un valor
del menú contextual, o especificando un valor dentro del control deslizante.

El componente Point On Curve se basa en la longitud de la curva, no en el dominio


de la curva. De la siguiente manera, un valor de 0.5 expresado por el control
deslizante de componentes corresponde al punto medio de una curva, a diferencia del
componente Evaluate Curve. El componente Point On Curve no requiere que se vuelva a
parametrizar la curva de entrada.

3.3.5 Encontrar puntos en una curva: componente Evaluate Lenght

El componente Evaluate Lenght (Curva> Análisis), encuentra un punto (P) a una


distancia medida como una longitud de arco (L) desde el punto inicial t = 0. La
entrada (L) es un número entre 0 y la longitud de la curva; que se puede calcular
utilizando el componente Curve Lenght (Curva> Análisis). El componente Evaluate
Lenght genera coordenadas en el WCS (salida P) así como en el LCS (salida t).

3.3.6 Dividir una curva: componente Divide Curve

Como se discutió en el capítulo 1 (1.7.3), el componente Divide Curve (Curva>


División) genera un conjunto de puntos (P) al dividir una curva en (N) arcos de
igual longitud. Como resultado, se generan N + 1 puntos en el caso de curvas
abiertas y N en el caso de curvas cerradas. El componente calcula los vectores
tangentes (T) en los puntos de división, así como los parámetros LCS (t).

3.3.7 Dividir una curva: componente Divide Lenght

El componente Divide Lenght (Curva> División) divide una curva en segmentos


especificados por la longitud de arco (L). Si la longitud de la curva no es un
múltiplo de (L), resultará un "arco sobrante" con una longitud diferente de (L).

3.3.8 División de una curva: componente Divide Distance

El componente Divide Distance (Curva> División) divide una curva en segmentos


calculando las intersecciones secuenciales de los círculos y la curva. Dependiendo
del valor de la distancia radial (D) resultará un "arco sobrante" con una distancia
PE diferente de (D).

3.3.9 División de una curva: componente Contour

El componente Contour (Curve> Division), crea un conjunto de contornos de curvas


dados una curva (C), un punto de inicio (P), un vector (N) y una distancia (D). Las
intersecciones resultantes se generan como coordenadas de puntos en el WCS (P) así
como en el LCS (t).

3.3.10 División de una curva: componente Shatter

El componente Shatter (Curve> Division) divide una curva en segmentos en (t)


parámetros de entrada que generan segmentos, en lugar de puntos. Los parámetros
para dividir en (t) pueden establecerse especificando un valor dentro del dominio
LCS [0,1] o suministrados por la salida de otros componentes. Por ejemplo, un
conjunto de curvas de Rhino se puede dividir en dos partes usando un punto de
división (establecido de Rhino) conectando la salida de Curve CP a la entrada t del
componente Shatter, lo que da como resultado dos curvas como se observa en una
panel.

El parámetro t también se puede satisfacer utilizando un control deslizante para


especificar un valor dentro del dominio numérico [0,1].

De manera similar, la salida t del componente Divide Curve se puede usar como un
parámetro de división.
3.4 Noción de curvatura para curvas planas

La curvatura de una curva plana c medida en un punto P calcula la desviación de c


de su línea tangente cerca de P. La curvatura de una curva genérica varía de un
punto a otro. Para definir matemáticamente la curvatura hay dos supuestos básicos:

• La curvatura de una línea recta es cero en todos los puntos;


• La curvatura de un círculo es constante. En particular, la curvatura es igual a
cero cuando el radio se acerca al infinito (es decir, una línea recta es un círculo
con un radio infinito).

De la siguiente manera, la curvatura (k) se puede definir como el recíproco del


radio (r):

k = 1 / r {1]

Para extender este concepto a curvas genéricas se utiliza una construcción


geométrica: el círculo osculador. Dado un punto P de una curva genérica c, el
círculo que más se aproxima a la curva cerca de P se define como el círculo
osculante en P. El valor de curvatura k de la curva c en el punto P se define como
el recíproco del radio de los círculos osculantes.

La curvatura también se puede definir como el vector k con dirección PO y una


magnitud igual al recíproco del radio del círculo osculante. Dado que la curvatura
es el cociente de dos números positivos y, por definición, el radio es un número
positivo, la curvatura de una curva plana es siempre un número positivo. Sin
embargo, la convención de curvatura con signo denota un signo positivo si el
círculo osculador se encuentra a la izquierda de acuerdo con la dirección
predeterminada y tiene un signo negativo si el círculo osculador se encuentra a la
derecha de la curva.

Según la dirección predeterminada en sentido contrario a las agujas del reloj, el


círculo tiene una curvatura negativa.

El componente Curvature (Curva> Análisis) muestra gráficamente el vector de


curvatura k y el círculo osculador en un punto genérico P expresado en el Sistema
de Coordenadas Local (LCS). El valor de curvatura de la curva se puede calcular de
dos maneras: como el recíproco del radio del círculo osculante (C), que se puede
extraer usando la salida R del componente Deconstruct Arc-DArc (Curva> Análisis), o
como la magnitud del vector k que se puede calcular usando el componente Longitud
del vector (Vector> Vector).

El componente Curvature Graph (Curva> Análisis) muestra visualmente la curvatura


como un gráfico.
3.5 Representación paramétrica de una superficie

Al igual que las curvas, las superficies se pueden asociar a un LCS. Los parámetros
U y V (que oscilan entre 0 y 1) operan de manera similar para superficies como el
parámetro t opera para curvas.

Para cada valor de {u}, se puede encontrar que los puntos P (u1, v) constituyen la
"curva de sección" C 1. Como sigue, para cada valor de {v} se puede encontrar que P
(u, v1) constituyen la "curva de sección" C2. Las curvas C1 y C2 se denominan
isocurvas o curvas isoparamétricas. En particular, C1 y C2 son las curvas
isoparamétricas de la superficie (S) en P (u1, v1). Una isocurva es una curva con
valores constantes de u o v en una superficie. Las isocurvas crean una cuadrícula
rectangular que generaliza la noción de cuadrícula cartesiana en una superficie
curvada. Este concepto es válido para todas las superficies de forma libre, ya que
una superficie NURBS siempre se puede imaginar como la deformación de una
superficie plana-rectangular. Además, las superficies tienen dominios
bidimensionales (o dominio) con ejes u y v definidos.

Como se muestra a continuación, podemos obtener una superficie compleja de forma


libre a partir de una superficie plana rectangular. La cuadrícula rectangular-
ortogonal de isocurvas se convierte en una cuadrícula rectangular distorsionada.

Sin embargo, las superficies no rectangulares se basan en rejillas rectangulares.


Esto se puede visualizar dibujando una superficie de un círculo o de una elipse y
activando la cuadrícula rectangular de puntos de control. Rhino oculta el área
recortada, pero el dominio real es siempre rectangular.

Una superficie que no contiene su dominio se denomina Superficie recortada. Por el


contrario, las superficies que contienen su dominio se denominan superficies sin
recortar.

3.5 Creación de superficies

Grasshopper proporciona varios componentes para crear superficies; están alojados


en el panel Freeform de la pestaña Surface:

• Extrude: es la forma más sencilla de crear una superficie. El componente


Extrude(Freefrom> Surface) requiere una curva de perfil (abierta o cerrada) o una
superficie para extruir según un vector. Extrude produce una superficie con una
sección constante.

• Boundary Surface: crea una superficie plana recortada o sin recortar a partir de
una colección de curvas con un límite perimetral. El componente Boundary Surface
(Freeform> Surface) requiere curvas cerradas planas y continuas para dar como
resultado una superficie.

• Loft: crea una superficie a través de un conjunto de curvas de sección ordenadas.


El componente Loft (Freeform> Surface) requiere al menos dos curvas para generar
una superficie. Con el componente Loft Options (Freeform> Surface) se controla el
método de creación de la superficie, en caso contrario funcionará el método
predeterminado. Loft Options especifica si una superficie está cerrada, si las
juntas deben ajustarse, si las superficies deben reconstruirse, una tolerancia de
reajuste, así como uno de los seis tipos de recubrimiento especificados por un
número entero: 0 = Normal, 1 = Suelto, 2 = Ajustado, 3 = Recto, 4 = Desarrollable,
5 = Uniforme.

• Surface from Points: crea una superficie a partir de una cuadrícula de puntos. El
componente Surface from Points (Freeform> Surface) es útil para crear superficies a
partir de otras superficies, o como se discutió en 2.3.2 a partir de funciones
matemáticas.

El componente Surface from Points requiere una cuadrícula de puntos y el número de


puntos en la dirección u a declarar. Por ejemplo, se puede crear una superficie a
partir de una cuadrícula de puntos de 9 x 6 especificando un recuento U de 6.

• Edge Surface: crea una superficie a partir de dos, tres o cuatro curvas. El
componente Edge Surface (Freeform > Surface) interpola una superficie a partir de
curvas de borde ordenadas.

• Patch: ajusta una superficie a través de un conjunto de puntos o curvas que están
abiertas o cerradas. El componente Patch (Freeform > Surfaces) genera una serie de
curvas perpendiculares, llamadas vanos, a partir de curvas de entrada que componen
una superficie recortada o sin recortar. Las curvas de tramo rara vez son paralelas
a cualquier borde de la superficie de salida, por lo que el componente Patch se
utiliza cuando no es posible realizar otros métodos.

• Network Surface: opera en dos conjuntos de curvas ordenadas para crear una sola
superficie. El componente Network Surface (Freeform > Surfaces) requiere curvas en
la dirección u y las curvas en la dirección v. La entrada C especifica el tipo de
continuidad de la superficie (0 = Suelta, 1 = Posición, 2 = Tangencia, 3 =
Curvatura. El componente Network Surface permite un mayor control de los bordes de
las superficies, en comparación con el componente Loft.

• Sweep 1 y Sweep 2: genera una superficie usando una curva de sección S barrida a
lo largo de una o dos curvas de carril R. El Sweep 1 (Freeform > Surfaces) debe
usarse con una curva de carril y el Sweep 2 (Freeform > Surfaces) con dos curvas de
carril.

• Revolution and Rail revolution: generan superficies a partir de la revolución de


una curva de perfil P alrededor de un eje o utilizando un carril de barrido
respectivamente.
3.7 Análisis de superficies con Grasshopper

3.7.1 Encontrar puntos en una superficie: Componente Evaluate Surface

La representación paramétrica se utiliza para encontrar puntos en una superficie.


El componente Evaluate Surface (Surface>Analysis) requiere una superficie (S) para
analizar y dos coordenadas LCS (u y v). El componente MD Slider (Params> Input) se
puede utilizar para asignar las coordenadas u y v. MD Slider (o control deslizante
multidimensional) es una extensión bidimensional del Number Slider. Por defecto,
sus valores oscilan entre 0 y 1 en las direcciones u y v, asumiendo que la
superficie de entrada está parametrizada entre el mismo intervalo.

En cuanto a las curvas, el componente Surface y la entrada S de Evaluate Surface


nos permiten reparametrizar la superficie de entrada haciendo clic derecho en el
componente Surface o la entrada S de Evaluate Surface y seleccionando
Reparametrizar.

Las salidas del componente Evaluate Surface: un punto (P) expresado en el WCS, un
vector normal (N) en P y un plano tangente (F) en P. La dimensión mostrada de los
planos se puede configurar desde Display> Preview Plane.

3.7.2 Encontrar puntos en una superficie: conversión de WCS a LCS

El componente Surface CP (Analysis> surface) se puede utilizar para convertir un


punto P que se encuentra en una superficie expresada en el WCS a un punto expresado
en el LCS. Más específicamente, el componente Surface CP encuentra el punto más
cercano P' en una superficie, dado un punto externo P. La distancia de
desplazamiento entre los puntos P' y P es proporcionada por la salida (D). Cuando
el componente Surface CP se utiliza para convertir entre WCS y LCS: P = P' y D = 0.

3.7.3 Dirección de inversión: componente Reverse Surface Direction

El componente Surface Direction (LunchBox> Util) invierte la dirección uv de una


superficie. Tab Lunch Box, desarrollado por Nathan Miller "está disponible como un
complemento para Grasshopper e incluye utilidades para formas matemáticas, sistemas
de paneles, estructuras y flujo de trabajo.

La entrada R de Surface Direction especifica la opción inversa: si R = 0, las


direcciones no se invertirán, si R = 1, la dirección u se invertirá, si R = 2, la
dirección v se invertirá y si R = 3 ambas u y v se invertirán. A menudo es
necesario volver a parametrizar la salida de RevSrf.
3.7.4 Extracción de isocurvas: componente Isocurve

El componente Isocurve (Curve> Spline) extrae las isocurvas de una superficie en un


punto específico (P), dadas sus coordenadas locales (uv). Las curvas
isoparamétricas U (paralelas a la dirección u) y V (paralelas a la dirección v) se
extraen por separado. Las isocurvas U o V se pueden visualizar de forma
independiente conectando un componente Curve a la salida U o V y ocultando el
componente Isocurve.

NOTA 9
Nathan Miller es Socio Asociado y Director de Soluciones de Arquitectura e
Ingeniería en CASE, donde es responsable de liderar los esfuerzos en la estrategia
de diseño computacional y el modelado complejo y la racionalización geométrica. Su
experiencia en programas de modelado 3D y su fluidez en varios lenguajes de
programación y scripting proporcionan soluciones y capacidades de vanguardia para
importantes clientes de AECO. Las exploraciones sobre diseño computacional se
publican en su blog: http://www.theprovingground.org/

3.7.5 Dividir una superficie: componente Divide Surface

El componente Divide Surface (Surface> Util) genera una cuadrícula de puntos en una
superficie. Los puntos (P) son los vértices de intersección de una cuadrícula de
isocurvas calculadas dividiendo los ejes u y v de manera uniforme por una entrada
de número entero positivo. El componente Dividir superficie produce: vectores
normales (N) en los puntos (P), así como su coordenada local (uv).

3.7.6 División de una superficie: componente Isotrim

El componente Isotrim-SubSrf (Surface> Util) divide una superficie en un conjunto


de sub-superficies contiguas basadas en una cuadrícula de isocurvas de división.
Por ejemplo, la imagen de abajo es una superficie dividida en 50 subsuperficies.

El componente Isotrim se usa junto con el componente Divide Domain ^ (Maths>


Domain). El componente Divide Domain ^ establece el número de divisiones en las
direcciones u y v generando una cuadrícula de corte en la superficie para que opere
el componente Isotrim.

El componente Isotrim genera un conjunto de superficies sin recortar parametrizadas


de acuerdo con el dominio de la superficie principal. Por ejemplo, el dominio de la
subsuperficie inferior izquierda es [0; 0.1] en la dirección u y [0; 0.2] en la
dirección v.

Cada subsuperficie se puede parametrizar entre 0 y 1, haciendo clic derecho en la


salida S del componente Isotrim y seleccionando Reparametrizar en el menú
contextual.

Si se establece 1 como la entrada U o la entrada V del componente Dividir dominio


^, se generará una serie de franjas contiguas que siguen a la superficie principal.
Los patrones se pueden crear usando el componente CullPattern (Sets> Sequence) con
una lista, por ejemplo, de (Verdadero, Verdadero, Falso) entradas booleanas.

3.7.7 Estrategia: división desigual

La cuadrícula de corte generada por Divide Domain está espaciada uniformemente


porque los ejes u y v están divididos en longitudes iguales por los valores de
entrada U y V, respectivamente. Para generar una cuadrícula espaciada de manera
desigual, es necesario ajustar la distribución de puntos dentro de u y v.

Para construir una cuadrícula con espaciado desigual: primero, el dominio


bidimensional debe dividirse en sus componentes monodimensionales U y V usando el
componente Deconstruct Domain ^ (Maths> Domain), luego se cambia la distribución de
puntos dentro de los dos dominios (U y V) por el componente Graph Mopper (Params>
Input) establecido en Bezier, haciendo clic derecho en el componente y
especificando Bezier en el menú contextual; a continuación, el componente Construct
Domain^ (Matemáticas> Dominio) vuelve a ensamblar los dominios unidimensionales en
un dominio bidimensional y, finalmente, la superficie se divide utilizando el
componente Isotrim. Actuar sobre los pinzamientos del gráfico cambiará el espaciado
de la cuadrícula.

3.7.8 Descomposición de una superficie: componente Deconstruct Brep

Las superficies NURBS se pueden imaginar como un objeto geométrico compuesto por
tres entidades geométricas: caras, aristas y vértices.

Para cada superficie:


• Una cara (F0). Una cara es una porción limitada de superficie;
• Cuatro aristas (E0, E1, E2, E3). Los bordes son piezas de curvas delimitadas;
• Cuatro vértices (V0, V1, V2, V3). Los vértices son puntos que se encuentran en
las esquinas y se pueden extraer.

El componente Deconstruct Brep (Surface> Analysis) se utiliza para extraer caras,


aristas o vértices de una superficie.

El término Brep (o representación de límites) describe una forma de definir formas


geométricas utilizando límites. Los primitivos tales como cajas, cilindros, conos y
otros sólidos geométricos se definen mediante la representación de límites. Es
decir, que un sólido o una polisuperficie se compone de una colección de bordes y
caras "cosidas" para formar un objeto sólido. Por ejemplo, una superficie NURBS se
puede considerar como una colección de una cara.

Por ejemplo, si el componente Center Box (Surface> Primitive) se usa para definir
una caja con un dominio específico y el componente Surface está conectado a la
salida de la caja (B), el componente Surface se volverá rojo para mostrar un error
de falta de coincidencia de datos.
El error se produce porque la caja está constituida por seis superficies unidas en
un Brep. Para extraer superficies, la caja o Brep debe deconstruirse en superficies
utilizando el componente Deconstruct Brep.

3.7.9 División de una superficie usando curvas genéricas: componente Surface Split

Una superficie se puede dividir mediante un conjunto de curvas que coinciden con la
superficie. Por ejemplo, una curva geodésica se puede utilizar como curva de corte
para dividir una superficie en dos partes. Dada una superficie (S) y dos puntos (S)
y (E) colocados en bordes opuestos, se puede construir una geodésica (o una curva
de trayectoria más corta) entre los puntos (S) y (E) de la superficie. Una línea
geodésica puede considerarse una línea recta en un espacio curvo.

El componente Surface Split (Intersect> Physical) divide una superficie (S) en la


curva de división (C) que en este caso está definida por la curva geodésica. El
resultado del componente Surface Split son dos superficies recortadas. Para crear
una superficie recortada a partir de una superficie recortada, el componente
Deconstruct Brep se puede utilizar para extraer los bordes y crear una nueva
superficie utilizando el componente Edge Surface (Surface> Freeform).

3.7.10 Ejemplo: diagrid

Se puede crear una cuadrícula diagonal o una cuadrícula en una superficie objetivo
utilizando la lógica de descomposición de la geometría Brep.

Un conjunto de superficies de Rhino se divide uniformemente en un conjunto de sub-


superficies utilizando el componente Isotrim. Para comprender la lógica de crear
una cuadrícula, se examinará el elemento de la superficie con índice (0) como un
caso de estudio. Se crea una cuadrícula conectando vértices opuestos para cada
subsuperficie. Los vértices se extraen mediante el componente Deconstruct Brep y se
detallan por separado mediante cuatro componentes de List Item. Se crea una línea
entre los elementos (0 a 1) y (1 a 3), creando un módulo del patrón de cuadrícula.

Para extender la lógica de cuadrícula a la superficie general, se elimina el


componente List Item, colocado después del componente SubSrf. Luego, se establece
una conexión directa entre la salida S de SubSrf y la entrada B de Deconstruct
Brep.

Dado que el algoritmo se define conectando los vértices de las sub superficies, la
cuadrícula no coincide con la superficie, excepto en el caso de las sub superficies
planas.

Para generar una cuadrícula que coincida con la superficie objetivo, el componente
Proyect (Curve> Util) se utiliza para proyectar las curvas sobre la superficie
objetivo. La salida del componente Line (L) se conecta a la entrada C del
componente Proyect, y un receptor (conexión inalámbrica) de la superficie original
se conecta a la entrada B del componente Project, proyectando la cuadrícula sobre
la superficie original. . Los segmentos de línea serán reemplazados por curvas como
la salida (C) del componente Proyect.

El algoritmo diagrid no está vinculado a una superficie específica, el algoritmo se


puede utilizar como un generador de diagrid para cualquier superficie. El
componente Pipe (Surface> Freeform) barrerá un círculo de un radio especificado a
lo largo de las curvas diagrid (utilizadas como curvas de carril) creando una
diagrid tridimensional.

3.7.11 Ejemplo: marco espacial

El algoritmo diagrid se puede ampliar para crear un marco espacial. La salida F del
componente Deconstruct Brep es un conjunto de subsuperficies, por lo que el punto
central aproximado de cada subsuperficie se puede calcular utilizando el componente
Evaluar superficie conectado a un MD Slider establecido en (0.5; 0.5). Dado que las
superficies devueltas de la salida F de Deconstruct Brep están parametrizadas de
acuerdo con el dominio de la superficie principal, deben reparametrizarse. La
salida P del componente Evaluate Surface es un conjunto de puntos que se aproximan
a los centros, y la salida N son los vectores normales a las superficies. El
componente Line SDL (Curve> Primitive) se utiliza para crear un conjunto de
segmentos de línea dados: los puntos de inicio (S) declarados por la salida P, las
direcciones (D) declaradas por la salida N y las longitudes (L) especificadas por
un slider. El componente Endpoint se utiliza para extraer los puntos finales de las
líneas que finalmente se conectan a la salida V de Deconstruct Brep, generando los
componentes restantes del marco espacial.

3.7.12 Cuadrícula de puntos equidistantes en una superficie genérica

El espacio paramétrico se puede imaginar como una cuadrícula cartesiana deformada


que se ajusta perfectamente a una superficie arbitraria de forma libre. Las
dimensiones de la cuadrícula dependen tanto del dominio inicial como de su
subdivisión. Como consecuencia, los bordes no tienen la misma longitud a menos que
la curvatura de la superficie sea igual a cero. Para generar una cuadrícula con
bordes de igual longitud, se requiere declarar una cuadrícula de puntos
equidistantes en una superficie. El matemático ruso Pafnuty Lvovich Chebyshev
(1821-1894) desarrolló un método llamado Chebyshev-net para revestir superficies
curvas cortando y cosiendo piezas planas de tela. El método está publicado en el
libro Sobre el corte de nuestra ropa (1878).

Dadas dos curvas transversales arbitrarias u y v que comienzan desde un punto


arbitrario (P) de una superficie, y una longitud de borde especificada (L), se
puede encontrar una red de Chebyshev única. El método Chebyshev-net se puede
aplicar tanto al plano como a cualquier superficie de forma libre. La aproximación
geométrica '”a la red de Chebyshev se puede imaginar como una extensión
tridimensional de la lógica de Divide Distance (ver 3.3.8). Para encontrar una
cuadrícula de puntos equidistantes en un espacio bidimensional, se usa un punto
genérico 0 para dibujar dos curvas ortogonales u y v. La longitud de borde deseada
(L) se define dibujando un círculo (círculo 0) con radio (L) que se origina desde
el punto 0; luego intersectando el círculo con las curvas isoparamétricas u y v
para definir el punto 1 y el punto 2. En los puntos de intersección, los círculos
(círculo 1 y círculo 2) se dibujan con el mismo radio como el círculo 0. La
intersección de círculos define puntos. El procedimiento se repite para los tres
cuadrantes restantes para crear una cuadrícula.

El método de intersecciones puede extenderse a curvas no ortogonales u y v. Dando


como resultado una cuadrícula formada por un conjunto de rombos con lados de igual
longitud.

Además, no es necesario que las curvas u y v sean rectas. La siguiente imagen


muestra una cuadrícula de puntos equidistantes calculados a partir de dos curvas
isoparamétricas con un grado de 3 en una superficie plana que se origina en un
punto arbitrario 0. Una cuadrícula equidistante genera un área sobrante. Las áreas
sobrantes no ocurren en el caso de cuadrículas basadas en dominios, ya que la
longitud del segmento depende de dividir equitativamente el dominio.

La extensión tridimensional del método bidimensional implica una construcción


geométrica tridimensional. Es decir, se usa un conjunto de esferas en lugar de
círculos. Para construir una red tridimensional, se definen dos curvas genéricas g1
y g2 sobre una superficie y se encuentra su intersección (punto 0).

Luego, expandiendo el método bidimensional, se dibuja una esfera (esfera 0) con


radio (L) y se interseca con las curvas g1 y g2 para definir el punto 1 y el punto
2. El punto 3 se encuentra al intersecar dos esferas (esfera 1 y esfera 2) con el
mismo radio (L) con la superficie, generando curvas que se intersecan para definir
el punto 3. El procedimiento debe ser iterado y repetido por los tres cuadrantes
restantes para generar la cuadrícula completa. Grasshopper no proporciona un
componente integrado que permita a los usuarios realizar iteraciones y crear una
red de Chebyshev. De todos modos, como veremos en el capítulo 2, hay disponible un
complemento específico para realizar procedimientos iterativos.

Es importante señalar que una cuadrícula de puntos equidistantes se puede aplanar


en una cuadrícula cuadrada regular como se muestra a continuación. Esta
característica es crucial para formar estructuras de forma libre (gridshells) a
partir de elementos planos y deformables.

3.8 Noción de curvatura para superficies

La curvatura de una superficie en un punto P mide cómo la superficie se desvía del


plano tangente en P. Para definir la curvatura de una superficie, el círculo
osculador debe definirse siguiendo un procedimiento similar al método utilizado
para definir el círculo osculador para curvas planas. Para cada punto P
perteneciente a una superficie arbitraria de forma libre, se puede calcular un
vector normal n. Se puede encontrar un número infinito de planos o planos (pa,
pb, ..., pi) que contienen el vector normal n. Como sigue, se puede encontrar un
conjunto infinito de curvas (co, cb, ..., ci) como la intersección entre los planos
y la superficie.
Para cada curva (co, cb, ..., ci), la curvatura se puede calcular en P como el
recíproco del radio del círculo osculante, lo que da como resultado un conjunto de
valores de curvatura: ka, kb, ..., ki

Dentro del conjunto de curvaturas (ka, kb, ... ki) se pueden encontrar una
curvatura principal mínima k1 y una curvatura principal máxima K2. La curva en la
que se calcula la curvatura K1, se denomina C1. De manera similar, la curvatura K2
se calcula para la curva C2.

El vector tangente a la curva C1, en P se denomina Dirección de curvatura principal


mínima k1.
De manera similar, el vector tangente a la curva C2 en P se denomina Dirección de
curvatura principal máxima k2.

Los dos métodos principales para definir la curvatura, la curvatura gaussiana y la


curvatura media, se pueden definir mediante las ecuaciones:

G = Curvatura gaussiana = K1. K2 [2]


M = Curvatura media = (K1 + K2) / 2 [3]

3.8.1 Curvatura gaussiana

La curvatura gaussiana y media son importantes para la teoría de superficies. Las


superficies con curvatura gaussiana nula en todos los puntos son superficies
desarrollables; lo que significa que las superficies se pueden aplanar en un plano
sin deformación. Las superficies desarrollables son prácticas en la manufactura y
fabricación, ya que las formas se pueden construir doblando láminas planas de
materiales flexibles como: metal, cartón, madera contrachapada, etc. Además, estas
superficies contienen un conjunto de líneas rectas que también simplifican la
construcción de la estructura (vigas lineales) .

Una superficie se puede desarrollar si la curvatura gaussiana es igual a cero (G =


0) en cada punto.
La condición G = 0 se satisface cuando k1 = 0 o k2 = 0, ya que el producto de cero
es siempre cero. Por ejemplo, la curvatura de un cilindro se mide en un punto (P):

• La curvatura principal mínima k1 corresponde a la generatriz g. Dado que la


generatriz g es una línea reglada k1 = 0.

• La curvatura principal máxima k2 corresponde a d'que es paralela a la directriz


d. Dado que d 'es un círculo, su curvatura k2 tiene un valor constante igual al
recíproco del radio del cilindro.

El producto de K1 = 0 y K2 = (1 / r) es igual a cero. Por lo tanto, la curvatura de


una superficie cilíndrica es cero en cada punto, lo que significa que la curvatura
gaussiana es nula. De manera similar, la curvatura gaussiana del cono es nula ya
que K1 = 0 y K2 = (1 / r)
Los componentes Principal Curvature y Surface Curvature (Analysis> Surface)
calculan la curvatura de las superficies. El componente de Principal Curvature
produce: K1 y K2 que miden las direcciones de curvatura principal como vectores,
así como C1 y c2 que calculan los valores de curvatura principal por definición.
El componente Surface Curvature calcula la Curvatura Gaussiana como salida G y la
Curvatura Media como salida M. Por ejemplo, para cada punto del cilindro, la
Curvatura Gaussiana es cero, mientras que la Curvatura Media es el promedio de C1 y
C2, lo que da como resultado un valor negativo, ya que C1, un círculo, tiene una
curvatura negativa de acuerdo con la convención de la curvatura con signo.

Las superficies desarrollables incluyen:

•Planos;

•Cilindros;

•Cilindros generalizados: superficies que tienen la sección transversal de una


elipse, una parábola o, en general, cualquier curva suave;

•Conos;

•Conos generalizados: superficies creadas por el conjunto de líneas que pasan por
un vértice y cada punto de una curva suave;

•El Oloid. Un objeto geométrico que fue descubierto por Paul Schatz en 1929;

•Superficies tangentes desarrollables: superficies formadas por la unión de las


líneas tangentes de una curva de forma libre.

Por definición, las superficies desarrollables se componen de secciones


transversales lineales en una dirección primaria. En otras palabras, una superficie
desarrollable es siempre una superficie reglada, es decir, una superficie generada
por el movimiento de una línea recta llamada generatriz o reglamento. Una
superficie desarrollable es siempre una superficie reglada; sin embargo, una
superficie reglada no siempre es una superficie desarrollable. Una superficie
reglada se puede desarrollar cuando se pueden calcular planos tangentes únicos a lo
largo de una regla. En otras palabras, el ángulo de giro (ver imágenes siguientes)
entre las tangentes en los puntos finales de las reglas es nulo (en este caso, una
regla se llama regla torsal). Por ejemplo, para crear una superficie reglada
desarrollable a partir de una curva arbitraria (curva de carril 1), la geometría de
la segunda curva (curva de carril 2) depende de la salida de un ángulo de torsión
nulo.

Se debe aplicar una estrategia diferente cuando se busca obtener una superficie
reglada desarrollable a partir de dos curvas de carril arbitrarias y fijas. Por
supuesto, no es suficiente dividir ambas curvas en partes iguales y conectar los
puntos resultantes a través de líneas "dominantes". De hecho, no se garantiza que
el ángulo de giro sea nulo para cada regla. En este caso, se deben utilizar
algoritmos específicos (disponibles como software de complemento) para buscar las
líneas dominantes desarrollables que no tienen "torsión".

Muchos arquitectos, diseñadores y artistas utilizan superficies desarrollables en


su trabajo. Por ejemplo, Frank Gehry a menudo estudia geometría utilizando modelos
físicos compuestos de materiales laminados flexibles para desarrollar geometrías
para sus edificios.

La curvatura gaussiana es nula para superficies desarrollables. Las superficies no


desarrolladas pueden tener una curvatura gaussiana positiva o negativa. La
curvatura gaussiana es positiva cuando K1 y K2 son ambos negativos o positivos, lo
que significa que C1 y C2 tienen sus círculos osculadores en el mismo lado de la
generatriz. La curvatura gaussiana es negativa cuando K1 y K2 tienen signos
diferentes, lo que significa que C1 y C2 tienen su círculo osculador en lados
diferentes de la generatriz. Si la curvatura gaussiana es nula, C2 es una línea
recta.

Por definición, una superficie mínima tiene M = 0, lo que significa K1 = - K2. En


otras palabras, la curvatura principal mínima y la curvatura principal máxima
tienen el mismo valor y signos opuestos en cada punto. Por ejemplo, la curva de
catenoides tiene su círculo osculador en el lado positivo de la generatriz y la
curva d ', un círculo, tiene una curvatura negativa por definición. Una película de
jabón que no encierra volumen y formada entre las limitaciones de los límites es
una superficie mínima. Las películas de jabón tienen una curvatura media que
desaparece porque el área de la superficie se acerca constantemente a un área de
superficie mínima.

3.8.4 Estrategia: prueba desarrollable

Las primitivas desarrollables se pueden utilizar para aislar sub superficies


desarrollables, sin embargo, este método puede dar lugar a resultados falsos si la
geometría no se recorta de una primitiva.

[FIGURA 3.13

En el caso de una superficie desarrollable S1, al menos uno de los círculos


osculantes se convierte en una línea recta y Grasshopper dibuja un segmento corto.
En una superficie S2 similar (no desarrollable), ambos círculos osculantes se
representan como curvas.]

Para identificar superficies desarrollables, se puede utilizar el componente


Osculating Circles (Surface> Analysis) para dibujar los dos círculos osculadores en
un punto genérico P expresado en la LCS. Si la superficie se puede desarrollar, al
menos uno de los círculos osculantes será una línea recta en cada punto. En otras
palabras, al menos uno de los componentes de Línea conectados a C1 y C2 estará en
estado "correcto".

Para generalizar el método, podemos generar una cuadrícula de puntos en una


superficie de entrada mediante el componente Divide Surface y calcular los círculos
osculantes en los puntos resultantes expresados en la LCS.
3.8.5 Ejemplo: patrón de curvatura

El análisis de la Curvatura Media se puede utilizar para generar patrones complejos


en superficies utilizando la medida de la curvatura para informar un patrón.

Una superficie manipulada mediante el ajuste de puntos con la herramienta Gumball


se configura desde Rhino. Para generar cambios relevantes en la curvatura, se crean
crestas superficiales.

Para crear el patrón, la superficie del conjunto se reparametriza y se divide en un


conjunto de N sub-superficies utilizando los componentes Divide Domain e Isotrim
SubSrf. El Evaluate Surface se utiliza junto con un MD Slider establecido en (0,5;
0,5), para crear un punto que se aproxime al centro de cada superficie.

Para generar el patrón de círculos, la entrada C y la entrada N de un componente


Circle CNR se conectan a la salida P y la salida N de Evaluate Surface,
respectivamente. El radio de los círculos (R) se establece en un valor arbitrario
mediante un control deslizante.

Para generar un "patrón de curvatura", la entrada R se establece para que dependa


de la Curvatura Media de la superficie. La Curvatura Media se calcula mediante la
salida M del componente Surface Curvature. Dado que la Curvatura Media puede ser
negativa, la lista de valores se filtra mediante el componente Absolute (Mats>
Operators) que genera valores positivos. Un componente Minimum se utiliza para
establecer un valor máximo (0,150 en el ejemplo) para la salida de curvatura media
que ahora alimenta la entrada R del círculo CNR, reemplazando el Number Slider
inicial. Finalmente, un componente Cull Patern selecciona solo los círculos más
grandes que un valor específico establecido en la entrada F de Evaluate
(establecemos x> 0.025)

El componente Surface Split se puede utilizar para dividir la superficie inicial


utilizando los círculos como curvas de recorte. La superficie inicial dividida será
el elemento de índice 0 en la lista de salida de Surface Split (F). Las geometrías
restantes (1 a N) son las "superficies de desecho" cuyos límites son las curvas de
corte. La superficie inicial dividida se puede visualizar utilizando el componente
List Item establecido en 0.

Para visualizar solo el índice 0 de "desechos" (la superficie inicial dividida) se


puede eliminar de la lista utilizando el componente Cull Index.

4 TRANSFORMACIONES

"Las características ortogonales, cuando se combinan, pueden explotar en


complejidad"

Yukihiro Matsumoto

Los capítulos anteriores han demostrado cómo las matemáticas y la lógica son la
base de modelos 3D complejos. En esta sección se introducirá una nueva capa de
complejidad, las transformaciones geométricas. En particular, el capítulo
examinará:

• Transformaciones euclidianas:
Las transformaciones euclidianas conservan longitudes o medidas de ángulos. Las
transformaciones euclidianas incluyen traslaciones, rotaciones y reflexiones.

• Transformaciones afines:
Las transformaciones afines no conservan longitudes ni medidas de ángulos. Las
transformaciones afines incluyen escalado, corte y proyecciones.

• Otras transformaciones:
Se pueden realizar transformaciones más complejas combinando transformaciones o
mediante componentes específicos como el componente Morph.

1. Geometría original;

2. Transformación euclidiana: rotación;

3. Afín: escala. La escala es una transformación afín que mantiene la forma además
del paralelismo;

4. Similitud (escala + rotación);

5. Morph.

Una transformación mide el cambio entre dos puntos P (x, y) y P '(x', y '). Para
trasladar un punto a una posición diferente, se requiere sumar o restar una
cantidad específica de sus coordenadas originales.

Un objeto completo se puede trasladar realizando la transformación anterior a todos


sus puntos o, más simplemente, a sus vértices.

Esto significa que un punto alcanza una nueva posición moviéndolo una cierta
distancia, de acuerdo con una dirección y un sentido específicos. Estas tres
características definen un "vector", que es un objeto geométrico caracterizado por
dirección, sentido y magnitud (o longitud).
Por lo tanto, se puede definir una traslación especificando un punto de inicio P y
un vector de traslación V. Grasshopper proporciona varios métodos para crear
vectores y realizar operaciones en vectores.
4.1 Vectores

El panel (Vector> Vector) aloja los componentes utilizados para crear y modificar
vectores.

• Vector 2Pt:

El componente Vector 2Pt (Vector> Vector) crea un vector entre dos puntos
descritos: A (punto inicial) y B (punto final). La salida L del componente Vector
2Pt devuelve la magnitud del vector y la salida V, el vector mismo. El componente
Vector Display se puede utilizar para visualizar el vector en Rhino.

• Vector unitario:

Dado un vector con una dirección y magnitud especificadas (L) como se describe en
dos puntos, el componente Unit Vector (Vector> Vector) se puede utilizar para
unificar el vector o cambiar la magnitud a 1 unidad, sin modificar la dirección. El
componente Vector 2Pt se puede utilizar para unificar un vector de salida
conectando un conjunto de alternancia booleano en True a la entrada U.

• Amplitude:

El componente Amplitude (Vector> Vector) establece la longitud de un vector dado en


un valor de entrada (A). Por ejemplo, un vector con una longitud inicial igual a 5
se conecta a la entrada (V) del componente Amplitude, el componente devolverá un
nuevo vector con una magnitud (A) mientras mantiene la dirección y el sentido
originales. El sentido cambiará utilizando un valor negativo como entrada (A).

• Multiplicación escalar:

La multiplicación escalar se refiere a la multiplicación de un vector por un número


escalar N. Si N> 0 resultará un vector en el mismo sentido, si N <0 resultará un
vector en el sentido opuesto. La nueva longitud del vector es igual al producto de
la longitud del vector inicial y N.

•Unit X, Unit Y, Unit Z:

Los componentes Unit X, Unit Y y Unit Z (Vector> Vector) definen vectores unitarios
a lo largo de los ejes X, Y y Z. La entrada (F) se puede utilizar para establecer
una longitud mediante la multiplicación escalar incrustada.

4.2 Transformaciones euclidianas

Las Euclidian Transformations (Transform> Euclidian) incluyen traslaciones,


rotaciones, orientación y componentes de espejo.
4.2.1 Traslaciones: componente Move

El componente Move (Transform> Euclidian) traslada una entidad geométrica (G) según
un vector (T). Por ejemplo, una caja creada usando el componente Center Box
(Surface> Primitive) se traslada en la dirección Z usando un componente Unit Z.

Si la entrada (F) del componente Unit Z está conectada con múltiples valores
numéricos, devolverá múltiples vectores, estos vectores pueden usarse para realizar
múltiples traslaciones. Por ejemplo, un edificio de varios pisos se puede modelar
conectando un componente Series a la entrada F del componente Unit Z. En este
modelo simplificado, la entrada N del componente de la serie establece la distancia
entre pisos, la entrada C establece el número total de pisos y la entrada S define
el valor inicial de la secuencia numérica. Si (S) se establece en 0, el primer piso
coincidirá con la caja original.

4.2.2 Rotaciones: Rotate y Rotate Axis

Una rotación es el movimiento de un cuerpo rígido alrededor de:

• un punto fijo (llamado centro de rotación);


• una línea recta (llamada eje de rotación).

Los componentes Rotate y Rotate Axis(Transform> Euclidean) rotan una entidad


geométrica (G) en un plano o alrededor de un eje respectivamente. Por ejemplo, un
prisma se puede rotar 45 ° con respecto a su posición original en una superficie
orientada arbitrariamente utilizando el componente Rotate junto con otros
componentes que definen un plano de rotación.

El contenedor Geometry importa el prisma. Podemos descomponerlo usando un


componente Deconstruct Brep y luego podemos extraer la cara inferior por List Item
establecido en 6. Evaluate Surface calcula el vector normal de la cara inferior en
su centro; luego Plane Normal (Vector> Plane) devuelve el plano para rotar de
acuerdo con. Finalmente, Rotate está conectado al prisma (entrada G) y al plano en
(P). El ángulo de rotación se establece mediante un control deslizante numérico que
varía entre 0 ° y 360 °. Dado que Rotate acepta ángulos en radianes, tenemos que
convertir grados en radianes mediante el componente Radians (Maths> Trig). Como
alternativa, podemos confiar en el componente Rotate Axis que necesita una línea
(entrada X) para realizar una rotación. La línea es creada por un componente Line
SDL.

El componente Rotate Axis utilizado junto con el componente Series puede crear
rotaciones progresivas.

Con referencia al ejemplo anterior (ver 4.2.1), es posible definir el eje de


rotación como una línea vertical, comenzando desde el punto de gravedad de la caja
inicial (por el componente Volume). La rotación progresiva se realiza utilizando
diferentes ángulos de rotación (salida de Series) en lugar de un solo valor. La
entrada C de Series debe establecerse de modo que su valor sea igual al número de
objetos a rotar.
Para calcular las rotaciones incrementales (ángulo relativo entre pisos
consecutivos) en función del ángulo de giro (valor del ángulo entre el primer y
último piso), este último se divide por el número de pisos menos uno; el resultado
de la división es el ángulo relativo. Las siguientes imágenes muestran diferentes
rotaciones incrementales referidas al modelo de estructura alámbrica de un edificio
de varios pisos: el ángulo entre el primer y último piso (ángulo de torsión) es de
90 °.

FIGURA 4.1
Rotación progresiva aplicada a un modelo simplificado de un edificio de varios
pisos.

FIGURA 4.2
La imagen ilustra diferentes configuraciones del modelo a medida que cambia el
ángulo de giro.

La ecuación ángulo relativo = ángulo de giro / (número de pisos - 1) calcula las


rotaciones incrementales para cada piso.

4.2.3 Componente Orient

El componente Orient (Transform> Euclidean) combina traslaciones y rotaciones en


una sola transformación. Una entidad geométrica (G) orientada arbitrariamente en el
espacio, se puede orientar a una nueva posición (G') especificando un plano inicial
A y un plano finala B. Para orientar la geometría G a una nueva posición G' se usa
el componente Evaluate Surface para encontrar un plano inicial definido como una
salida de plano tangente (F) en el punto LCS (0.5; 0,5), y un plano final descrito
por el componente Plane XY (Plane> Vector). El componente Orient ajusta el plano
inicial para que coincida con el plano final.

El componente Orient también se puede utilizar para orientar una lista de


superficies de nervaduras ubicadas arbitrariamente hacia el plano XY. El componente
Evaluate Surface se utiliza para definir un plano en cada una de las nervaduras. La
salida del vector normal de Evaluate Surface (N) se establece como la dirección del
eje z (entrada Z) del componente Plane Normal (Vector> Plane) que define los planos
iniciales. Para definir los planos finales, un punto arbitrario se traslada en la
dirección Y utilizando el componente Series como un multiplicador escalar con:
entrada N establecida en el tamaño del paso (13) y el valor de entrada C
coincidente con el número de nervaduras superficiales (calculado a través de List
Lenght). En cada punto se define un XY Plane. Por último, las superficies de las
nervaduras se orientan a los planos finales.

Página : 198

4.3 Transformaciones afines


Las transformaciones afines (Transform>Affine) incluyen componentes de escala,
corte, proyección y mapeo.

4.3.1 Componente Scale: escala uniforme

El componente Scale (Transform> Affine) es una transformación geométrica que


agranda o reduce objetos de manera uniforme en las direcciones x, y y z. El
componente Scale cambia el tamaño de una geometría inicial (G) por un factor de
escala (F) relativo al centro del punto de escala (C). El centro de escala (C)
puede ser cualquier punto. El factor de escala es un número positivo y no puede ser
0 (un factor de escala nulo es un error matemático).
En particular, tenemos tres casos principales:

• 0 <F <1: los objetos se reducen;


• F = 1: los objetos no cambian;
• F> 1: los objetos se agrandan.

El escalado también se puede realizar en varios objetos. Por ejemplo, si se aplica


el mismo factor de escala a todo el conjunto de geometrías, todo el conjunto de
geometría se escalará en la misma proporción.

Página : 199

Alternativamente, se pueden aplicar diferentes factores de escala a cada entidad


geométrica. Por ejemplo, para ampliar progresivamente un conjunto de seis casillas,
la entrada (F) del componente Scale se proporciona con una lista de factores de
escala crecientes por el componente Series. El centro de la entrada de escala (C)
se define como el centroide de cada cuadro, respectivamente.

El componente Series genera una lista de valores de escala lineal crecientes o


decrecientes. Para generar formas más complejas de escalado usando funciones
matemáticas, se puede usar el componente Graph Mapper (Params> Input).

Página : 200

Por ejemplo, si la entrada (F) del componente Scale se suministra con una secuencia
numérica simétrica: (1, 2, 3, 4, 5, 4, 3, 2,1) resultará una forma parabólica.

Más específicamente si la ecuación,

y = - (1/10) * + X (squ) + X +1 con 1 <X <9,

se suministra a la entrada (F) del componente Evaluate, la salida (r) devolverá un


co-dominio de secuencia simétrica que se puede utilizar como factor de escala (F).

Por supuesto, no es fácil manipular ecuaciones complejas para conseguir un objetivo


específico, pero afortunadamente podemos confiar en una herramienta alternativa
disponible en Grasshopper: Graph Mapper.

Página : 201

(página 200 hacer el ejercicio)

También podría gustarte