2011 Modellazione geometrica generativa (Anotnio Turiello)

Page 1

UNIVERSITÀ DEGLI STUDI DI SALERNO

Facoltà di Ingegneria Corso di Laurea in Ingegneria Civile Tesi di Laurea in Disegno

Modellazione geometrica generativa: un approccio algoritmico

RELATORE Prof.ssa Arch. Barbara Messina LAUREANDO Antonio Turiello CORRELATORE Ing. Pierpaolo D’Agostino

ANNO ACCADEMICO 2010/2011


Indice

Introduzione

4

1- Il percorso teorico

5

2- Il software e il plug-in

9

3- Superfici rigate

22

3.1- Iperboloide iperbolico rigato

23

3.2- Paraboloide iperbolico rigato

26

3.3- Elica, colonna torsa ed elicoide rigato

41

aperto/chiuso e retto/obliquo 3.4- Rigata elicoidale cilindrica, conica e sferica a direttrici

47

elicoidali simmetriche e asimmetriche

4- Superfici loft 4.1- Superficie loft da una curva di sezione orientata, scalata

59 60

e ruotata su piani perpendicolari alla curva aperta di percorso 4.2- Superficie loft da una curva di sezione orientata, scalata

66

e ruotata su piani orizzontali a distanza controllata 4.3- Superficie loft da una curva di sezione orientata, scalata

75

e ruotata su piani perpendicolari alla curva chiusa di percorso 4.4- Interpolazione di forma tra superfici loft

83


5- Interpolazioni di forma

94

5.1- Interpolazione di forma tra curve

95

5.2- Interpolazione di forma tra superfici

101

5.3- Interpolazione di forma combinata tra superfici

106

6- Attrattori

111

6.1- Punto attrattore nel piano

112

6.2- Punti, curve e superfici attrattori nello spazio

116

6.3- Attrattore con operazioni di differenza booleana,

124

intersezione fisica e loft

Conclusioni

137

Bibliografia

138


Introduzione

La tesi ha inizio con un percorso teorico di sintesi dell’evoluzione metodologica progettuale nell’era digitale, descrivendo un approccio alla modellazione generativa basato sulla logica algoritmica: l’algoritmo come procedimento unificatore tra le finalità pratiche e di ricerca nella progettazione, in cui modellare significa generare possibili soluzioni oltre a comunicarle. Lo strumento che consente di mettere in pratica questo approccio è il plug-in Grasshopper®, un editor visuale per lo scripting applicato al software di modellazione Rhinoceros®. Rhinoceros® e Grasshopper® sono marchi registrati di Robert McNeel & Associates. Le applicazioni nel campo della modellazione geometrica, un ambito di studio basilare per l’attività del progettista, consistono nel realizzare alcuni algoritmi generativi: 

Superfici rigate

Superfici loft

Interpolazioni di forma

Attrattori

Si progettano quindi dei veri e propri strumenti di modellazione, illustrandone i risultati oltre a descriverne sinteticamente i procedimenti di realizzazione, per giungere poi ad alcune osservazioni conclusive inerenti all’approccio algoritmico utilizzato.

4


1- Il percorso teorico

La scientificità del metodo di ricerca è il prodotto della capacità dell’essere umano di motivare le proprie azioni con la conoscenza, interagendo tra la ragione e l’istinto e consentendo al pensiero di guidare e far emergere l’intuito. Molti filosofi, tra i quali David Hume con il Trattato sulla natura umana (1739-1740), considerano la ragione una facoltà universale utilizzata sia dagli esseri umani che, in teoria, dagli animali:

L’uomo studia da sempre il mondo che lo circonda utilizzando di continuo facoltà come l’invenzione, la creatività e la fantasia, investigate concretamente dall’artista e designer Bruno Munari in Fantasia (1977), le quali rappresentano il risultato dell’applicazione di logiche di ricerca nelle differenti discipline della conoscenza umana. Partendo da queste considerazioni, in che modo si può collocare la progettazione tra le materie scientifiche e quelle artistiche? Soprattutto ritenendo l’arte, come sostiene il filosofo e sociologo tedesco Theodor Adorno in Teoria estetica (1970), razionalità che critica la razionalità senza però sottrarsi ad essa:

5


In base a quest’analisi e agli studi effettuati da Munari in Da cosa nasce cosa (1996) relativi alla ricerca di una metodologia progettuale, si può far emergere la scientificità del metodo in ambito generale:

L’evoluzione metodologica nell’era digitale si può cogliere nel significato che la modellazione assume nella progettazione generativa. Dalle ricerche del Prof. Arch. Celestino Soddu (http://www.argenia.it), in particolare dal concetto di idea che si evolve seguendo logiche di trasformazione, è possibile intuire il modo in cui la modellazione diventa parte integrante del processo di generazione della soluzione non più unica:

6


La programmazione, nell’attività di progettazione, diventa lo strumento di modellazione generativa che comporta una grande versatilità in termini di personalizzazione di ricerche formali e di controllo parametrico specifico all’interno di un progetto, con un approccio però non del tutto intuitivo a causa delle conoscenze informatiche specialistiche richieste. Al contrario molti software parametrici associativi consentono un utilizzo più “guidato” tramite interfacce intuitive, ma con la possibilità di personalizzare il proprio lavoro solo in base alle modalità permesse dal programma in questione:

Si può quindi individuare un approccio intermedio tra l’utilizzo dei software parametrici associativi e l’editing degli stessi per mezzo di linguaggi interpretati (scripting):

7


L’algoritmo è la descrizione del procedimento logico che consente di approcciare alla modellazione generativa in modo sia intuitivo che versatile. Le applicazioni della tesi interessano la modellazione geometrica, campo di applicazione della geometria descrittiva in cui si ricercano alcuni elementi più semplici di identificazione geometrica. La motivazione di questa scelta è dettata da considerazioni non legate a un settore specifico della progettazione, al fine di analizzare l’approccio “intermedio” applicandolo in un ambito di studio basilare per l’attività del progettista e realizzando al tempo stesso dei veri e propri strumenti di modellazione.

Fig. 1.1: Algoritmo dell’iperboloide iperbolico rigato

8


2- Il software e il plug-in

Rhinoceros® (o più comunemente chiamato Rhino) è uno dei software più diffusi per la modellazione tridimensionale basata su curve e superfici NURBS (Non Uniform Rational BSplines). Le curve NURBS hanno il vantaggio di essere molto precise e manipolabili grazie alla possibilità di inserire punti di controllo che consentono la modifica delle geometrie. Un’altra caratteristica di Rhino è lo scripting che permette di generare modelli tridimensionali inserendo codici di programmazione con la possibilità di modifica degli stessi. Il plug-in Grasshopper® invece è un editor visuale per lo scripting applicato a Rhino basato sulla logica algoritmica ed è lo strumento che consente di attuare l’approccio descritto nel capitolo precedente con la progettazione di algoritmi generativi nei capitoli successivi. Rhinoceros® e Grasshopper® sono marchi registrati di Robert McNeel & Associates.

PANNELLO COMPONENTI

BAKE

AREA DI LAVORO

Fig. 2.1: Interfaccia di Grasshopper

9


Per

l’utilizzo

del

plug-in,

scaricabile

gratuitamente

dal

sito

ufficiale

(http://www.grasshopper3d.com), occorre installare Rhino aggiornato al service pack 4 o successivo: la versione di Grasshopper utilizzata come riferimento per la tesi è la 0.6.0012. Il plug-in si avvia dalla riga di comando di Rhino digitando la stringa Grasshopper e dispone di un’interfaccia costituita da un pannello componenti e da un’area di lavoro (Fig. 2.1). Gli algoritmi vengono definiti, nell’area di lavoro, attraverso connessioni realizzate tra parametri e componenti organizzati secondo categorie e subcategorie nel pannello componenti. I parametri contengono dati mentre i componenti compiono azioni sui dati e contengono parametri in input e in output. La visualizzazione degli algoritmi avviene attraverso un grafo a nodi costituito da parametri di ingresso, con dati definiti in Grasshopper o acquisiti da Rhino, connessi ai parametri in input dei componenti che generano parametri in output (Fig. 2.2).

PARAMETRO

CONNETTORE COMPONENTE

Fig. 2.2: Parametro di ingresso <Slider> (Params/Special/Number Slider) connesso al parametro in input <R> del componente Circle CNR (Curve/Primitive/Circle CNR)

Le geometrie visualizzate nella finestra di Rhino, relative ai componenti dell’algoritmo, sono delle preview che devono essere poi convertite, attraverso il comando Bake (cuocere), in modelli editabili con gli strumenti di Rhino.

10


Parametri e componenti utilizzati negli algoritmi progettati:

Params/Geometry Curve: rappresenta una lista di curve nello spazio Geometry: rappresenta una lista di geometrie nello spazio Plane: rappresenta una lista di piani nello spazio Point: rappresenta una lista di punti nello spazio Surface: rappresenta una lista di superfici nello spazio

Params/Primitive Integer: rappresenta una lista di numeri interi Number: rappresenta una lista di numeri in virgola mobile a precisione doppia

Params/Special Boolean Toggle: commutazione di stato (vero/falso)

Custom Preview: Consente le anteprime delle geometrie personalizzate

Gradient: gradiente di colore multiplo Number Slider: cursore numerico per valori singoli

11


Panel: un pannello per le note personalizzate e i valori di stringa

Logic/List

Dispatch: smista gli elementi di una lista di dati in due elenchi di destinazione

List Item: recupera un elemento specifico da una lista di dati

List Length: misura la lunghezza di una lista

Reverse List: inverte l’ordine di una lista

Shift List: sposta tutti gli elementi in una lista

Sort List: ordina una lista di dati numerici

Split List: divide una lista in parti separate

Sub List: estrae un sottoinsieme da una lista

12


Logic/Script

Variable Expression: espressione con una quantità variabile di parametri di input

Logic/Sets

Duplicate Data: dati duplicati un numero predefinito di volte

Range: crea un intervallo di numeri

Series: crea una serie di numeri

Logic/Tree

Clean Tree: rimuove tutte le voci nulle e non valide da una struttura dati albero

Flatten Tree: rimuove tutte le informazioni di ramificazione da un albero di dati

Graft Tree: innesta un albero aggiungendo un ramo per ogni elemento di dati

Merge: unisce due flussi di dati

13


Prune Tree: rimuove piccoli rami da un albero di dati

Scalar/Constants

Pi: restituisce un fattore di Pi greco

Scalar/Interval

Divide Interval2: divide un intervallo bidimensionale in segmenti uguali

Interval: crea un intervallo numerico da due estremi numerici

Scalar/Operators

Addition: somma due numeri

Division: divide due numeri

Multiplication: moltiplica due numeri

Scalar/Util

Maximum: trova il maggiore dei due numeri 14


Minimum: trova il minore dei due numeri

Vector/Colour

Create Shader: crea uno shader OpenGL

Vector/Constants Unit Y: vettore unitario parallelo all’asse y del sistema di riferimento globale Unit Z: vettore unitario parallelo all’asse z del sistema di riferimento globale

Vector/Plane

Plane Normal: crea un piano perpendicolare a un vettore

Vector/Point

Closest Point: trova il punto più vicino in un insieme di punti

Decompose: scompone un punto nelle sue parti componenti

15


Distance: calcola la distanza euclidea tra le coordinate di due punti

Grid Rectangular: genera una griglia rettangolare di punti

Point XYZ: crea un punto di coordinate {x, y, z}

Vector/Vector

Amplitude: imposta il modulo di un vettore

Reverse: inversione di un vettore

Unit Vector: rende unitario un vettore

Vector 2Pt: crea un vettore tra due punti

Vector XYZ: crea un vettore da componenti {x, y, z}

Curve/Analysis

End Points: estrae i punti finali di una curva

16


Evaluate Length: valuta una curva in un certo fattore della sua lunghezza

Explode: scompone una curva nelle sue parti componenti

Curve/Division

Divide Curve: divide una curva in segmenti di uguale lunghezza

Perp Frames: genera dei piani perpendicolari ed equidistanti lungo una curva

Curve/Primitive

Circle CNR: crea un cerchio definito dal centro, dalla normale e dal raggio

Line: crea una linea tra due punti

Line SDL: segmento di linea definito da punto iniziale, tangente e lunghezza

Polygon: crea un poligono con un numero variabile di segmenti

17


Curve/Spline

Curve: crea una curva NURBS da punti di controllo

Interpolate: crea una curva interpolata attraverso una serie di punti

Poly Line: crea una polilinea che collega una serie di punti

Curve/Util

Join Curves: unione di più curve

Surface/Analysis

BRep Area: proprietà dell’area di una polisuperficie (BRep)

BRep Components: scompone una polisuperficie nelle sue parti componenti

Surface/Freeform

Extrude: estrusione di curve e superfici lungo un vettore

Loft: crea una superficie loft attraverso una serie di curve di sezione 18


Offset: copia parallela di una superficie a una certa distanza

Pipe: crea una superficie tubolare intorno a una curva binario

Planar Srf: crea superfici piane da curve di bordo

Surface From Points: crea una superficie NURBS da una griglia di punti

Surface/Primitive

Cone: crea una superficie conica

Cylinder: crea una superficie cilindrica

Sphere: crea una superficie sferica

Surface/Util

Brep Join: unisce un numero di polisuperfici

Cap Holes: copre tutti i fori piani in una polisuperficie

19


Divide Surface: genera una griglia di punti {u,v} su una superficie

Isotrim: estrae un sottoinsieme isoparametrico di una superficie

Intersect/Boolean

Solid Difference: differenza booleana tra due polisuperfici

Intersect/Physical

BRep | BRep: intersezione fisica tra due polisuperfici

Brep | Curve: intersezione fisica tra una polisuperficie e una curva

Curve | Curve: intersezione fisica tra due curve

XForm/Affine

Scale: copia scalata in modo uniforme di una geometria

20


Scale NU: copia scalata in modo non uniforme di una geometria

XForm/Euclidian

Mirror: copia specchiata di una geometria rispetto a un piano

Move: copia traslata di una geometria lungo un vettore

Orient: copia orientata di una geometria da un piano di riferimento a un altro

Rotate: copia ruotata di una geometria in un piano

XForm/Morph

Box Morph: deforma una geometria in box di destinazione

Surface Box: crea dei box di destinazione deformati su una superficie

21


3- Superfici rigate

La modellazione di alcune superfici rigate rappresenta la prima delle quattro applicazioni di modellazione generativa finalizzate a visualizzare i risultati di un lavoro atto ad analizzare l’intuitività e la versatilità dell’approccio utilizzato. Le superfici rigate sono superfici generate da una trasformazione geometrica rigida di un segmento di retta lungo una direttrice. In questa descrizione si può comprendere la motivazione della scelta di modellarle per mezzo di algoritmi generativi e di porle all’inizio di un percorso che ha inizio con una parametrizzazione geometrico costruttiva per giungere poi ad una sperimentazione geometrico generativa.

Algoritmi progettati: 

Iperboloide iperbolico rigato

Paraboloide iperbolico rigato

Elica, colonna torsa ed elicoide rigato aperto/chiuso e retto/obliquo

Rigata elicoidale cilindrica, conica e sferica a direttrici elicoidali simmetriche e asimmetriche

Nella modellazione generativa non c’è un solo procedimento per modellare una geometria, così come quella geometria non è da considerarsi l’unica soluzione dell’algoritmo che l’ha generata. Le superfici rigate diventano quindi soluzioni degli algoritmi progettati tenendo conto sia della loro costruzione geometrica in piano che della ricerca di alcuni elementi più semplici per identificarle.

22


3.1- Iperboloide iperbolico rigato

Fig. 3.1: Algoritmo e cerchi, direttrici, generatrici e superficie loft dell’iperboloide iperbolico rigato

Descrizione algoritmica:

(Params/Special/Number Slider) <R1>  <R> (Curve/Primitive/Circle CNR)

{0.0, 0.0, 0.0}  <C> (Circle CNR) <C>  <Circle> (Params/Geometry/Circle)

(Number Slider) <R2>  <R> (Circle CNR)

{0.0, 0.0, 0.0}  <C> (Circle CNR) <C>  <G> (XForm/Euclidian/Move)

(Number Slider) <H>  <F> (Vector/Constants/Unit Z) <V>  <T> (Move)

<Circle>  <C> (Curve/Division/Divide Curve)

(Move) <G>  <C> (Divide Curve) 23


(Number Slider) <S>  <S> (Logic/Script/Variable Expression: S*I)

(Number Slider) <I>  <I> (Variable Expression: S*I)

(Variable Expression: S*I) <r>  <N> (Divide Curve)

(Divide Curve) <P>  <L> (Logic/List/Shift List)

(Number Slider) <S>  <S> (Shift List)

{True}  <W> (Shift List) <L>  <B> (Curve/Primitive/Line)

(Divide Curve) <P>  <A> (Line)

(Line) <L>  <S> (Surface/Freeform/Loft)

{Closed Loft}  <O> (Loft)

(Line) <L>  <A> (Logic/Tree/Merge)

(Line) <L>  <B> (Logic/Tree/Merge)

Fig. 3.2a: Prima parte dell’algoritmo dell’iperboloide iperbolico rigato: cerchi 1 e 2, da raggi 1 e 2, distanziati verticalmente di H e suddivisi ognuno in S*I parti

24


Fig. 3.2b: Seconda parte dell’algoritmo dell’iperboloide iperbolico rigato: spostamento dei punti di suddivisione dei cerchi con unione e loft delle linee congiungenti

Fig. 3.3: Variazione dei parametri di ingresso dell’algoritmo dell’iperboloide iperbolico rigato

25


3.2- Paraboloide iperbolico rigato

Fig. 3.4: Algoritmo e vista prospettica della variazione del paraboloide iperbolico rigato

26


Descrizione algoritmica:

(Params/Special/Number Slider) <Xp>  <x> (Logic/Script/Variable Expression: -x)

(Number Slider) <Xp>  <x> (Variable Expression: 2*x/0.01+1)

(Number Slider) <Xp>  <x> (Variable Expression: (z-c)/(x^2))

(Number Slider) <Zp>  <z> (Variable Expression: (z-c)/(x^2))

(Number Slider) <Zv>  <c> (Variable Expression: (z-c)/(x^2))

(Number Slider) <Xp>  <x> (Variable Expression: x*sqrt(2)) <r>  <D> (Params/Special/Panel)

(Variable Expression: -x) <r>  <S> (Logic/Sets/Series)

{0.01}  <N> (Series)

(Variable Expression: 2*x/0.01+1) <r>  <C> (Series) <S>  <x> (Variable Expression: a*x^2+c)

(Variable Expression: (z-c)/(x^2)) <r>  <a> (Variable Expression: a*x^2+c)

(Number Slider) <Zv>  <c> (Variable Expression: a*x^2+c) <r>  <Z> (Vector/Point/Point XYZ)

(Series) <S>  <X> (Point XYZ) <Pt>  <V> (Curve/Spline/Interpolate)

(Point XYZ) <Pt>  <G> (XForm/Euclidian/Move)

(Variable Expression: x*sqrt(2)) <r>  <F> (Vector/Constants/Unit Y) <V>  <T> (Move) <G>  <V> (Interpolate)

(Variable Expression: 2*x/0.01+1) <r>  <C> (Variable Expression: (C-1)/2) <r>  <i> (Logic/List/List Item)

(Point XYZ) <Pt>  <L> (List Item) <E>  <G> (Move) <G>  <B> (Curve/Primitive/Line)

(Move) <G>  <A> (Line)

(List Item) <E>  <A> (Line)

(Number Slider) <Zp>  <Pz> (Variable Expression: Vz-Pz)

(Number Slider) <Zv>  <Vz> (Variable Expression: Vz-Pz)

(Variable Expression: Vz-Pz) <r>  <r> (Variable Expression: -r) <r>  <F> (Vector/Constants/Unit Z) <V>  <T> (Move)

(Move) <G>  <L> (List Item) <E>  <G> (Move) <G>  <B> (Line)

(List Item) <E>  <B> (Line)

(List Item) <E>  <A> (Line) 27


(Variable Expression: x*sqrt(2)) <r>  <x> (Variable Expression: x/2) <r>  <Y> (Point XYZ)

(Number Slider) <Zp>  <Z> (Point XYZ) <Pt>  <B> (Line)

(Number Slider) <S>  <S> (Variable Expression: 2*S) <r>  <x> (Variable Expression: 2*x) <r>  <N> (Curve/Division/Divide Curve)

(Line) <L>  <C> (Divide Curve)

(Divide Curve) <P>  <A> (Line)

(Divide Curve) <P>  <B> (Line)

(Line) <L>  <A> (Intersect/Physical/Curve | Curve)

(Line) <L>  <B> (Curve | Curve)

(Curve | Curve) <P>  <D> (Logic/Tree/Flatten Tree)

(Flatten Tree) <D>  <A> (Line) <L>  <G> (Move)

(Flatten Tree) <D>  <A> (Vector/Vector/Vector 2Pt) <V>  <T> (Move) <G>  <C> (Curve/Util/Join Curves)

(Flatten Tree) <D>  <B> (Line) <L>  <C> (Join Curves)

(Flatten Tree) <D>  <B> (Vector 2Pt) <V>  <V> (Vector/Vector/Reverse) <V>  <T> (Move)

(Line) <L>  <G> (Move) <G>  <C> (Join Curves) <C>  <A> (Curve | Curve)

(Line) <L>  <B> (Curve | Curve) <P>  <D> (Flatten Tree) <D>  <S> (Curve/Primitive/Line SDL)

{-1.0, 0.0, 0.0}  <D> (Line SDL)

(Number Slider) <Xp>  <x> (Variable Expression: 1.5*x) <r>  <L> (Line SDL)

(Line

SDL)

<L>

<C>

(Curve/Analysis/End

Points)

<S>

<P>

(Vector/Point/Decompose) 

(End Points) <E>  <P> (Decompose)

(Decompose) <X>  <X> (Point XYZ)

(Decompose) <Y>  <K> (Logic/List/Sort List) <L>  <Y> (Point XYZ)

(Decompose) <Z>  <Z> (Point XYZ)

(Point XYZ) <Pt>  <A> (Line) <L>  <L> (Logic/List/Split List)

(Point XYZ) <Pt<  <B> (Line) <L>  <L> (Logic/List/List Length) <L>  <L> (Variable Expression: L/2) <r>  <i> (Split List)

(Variable Expression: x/2) <r>  <R> (Curve/Primitive/Polygon)

(Variable Expression: x/2) <r>  <Y> (Point XYZ)

28


(Number Slider) <Zp>  <Z> (Point XYZ) <Pt>  <O> (Vector/Plane/Plane Normal) <P>  <P> (Polygon)

{4}  <S> (Polygon) <P>  <C> (Curve/Analysis/Explode) <S>  <L> (List Item) <E>  <C> (Divide Curve)

(Variable Expression: 2*S) <r>  <N> (Divide Curve)

(Divide Curve) <P>  <A> (Line) <L>  <G> (Move)

(Divide Curve) <P>  <A> (Vector 2Pt)

(Divide Curve) <P>  <L> (Logic/List/Reverse List) <L>  <B> (Line)

(Reverse List) <L>  <B> (Vector 2Pt) <V>  <T> (Move)

(Move) <G>  <L> (Reverse List) <L>  <L> (Split List)

(Split List) <A>  <B> (Curve | Curve)

(Split List) <A>  <L> (Reverse List) <L>  <A> (Curve | Curve) <P>  <D> (Flatten Tree)

(Move) <G>  <B> (Line)

(List Item) <E>  <A> (Line) <L>  <A> (Curve | Curve)

(Join Curves) <C>  <B> (Curve | Curve) <P>  <D> (Flatten Tree) <D>  <S> (Line SDL)

{-1.0, 0.0, 0.0}  <D> (Line SDL)

(Number Slider) <Xp>  <L> (Line SDL) <L>  <A> (Curve | Curve)

(Interpolate) <C>  <B> (Curve | Curve) <P>  <D> (Flatten Tree) <D>  <P> (Decompose)

(Decompose) <X>  <K> (Sort List) <L>  <X> (Point XYZ)

(Decompose) <Z>  <K> (Sort List) <L>  <L> (Logic/List/Dispatch)

(Variable Expression: Vz-Pz) <r>  <r> (Variable Expression: r>0) <r>  <P> (Dispatch)

(Dispatch) <A>  <A> (Logic/Tree/Merge)

(Dispatch) <B>  <L> (Reverse List) <L>  <D> (Logic/Tree/Clean Tree) <D>  <B> (Merge) <S>  <D> (Flatten Tree) <D>  <Z> (Point XYZ)

(Point XYZ) <Pt>  <Pt> (Params/Geometry/Point) <Pt>  <B> (Merge)

(Flatten Tree) <D>  <Pt> (Point) <Pt>  <A> (Merge) <S>  <D> (Flatten Tree) <D>  <Pt> (Point) <Pt>  <G> (XForm/Euclidian/Mirror)

(Point) <Pt>  <A> (Line)

(Point XYZ) <Pt>  <O> (Plane Normal)

{1.0, 0.0, 0.0}  <Z> (Plane Normal) <P>  <P> (Mirror) 29


{0.0, -1.0, 0.0}  <Z> (Plane Normal) <P>  <P> (Mirror)

(Point XYZ) <Pt>  <L> (List Item) <E>  <B> (Merge)

(Point) <Pt>  <A> (Merge) <S>  <D> (Flatten Tree) <D>  <V> (Interpolate) <C>  <Crv> (Params/Geometry/Curve) <Crv>  <G> (Mirror)

(Curve) <Crv>  <C> (Join Curves)

(Mirror) <G>  <L> (Reverse List) <L>  <A> (Line)

(Mirror) <G>  <Pt> (Point) <Pt>  <G> (Mirror) <G>  <L> (Reverse List) <L>  <B> (Line)

(Point) <Pt>  <B> (Line)

(Line) <L>  <A> (Merge)

(Line) <L>  <B> (Merge)

(Line) <L>  <L> (List Item)

{0}  <i> (List item) <E>  <A> (Curve | Curve)

(Line) <L>  <L> (List Length) <L>  <L> (Variable Expression: L-1) <r>  <i> (List Item) <E>  <A> (Curve | Curve)

(Line) <L>  <B> (Curve | Curve) <P>  <D> (Flatten Tree)

(Flatten Tree) <D>  <A> (Line)

(Flatten Tree) <D>  <B> (Line)

(Line) <L>  <S> (Surface/Freeform/Loft)

(Mirror) <G>  <Crv> (Curve) <Crv>  <C> (Join Curves)

(Mirror) <G>  <Crv> (Curve) <Crv>  <G> (Mirror) <G>  <Crv> (Curve) <Crv>  <C> (Join Curves)

(Join Curves) <C>  <A> (Merge)

(Join Curves) <C>  <B> (Merge)

(Interpolate) <C>  <A> (Merge)

(Interpolate) <C>  <B> (Merge)

30


P

2

1

D Fig. 3.5a: Parabole di appoggio 1 e 2 distanziate dalla diagonale D del quadrilatero di costruzione di piano P

31


Fig. 3.5b: Punti delle parabole di appoggio dall’equazione per le coordinate d’input e intersezione tra linee di costruzione del paraboloide iperbolico in seconda proiezione

32


Fig. 3.5c: Prolungamento delle linee di costruzione da intersecare e ordinamento delle liste

33


Fig. 3.5d: Punti di metà iperbole attraverso l’intersezione delle linee di costruzione ordinate e quelle provenienti dall’unione dei punti di suddivisione dei lati del quadrilatero di costruzione

34


Fig. 3.5e: Punti di costruzione del paraboloide proiettati su metà parabola di appoggio e ordinati in base alla concavità

35


Fig. 3.5f: Unione dei punti e copia simmetrica a specchio per avere le direttrici, le generatrici e le iperboli

36


Fig. 3.5g: Superficie del paraboloide iperbolico dal loft dei segmenti di rigata del quadrilatero sghembo

37


Prospettica

Destra

Superiore

Frontale

Fig. 3.6: Variazione 1 dei parametri di ingresso dell’algoritmo del paraboloide iperbolico rigato

38


Prospettica

Destra

Superiore

Frontale

Fig. 3.7: Variazione 2 dei parametri di ingresso dell’algoritmo del paraboloide iperbolico rigato

39


Prospettica

Destra

Superiore

Frontale

Fig. 3.8: Variazione 3 dei parametri di ingresso dell’algoritmo del paraboloide iperbolico rigato

40


3.3- Elica, colonna torsa ed elicoide rigato aperto/chiuso e retto/obliquo

Fig. 3.9: Algoritmo e vista frontale e prospettica dell’elicoide rigato chiuso e retto

Descrizione algoritmica:

(Params/Special/Number Slider) <Ai>  <x> (Logic/Script/Variable Expression: π*x/180) <r>  <A> (XForm/Euclidian/Rotate)

(Number Slider) <R1>  <R> (Curve/Primitive/Circle CNR)

{0.0, 0.0, 0.0}  <C> (Circle CNR) <C>  <C> (Curve/Analysis/Evaluate Length) <P>  <O> (Vector/Plane/Plane Normal) 41


{0.0, -1.0, 0.0}  <Z> (Plane Normal) <P>  <G> (Rotate) <G>  <P> (Rotate)

(Number Slider) <R1>  <x> (Variable Expression: x*y) <r>  <L> (Evaluate Length)

{False}  <N> (Evaluate Length) <P>  <P> (Rotate)

(Evaluate Length) <P>  <A> (Curve/Primitive/Line) <L>  <G> (Rotate) <G>  <G> (XForm/Euclidian/Orient)

(Number Slider) <R2>  <R> (Circle CNR)

{0.0, 0.0, 0.0}  <C> (Circle CNR)  <C> (Evaluate Length) <P>  <B> (Line)

(Number Slider) <R2>  <x> (Variable Expression: x*y) <r>  <L> (Evaluate Length)

{False}  <N> (Evaluate Length) <P>  <O> (Plane Normal) <P>  <A> (Orient)

(Evaluate Length) <P>  <G> (XForm/Euclidian/Move) <G>  <O> (Plane Normal) <P>  <B> (Orient) <G>  <G> (Rotate)

(Number Slider) <Rot>  <x> (Variable Expression: π*x/180) <r>  <y> (Variable Expression: x*y)

(Variable Expression: π*x/180) <r>  <A> (Rotate)

(Number Slider) <H>  <H> (Variable Expression: H/(S-1)) <r>  <N> (Params/Primitive/Number) <N>  <N> (Logic/Sets/Series)

(Number

Slider)

<Nr>

<N>

(Scalar/Constants/Pi)

<y>

<A>

(Scalar/Operators/Division) 

(Number Slider) <S>  <C> (Series) <S>  <F> (Vector/Constants/Unit Z) <V>  <T> (Move)

(Number Slider) <S>  <S> (Variable Expression: S-1) <r>  <B> (Division) <R>  <N> (Series)

(Number Slider) <S>  <C> (Series) <S>  <A> (Rotate) <G>  <C> (Curve/Analysis/End Points) <S>  <V> (Curve/Spline/Interpolate)

(End Points) <E>  <V> (Interpolate) <C>  <C> (Surface/Freeform/Pipe)

(Number Slider) <Re>  <R> (Pipe)

(End Points) <E>  <C> (Circle CNR) <C>  <S> (Surface/Freeform/Loft)

(Number Slider) <Rct>  <R> (Circle CNR)

(Rotate) <G>  <Geo> (Params/Geometry/Geometry) <Geo>  <S> (Loft)

42


Fig. 3.10a: Generatrici come differenza tra i raggi 1 e 2 e copia in serie traslata e ruotata con sovrapposizione dei movimenti

43


Fig. 3.10b: Superficie loft dalle generatrici ed estrazione dei punti estremi dei segmenti al fine di ottenere le direttrici, l’elica e la colonna torsa

44


Fig. 3.11: Variazione dei parametri di ingresso dell’algoritmo per l’elicoide rigato aperto e retto e per quello chiuso e obliquo visualizzati nella vista superiore e prospettica

45


Fig. 3.12: Variazione dei parametri di ingresso dell’algoritmo per l’elica e la colonna torsa visualizzate nella vista superiore e prospettica

46


3.4- Rigata elicoidale cilindrica, conica e sferica a direttrici elicoidali simmetriche e asimmetriche

Fig. 3.13: Algoritmo e vista frontale e prospettica della rigata elicoidale cilindrica a direttrici elicoidali simmetriche

Descrizione algoritmica:

(Params/Special/Number Slider) <Ai>  <x> (Logic/Script/Variable Expression: π*x/180) <r>  <A> (XForm/Euclidian/Rotate)

(Variable Expression: π*x/180) <r>  <y> (Variable Expression: -abs(x*sin(y)))

(Variable Expression :π*x/180) <r>  <y> (Variable Expression: x*cos(y)) 47


(Number Slider) <Ai>  <x> (Variable Expression: -π*x/180) <r>  <A> (Rotate)

(Params/Primitive/Number) <R1=0>  <R> (Curve/Primitive/Circle CNR)

{0.0, 0.0, 0.0}  <C> (Circle CNR) <C>  <C> (Curve/Analysis/Evaluate Length)

(Number) <R1=0>  <x> (Variable Expression: x*y)

(Number) <R1=0>  <R> (Circle CNR)

{0.0, 0.0, 0.0}  <C> (Circle CNR) <C>  <C> (Evaluate Length)

(Number) <R1=0>  <x> (Variable Expression: x*y)

(Number Slider) <R2>  <R> (Circle CNR)

{0.0, 0.0, 0.0}  <C> (Circle CNR) <C>  <C> (Evaluate Length)

(Number Slider) <R2>  <x> (Variable Expression: x*y)

(Number Slider) <R2>  <x> (Variable Expression: -abs(x*sin(y)))

(Number Slider) <R2>  <x> (Variable Expression: x*cos(y))

(Number Slider) <R2>  <R> (Circle CNR)

{0.0, 0.0, 0.0}  <C> (Circle CNR) <C>  <C> (Evaluate Length)

(Number Slider) <R2>  <x> (Variable Expression: x*y)

(Number Slider <R2>  <r> (Variable expression: 2*r)

(Number Slider) <Rot>  <x> (Variable Expression: π*x/180) <r>  <y> (Variable Expression: x*y) <r>  <L> (Evaluate Length)

{False}  <N> (Evaluate Length) <P>  <O> (Vector/Plane/Plane Normal)

{0.0, -1.0, 0.0}  <Z> (Plane Normal) <P>  <G> (Rotate)

(Evaluate Length) <P>  <P> (Rotate)

(Evaluate Length) <P>  <A> (Curve/Primitive/Line)

(Variable Expression: π*x/180) <r>  <y> (Variable Expression: x*y) <r>  <L> (Evaluate Length)

{False}  <N> (Evaluate Length) <P>  <B> (Line) <L>  <G> (Rotate)

(Evaluate

Length)

<P>

<O>

(Plane

Normal)

<P>

<A>

(XForm/Euclidian/Orient) 

(Evaluate Length) <P>  <G> (Vector/Euclidian/Move)

(Variable Expression: π*x/180) <r>  <A> (Rotate) <G>  <P> (Rotate) <G>  <G> (Orient)

(Number Slider) <Rot>  <x> (Variable Expression: π*x/180+π) <r>  <y> (Variable Expression: x*y) <r>  <L> (Evaluate Length)

{False}  <N> (Evaluate Length) <P>  <O> (Plane Normal)

{0.0, -1.0, 0.0}  <Z> (Plane Normal) <P>  <G> (Rotate) 48


(Evaluate Length) <P>  <P> (Rotate)

(Evaluate Length) <P>  <A> (Line)

(Variable Expression: π*x/180+π) <r>  <y> (Variable Expression: x*y) <r>  <L> (Evaluate Length)

{False}  <N> (Evaluate Length) <P>  <B> (Line) <L>  <G> (Rotate)

(Evaluate Length) <P>  <O> (Plane Normal) <P>  <A> (Orient)

(Evaluate Length) <P>  <G> (Move)

(Variable Expression: π*x/180+π) <r>  <A> (Rotate) <G>  <P> (Rotate) <G>  <G> (Orient)

(Number Slider) <H>  <H> (Number) <H>  <H> (Variable expression: H/(S-1))

(Number) <H>  <A> (Scalar/Operators/Addition)

(Number) <H>  <H> (Variable Expression: H/(S-1))

(Number

slider)

<Nr>

<N>

(Params/Constants/Pi)

<y>

<A>

(Scalar/Operators/Division) 

(Number Slider) <Nr>  <N> (Pi) <y>  <A> (Division)

(Number Slider) <S>  <S> (Variable Expression: H/(S-1)) <r>  <N> (Number) <N>  <N> (Logic/Sets/Series)

(Number Slider) <S>  <C> (Series) <S>  <F> (Vector/Constants/Unit Z) <V>  <T> (Move) <G>  <O> (Plane Normal) <P>  <B> (Orient) <G>  <G> (Rotate)

(Number Slider) <S>  <S> (Variable Expression: S-1) <r>  <B> (Division) <R>  <N> (Series)

(Number Slider) <S>  <C> (Series) <S>  <A> (Rotate)

<G>  <C>

(Curve/Analysis/End Points) <S>  <V> (Curve/Spline/Interpolate) 

(Rotate) <G>  <C> (Curve/Util/Join Curves)

(Number Slider) <S>  <C> (Series)

(Number Slider) <S>  <S> (Variable expression: S-1) <r>  <B> (Division) <R>  <N> (Series) <S>  <A> (Rotate)

(Number Slider) <S>  <C> (Series)

(Number Slider) <S>  <S> (Variable Expression: H/(S-1)) <r>  <N> (Number) <N>  <N> (Series) <S>  <F> (Unit Z) <V>  <T> (Move) <G>  <O> (Plane Normal) <P>  <B> (Orient) <G>  <G> (Rotate) <G>  <C> (Join Curves) <C>  <L> (Logic/List/Shift List)

{-1}  <S> (Shift List)

{True}  <W> (Shift List) <L>  <C> (Intersect/Physical/BRep | Curve) 49


(Variable Expression: -abs(x*sin(y))) <r>  <F> (Unit Z) <V>  <O> (Plane Normal) <P>  <B> (Surface/Primitive/Cylinder)

(Plane Normal) <P>  <B> (Surface/Primitive/Cone)

(Plane Normal) <P>  <B> (Surface/Primitive/Sphere)

(Variable Expression: -abs(x*sin(y))) <r>  <x> (Variable Expression: -2*x) <r>  <B> (Addition) <R>  <L> (Cylinder)

(Variable Expression: -abs(x*sin(y))) <r>  <x> (Variable Expression: -x) <r>  <B> (Addition) <R>  <L> (Cone)

(Variable Expression: x*cos(y)) <r>  <R> (Cylinder) <C>  <B> (BRep | Curve) <P>  <V> (Curve/Spline/Poly Line) <Pl>  <D> (Logic/Tree/Flatten Tree) <D>  <S> (Surface/Freeform/Loft)

(Flatten Tree) <D>  <C> (End Points) <S>  <V> (Interpolate)

(End Points) <E>  <V> (Interpolate)

(Variable Expression: x*cos(y)) <r>  <R> (Cone) <C>  <B> (BRep | Curve) <P>  <D> (Logic/Tree/Prune Tree)

{1}  <N1> (Prune Tree) <T>  <V> (Poly Line) <Pl>  <D> (Flatten Tree) <D>  <S> (Loft)

(Flatten Tree) <D>  <C> (End Points) <S>  <A> (Logic/Tree/Merge)

(End Points) <E>  <A> (Merge)

(BRep | Curve) <P>  <D> (Flatten Tree) <D>  <L> (Logic/List/List Item)

(Flatten Tree) <D>  <L> (Logic/List/List Length) <L>  <L> (Variable Expression: L-1) <r>  <i> (List Item) <E>  <B> (Merge) <S>  <V> (Interpolate)

(Variable Expression: x*cos(y)) <r>  <R> (Sphere) <S>  <G> (Move)

(Variable Expression: x*cos(y)) <r>  <F> (Unit Z) <V>  <T> (Move) <G>  <B> (BRep | Curve) <P>  <D> (Prune Tree)

{1}  <N1> (Prune Tree) <T>  <V> (Poly Line) <Pl>  <D> (Flatten Tree) <D>  <S> (Loft)

(Flatten Tree) <D>  <C> (End Points) <S>  <A> (Logic/Tree/Merge)

(End Points) <E>  <A> (Merge)

(BRep | Curve) <P>  <D> (Flatten Tree) <D>  <L> (Logic/List/List Item)

(Flatten Tree) <D>  <L> (List Length) <L>  <L> (Variable Expression: L-1) <r>  <i> (List Item) <E>  <B> (Merge) <S>  <B> (Merge)

(Flatten Tree) <D>  <L> (List Item) 50


{0}  <i> (List Item) <E>  <A> (Merge) <S>  <V> (Interpolate)

Fig. 3.14a: Parametri di ingresso dell’algoritmo con altezza da impostare pari al doppio del raggio 2 per la rigata elicoidale sferica

51


Fig. 3.14b: Prima metà dei segmenti ottenuti dalla copia in serie traslata del raggio 2 con rotazione di α

52


Fig. 3.14c: Seconda metà dei segmenti ottenuti dalla copia in serie traslata del raggio 2 con rotazione di α + π

53


Fig. 3.14d: Unione dei segmenti e definizione dei solidi geometrici per l’intersezione anche nel caso di generatrici inclinate

54


Fig. 3.14e: Linee dai punti di intersezione e ordinamento delle liste per ottenere le direttrici

55


Fig. 3.14f: Generatrici, superficie loft e direttrici simmetriche e asimmetriche della rigata elicoidale sferica

56


Fig. 3.15: Vista frontale e prospettica della rigata elicoidale conica e sferica a direttrici elicoidali simmetriche

57


Fig. 3.16: Vista frontale della rigata elicoidale cilindrica, conica e sferica a direttrici elicoidali asimmetriche

58


4- Superfici loft

Le superfici loft sono superfici ottenute da una trasformazione geometrica rigida con variazione di scala di una curva generatrice lungo una direttrice. Questa descrizione si amplia rispetto a quella delle superfici rigate introducendo la variazione di scala come trasformazione geometrica aggiuntiva e considerando una curva generica come generatrice. La scelta di parametrizzare queste superfici deriva dall’importanza dell’operazione di loft nella modellazione. L’operazione di loft infatti consiste nel costruire superfici tridimensionali interpolando alcune curve di sezione.

Algoritmi progettati: 

Superficie loft da una curva di sezione orientata, scalata e ruotata su piani perpendicolari alla curva aperta di percorso

Superficie loft da una curva di sezione orientata, scalata e ruotata su piani orizzontali a distanza controllata

Superficie loft da una curva di sezione orientata, scalata e ruotata

su piani

perpendicolari alla curva chiusa di percorso 

Interpolazione di forma tra superfici loft

Gli algoritmi generativi descrivono la deformazione delle superfici loft come il risultato della trasformazione rigida con variazione di scala delle curve generatrici lungo le curve direttrici. Nell’ultimo algoritmo, invece, l’interpolazione di forma tra superfici loft si genera dall’interpolazione di movimento e di scala tra le curve di sezione.

59


4.1- Superficie loft da una curva di sezione orientata, scalata e ruotata su piani perpendicolari alla curva aperta di percorso

Fig. 4.1: Algoritmo e vista prospettica del poligono di sezione e della curva di percorso del loft, delle sezioni trasformate e della superficie finale

Descrizione algoritmica:

(Params/Geometry/Geometry) <Cs>  <D> (Logic/Tree/Graft Tree) <T>  <G> (XForm/Euclidian/Orient) 60


(Params/Geometry/Plane) <P>  <A> (Orient)

(Params/Geometry/Curve) <Cp>  <C> (Curve/Division/Perp Frames)

(Params/Special/Number Slider) <S>  <N> (Perp Frames) <F>  <B> (Orient) <G>  <G> (XForm/Affine/Scale)

(Perp Frames) <F>  <V> (Vector/Vector/Amplitude)

(Perp Frames) <F>  <P> (XForm/Euclidian/Rotate)

(Perp Frames) <F>  <C> (Scale)

(Perp Frames) <F>  <P> (XForm/Affine/Scale NU)

(Number Slider) <S>  <N> (Logic/Sets/Range)

(Params/Primitive/Integer) <0>  <i> (Logic/List/List Item)

(Number Slider) <S>  <i> (List Item)

(Number

Slider)

<Ri>

<N>

(Scalar/Constants/Pi)

<y>

<A>

(Scalar/Interval/Interval) 

(Number Slider) <Rf>  <N> (Pi) <y>  <B> (Interval) <I>  <D> (Range) <R>  <A> (Rotate)

(Number Slider) <Si>  <A> (Interval)

(Number Slider) <Sf>  <B> (Interval) <I>  <D> (Range) <R>  <F> (Scale) <G>  <G> (Scale NU)

(Number Slider) <Sxi>  <A> (Interval)

(Number Slider) <Sxf>  <B> (Interval) <I>  <D> (Range) <R>  <X> (Scale NU)

(Number Slider) <Syi>  <A> (Interval)

(Number Slider) <Syf>  <B> (Interval) <I>  <D> (Range) <R>  <Y> (Scale NU) <G>  <G> (Rotate) <G>  <S> (Surface/Freeform/Loft)

(Rotate) <G>  <B> (Surface/Freeform/Extrude)

(Number Slider) <Lec>  <A> (Amplitude) <V>  <D> (Extrude) <E>  <B> (Surface/Util/Brep Join) <B>  <B> (Surface/Util/Cap Holes)

(Rotate) <G>  <L> (List Item) <E>  <E> (Surface/Freeform/Planar Srf)

61


Fig. 4.2a: Orientamento del poligono di sezione sui piani perpendicolari alla curva di percorso del loft

62


Fig. 4.2b: Trasformazioni di scala uniforme, scala nella direzione x e y e rotazione delle sezioni del loft

63


Fig. 4.2c: Superficie loft dalle sezioni trasformate e solidi chiusi dalle superfici di estrusione delle curve

64


Superficie loft Rotazione Scala non uniforme

Scala uniforme Orientamento Curve

Fig. 4.3: Parametri di ingresso dell’algoritmo e viste prospettiche delle singole trasformazioni delle sezioni

65


4.2- Superficie loft da una curva di sezione orientata, scalata e ruotata su piani orizzontali a distanza controllata

Fig. 4.4: Algoritmo e vista prospettica della costruzione della superficie loft a partire dal poligono di sezione e dalle curve di controllo del percorso e applicando le trasformazioni di scala e rotazione alle sezioni orientate

66


Descrizione algoritmica:

(Vector/Point/Point XYZ) <Pt>  <G> (XForm/Euclidian/Move)

(Params/Special/Number Slider) <D>  <D> (Logic/Script/Variable Expression: D*x) <r>  <H> (Params/Special/Panel)

(Number Slider) <H/D>  <x> (Variable Expression: D*x) <r>  <H> /Variable Expression: H/N+1)

(Number Slider) <D>  <N> (Logic/Sets/Series)

(Number Slider) <D>  <N> (Variable Expression: H/N+1) <r>  <C> (Series) <S>  <F> (Vector/Constants/Unit Z) <V>  <T> (Move) <G>  <S> (Curve/Primitive/Line SDL)

(Params/Special/Boolean Toggle) <X-Y>  <X> (Vector/Vector/Vector XYZ)

(Boolean Toggle) <Y-X>  <Y> (Vectors XYZ) <V>  <D> (Line SDL)

(Vector XYZ) <V>  <V> (Vector/Vector/Amplitude)

(Boolean Toggle) <X-Y>  <Y> (Vector XYZ)

(Boolean Toggle) <Y-X>  <X> (Vector XYZ) <V>  <D> (Line SDL)

(Number Slider) <L1>  <L> (Line SDL) <L>  <A> (Intersect/Physical/Curve | Curve)

(Params/Geometry/Curve) <C1>  <B> (Curve | Curve) <P>  <S> (Line SDL)

(Number Slider) <L2>  <L> (Line SDL) <L>  <C> (Intersect/Physical/BRep | Curve)

(Curve) <C2>  <B> (Surface/Freeform/Extrude)

(Number Slider) <L3>  <A> (Amplitude) <V>  <D> (Extrude) <E>  <B> (BRep

| Curve)

<P>

<D> (Logic/Tree/Flatten Tree)

<D>

<V>

(Curve/Spline/Interpolate) 

(Flatten Tree) <D>

 <O> (Vector/Plane/Plane Normal) <P>  <B>

(XForm/Euclidian/Orient) 

(Plane Normal) <P>  <P> (XForm/Euclidian/Rotate)

(Plane Normal) <P>  <C> (XForm/Affine/Scale)

(Plane Normal) <P>  <P> (XForm/Affine/Scale NU)

(Params/Geometry/Geometry) <C>  (Logic/Tree/Graft Tree) <T>  <G> (Orient)

(Params/Geometry/Plane) <P>  <A> (Orient) <G>  <G> (Scale)

67


(Number

Slider)

<Ri>

<N>

(Scalar/Constants/Pi)

<y>

<A>

(Scalar/Interval/Interval) 

(Number Slider) <Rf>  <N> (Pi) <y>  <B> (Interval) <I>  <D> (Logic/Sets/Range)

(Number Slider) <H/D>  <N> (Range) <R>  <A> (Rotate)

(Number Slider) <H/D>  <N> (Range)

(Params/Primitive/Integer) <0>  <i> (Logic/List/List Item)

(Number Slider) <H/D>  <i> (List Item)

(Number Slider) <Si>  <A> (Interval)

(Number Slider) <Sf>  <B> (Interval) <I>  <D> (Range) <R>  <F> (Scale) <G>  <G> (Scale NU)

(Number Slider) <Sxi>  <A> (Interval)

(Number Slider) <Sxf>  <B> (Interval) <I>  <D> (Range) <R>  <X> (Scale NU)

(Number Slider) <Syi>  <A> (Interval)

(Number Slider) <Syf>  <B> (Interval) <I>  <D> (Range) <R>  <Y> (Scale NU) <G>  <G> (Rotate) <G>  <S> (Surface/Freeform/Loft)

(Rotate) <G>  <B> (Extrude)

(Rotate) <G>  <L> (List Item) <E>  <E> (Surface/Freeform/Planar Srf)

(Number Slider) <Lec>  <F> (Unit Z) <V>  <D> (Extrude) <E>  <B> (Surface/Util/Brep Join)

(Number Slider) <Lec>  <x> (Variable Expression: -x) <r>  <F> (Unit Z) <V>  <D> (Extrude) <E>  <B> (Brep Join) <B>  <B> (Surface/Util/Cap Holes)

68


Fig. 4.5a: Linee di costruzione, dalla serie di punti traslati in verticale a distanza controllata, intersecate con la curva 1 di controllo del percorso del loft e ulteriori linee costruite dai punti di intersezione risultanti

69


Fig. 4.5b: Intersezione delle linee di costruzione 2 con la superficie di estrusione della curva 2 di controllo al fine di ottenere i punti della curva di percorso del loft e di orientare la curva di sezione sui piani orizzontali

70


Fig. 4.5c: Trasformazioni di scala uniforme, scala lungo la direzione x e y e rotazione delle sezioni orientate

71


Fig. 4.5d: Superficie loft dalle sezioni e superfici planari, di estrusione e solidi chiusi

72


Fig. 4.6: Parametri di ingresso dell’algoritmo e vista superiore, frontale, laterale destra, e prospettica della superficie e delle curve di controllo del percorso del loft

73


Fig. 4.7: Variazione del parametro della lunghezza di estrusione delle curve di sezione del loft

74


4.3- Superficie loft da una curva di sezione orientata, scalata e ruotata su piani perpendicolari alla curva chiusa di percorso

Fig. 4.8: Algoritmo e viste prospettiche della costruzione della rigata elicoidale torica circolare

75


Descrizione algoritmica:

(Params/Geometry/Geometry) <Cs>  <D> (Logic/Tree/Graft Tree) <T>  <G> (XForm/Euclidian/Orient)

(Params/Geometry/Plane) <P>  <A> (Orient)

(Params/Geometry/Curve) <Cp>  <C> (Curve/Division/Perp Frames)

(Params/Special/Number Slider) <S>  <S> (Logic/Script/Variable Expression: 2*S) <r>  <N> (Perp Frames) <F>  <B> (Orient) <G>  <G> (XForm/Affine/Scale)

(Perp Frames) <F>  <P> (XForm/Euclidian/Rotate)

(Perp Frames) <F>  <C> (Scale)

(Perp Frames) <F>  <P> (XForm/Affine/Scale NU)

(Perp Frames) <F>  <V> (Vector/Vector/Amplitude)

(Variable Expression: 2*S) <r>  <x> (Variable Expression: x-1) <r>  <N> (Logic/Sets/Range)

(Variable Expression: 2*S) <r>  <y> (Variable Expression: x/y)

(Number Slider) <S>  <N> (Range)

(Number Slider) <S>  <x> (Variable Expression: (z-y)/x)

(Number Slider) <S>  <S> (Variable Expression: S-1) <r>  <C> (Logic/Sets/Series)

(Number Slider) <R>  <x> (Variable Expression: x*2*π) <r>  <A> (Scalar/Interval/Interval)

(Number Slider) <R>  <x> (Variable Expression: x/y) <r>  <x> (Variable Expression: x*2*π) <r>  <B> (Interval) <I>  <D> (Range) <R>  <A> (Rotate)

(Number Slider) <Si>  <A> (Interval)

(Number Slider) <Si>  <y> (Variable Expression: (z-y)/x)

(Number Slider) <Sm>  <B> (Interval) <I>  <D> (Range) <R>  <F> (Scale)

(Number Slider) <Sm>  <x> (Variable Expression: x-y)

(Number Slider) <Sm>  <z> (Variable Expression: (z-y)/x) <r>  <y> (Variable Expression: x-y) <r>  <S> (Series)

(Variable Expression: (z-y)/x) <r>  <x> (Variable Expression: -x) <r>  <N> (Series) <S>  <F> (Scale) <G>  <G> (Scale NU)

(Number Slider) <Sxi>  <A> (Interval)

(Number Slider) <Sxi>  <y> (Variable Expression: (z-y)/x) 76


(Number Slider) <Sxm>  <B> (Interval) <I>  <D> (Range) <R>  <X> (Scale NU)

(Number Slider) <Sxm>  <x> (Variable Expression: x-y) <r>  <S> (Series)

(Number Slider) <Sxm>  <z> (Variable Expression: (z-y)/x) <r>  <x> (Variable Expression: -x) <r>  <N> (Series) <S>  <X> (Scale NU)

(Number Slider) <Syi>  <A> (Interval)

(Number Slider) <Syi>  <y> (Variable Expression: (z-y)/x)

(Number Slider) <Sym>  <B> (Interval) <I>  <D> (Range) <R>  <Y> (Scale NU)

(Number Slider) <Sym>  <x> (Variable Expression: x-y)

(Number Slider) <Sym>  <z> (Variable Expression: (z-y)/x) <r>  <y> (Variable Expression: x-y) <r>  <S> (Series)

(Variable Expression: (z-y)/x) <r>  <x> (Variable Expression: -x) <r>  <N> (Series) <S>  <Y> (Scale NU) <G>  <G> (Rotate) <G>  <S> (Surface/Freeform/Loft)

{Closed Loft}  <O> (Loft)

(Rotate) <G>  <B> (Surface/Freeform/Extrude)

(Number Slider) <Lec>  <A> (Amplitude) <V>  <D> (Extrude) <E>  <B> (Surface/Util/Brep Join)

(Number Slider) <Lec>  <x> (Variable Expression: -x) <r>  <A> (Amplitude) <V>  <D> (Extrude) <E>  <B> (Brep Join) <B>  <B> (Surface/Util/Cap Holes)

77


Fig. 4.9a: Suddivisione e distribuzione della rotazione tra le curve di sezione del loft

78


Fig. 4.9b: Intervallo di scala tra la curva di sezione iniziale e media ripartito tra le sezioni del loft

79


Fig. 4.9c: Superficie loft dalle sezioni trasformate e solidi chiusi dalle superfici di estrusione delle curve

80


Fig. 4.10: Variazione dei parametri di ingresso dell’algoritmo della superficie loft con curva di percorso chiusa

81


Fig. 4.11: Superfici loft da curve di sezione multiple

82


4.4- Interpolazione di forma tra superfici loft

Fig. 4.12: Algoritmo di interpolazione di forma tra superfici loft

83


Descrizione algoritmica:

(Params/Geometry/Geometry) <Cs>  <G> (XForm/Euclidian/Orient)

(Params/Geometry/Plane) <Ps>  <A> (Orient)

(Params/Geometry/Curve) <C>  <C> (Curve/Division/Perp Frames)

(Params/Special/Number Slider) <S>  <N> (Perp Frames) <F>  <B> (Orient) <G>  <G> (XForm/Affine/Scale)

(Perp Frames) <F>  <V> (Vector/Vector/Amplitude)

(Perp Frames) <F>  <C> (Scale)

(Perp Frames) <F>  <P> (XForm/Affine/Scale NU)

(Perp Frames) <F>  <P> (XForm/Euclidian/Rotate)

(Number Slider) <S>  <S> (Logic/Script/Variable Expression: S+1) <r>  <i> (Logic/List/Split List)

(Number Slider) <S>  <N> (Logic/Sets/Range)

{0}  <i> (Logic/List/List Item)

(Number Slider) <S>  <i> (List Item)

(Number Slider) <So>  <i> (List Item)

(Number Slider) <So>  <N> (Perp Frames)

(Number Slider) <So>  <N> (Range)

(Number Slider) <Ri1>  <A> (Scalar/Interval/Interval)

(Number Slider) <Ri2>  <B> (Interval) <I>  <D> (Range) <R>  <N> (Scalar/Constants/Pi) <y>  <A> (Interval)

(Number Slider) <Rf1>  <A> (Interval)

(Number Slider) <Rf2>  <B> (Interval) <I>  <D> (Range) <R>  <N> (Pi) <y>  <B> (Interval) <I>  <D> (Range) <R>  <A> (Rotate)

(Number Slider) <Si1>  <A> (Interval)

(Number Slider) <Si2>  <B> (Interval) <I>  <D> (Range) <R>  <A> (Interval)

(Number Slider) <Sf1>  <A> (Interval)

(Number Slider) <Sf2>  <B> (Interval) <I>  <D> (Range) <R>  <B> (Interval) <I>  <D> (Range) <R>  <F> (Scale) <G>  <G> (Scale NU)

(Number Slider) <Sxi1>  <A> (Interval)

(Number Slider) <Sxi2>  <B> (Interval) <I>  <D> (Range) <R>  <A> (Interval) 84


(Number Slider) <Sxf1>  <A> (Interval)

(Number Slider) <Sxf2>  <B> (Interval) <I>  <D> (Range) <R>  <B> (Interval) <I>  <D> (Range) <R>  <X> (Scale NU)

(Number Slider) <Syi1>  <A> (Interval)

(Number Slider) <Syi2>  <B> (Interval) <I>  <D> (Range) <R>  <A> (Interval)

(Number Slider) <Syf1>  <A> (Interval)

(Number Slider) <Syf2>  <B> (Interval) <I>  <D> (Range) <R>  <B> (Interval) <I>  <D> (Range) <R>  <Y> (Scale NU) <G>  <G> (Rotate) <G>  <S> (Surface/Freeform/Loft) <L>  <D> (Logic/Tree/Flatten Tree) <D>  <L> (List Item)

(Flatten Tree) <D>  <L> (List Item)

{0}  <i> (List Item)

(Flatten Tree) <D>  <G> (Orient)

(Rotate) <G>  <B> (Surface/Freeform/Extrude)

(Number Slider) <Lec>  <A> (Amplitude) <V>  <D> (Extrude) <E>  <B> (Surface/Util/Brep Join)

(Number Slider) <Lec>  <x> (Variable Expression: -x) <r>  <A> (Amplitude) <V>  <D> (Extrude) <E>  <B> (Brep Join) <B>  <B> (Surface/Util/Cap Holes) <B>  <D> (Flatten Tree) <D>  <L> (Logic/List/Reverse List) <L>  <L> (Split List) <A>  <L> (Reverse List) <L>  <BRep> (Params/Geometry/BRep)

(Flatten Tree) <D>  <L> (Split List) <A>  <BRep> (BRep)

(Rotate) <G>  <L> (List Item) <E>  <E> (Surface/Freeform/Planar Srf) <S>  <G> (Orient)

(Curve) <Co>  <C> (Perp Frames) <F>  <B> (Orient)

(Plane) <Pl>  <A> (Orient)

(Perp Frames) <F>  <D> (Graft Tree) <T>  <B> (Orient)

85


Fig. 4.13a: Suddivisione delle curve di input e intervalli di rotazione tra le sezioni iniziali e finali dei loft 1 e 2

86


Fig. 4.13b: Intervalli di scala uniforme e nella direzione x e y tra le sezioni iniziali e finali dei loft 1 e 2

87


Fig. 4.13c: Ulteriori intervalli tra i valori di rotazione e di scala delle sezioni iniziali e finali dei loft

88


Fig. 4.13d: Orientamento lungo la curva Co delle superfici loft di interpolazione, dei solidi chiusi dall’estrusione delle curve di sezione interpolate e delle superfici planari

89


C

Cs

Co

Co/So

Ps Pl

Rf1

Rf2

Ri1

Ri2

Fig. 4.14: Parametri di ingresso dell’algoritmo e interpolazione di rotazione tra le curve di sezione orientate

90


Fig. 4.15: Variazione del numero di rotazioni di 180° della curva di sezione finale del loft 1 e del loft 2

91


Fig. 4.16: Interpolazione di rotazione, di scala uniforme e nella direzione x e y tra le curve di sezione orientate su percorsi multipli del loft

92


Fig. 4.17: Solidi chiusi dalle superfici di estrusione delle curve di sezione interpolate

93


5- Interpolazioni di forma

Questo capitolo descrive gli algoritmi generativi di interpolazione di forma tra curve e tra superfici. L’interpolazione individua nuove configurazioni deformate tra le geometrie. Al contrario dell’interpolazione di forma tra superfici loft, dove le configurazioni deformate sono generate dall’interpolazione di movimento e di scala tra le curve di sezione, le geometrie in questo caso possono essere topologicamente differenti. Il risultato è una trasformazione geometrica con variazione di forma tra curve e tra superfici.

Algoritmi progettati: 

Interpolazione di forma tra curve

Interpolazione di forma tra superfici

Interpolazione di forma combinata tra superfici

Gli algoritmi realizzati descrivono la modellazione geometrica generativa del morphing e la possibilità di ottenere combinazioni dell’interpolazione di forma tra superfici.

94


5.1- Interpolazione di forma tra curve

Fig. 5.1: Algoritmo e costruzione geometrica dell’interpolazione di forma tra un arco di cerchio e un segmento

95


Descrizione algoritmica:

(Params/Geometry/Curve) <C1>  <C> (Curve/Division/Divide Curve) <P>  <A> (Curve/Primitive/Line)

(Curve) <C1>  <L> (Logic/List/List Length) <L>  <N> (Logic/Sets/Duplicate Data)

(Curve) <C2>  <C> (Divide Curve)

(Params/Special/Number Slider) <Sc>  <N> (Divide Curve) <P>  <L> (Logic/List/Shift List)

(Number Slider) <Sc>  <S> (Logic/Sets/Series)

(Number Slider) <Shift>  <S> (Shift List)

{True}  <W> (Shift List) <L>  <B> (Line) <L>  <L> (List Length) <L>  <N> (Series) <S>  <A> (Scalar/Interval/Interval)

(Line) <L>  <D> (Duplicate Data)

(Line) <L>  <C> (Curve/Analysis/Evaluate Length)

(Number

Slider)

<D>

<L>

(Evaluate

Length)

<P>

<V>

(Curve/Spline/Interpolate) 

(Number Slider) <D>  <t> (Params/Special/Gradient)

{Traffic}  <Gradient>  <Kd> (Vector/Colour/Create Shader) <S>  <S> (Params/Special/Custom Preview)

(Number Slider) <C^>  <D> (Interpolate)

(Params/Special/Boolean Toggle) <Pe>  <P> (Interpolate) <C>  <G> (Custom Preview)

(Number Slider) <S>  <N> (Logic/Sets/Range) <R>  <L> (List Length) <L>  <C> (Series) <S>  <B> (Interval) <I>  <I> (Logic/List/Sub List)

(List Length) <L>  <N> (Duplicate Data) <D>  <L> (Sub List) <L>  <C> (Evaluate Length)

(Range) <R>  <D> (Duplicate Data) <D>  <D> (Logic/Tree/Graft Tree) <T>  <L> (Evaluate Length) <P>  <V> (Interpolate) <C>  <G> (Custom Preview)

(Graft Tree) <T>  <t> (Gradient)

{Traffic}  <Gradient>  <Kd> (Create Shader) <S>  <S> (Custom Preview)

96


Fig. 5.2a: Valutazione, alla lunghezza D, delle linee congiungenti i punti di suddivisione delle curve

97


Fig. 5.2b: Gradiente di colore applicato alle curve interpolate alle distanze D e D/S

98


D = 0.40

C2 C1 C1

D = 0.40

C2

Fig. 5.3: Variazione dei parametri di ingresso dell’algoritmo di interpolazione di forma tra segmenti multipli

99


Fig. 5.4: Variazione dei parametri di ingresso dell’algoritmo di interpolazione di forma tra curve chiuse

100


5.2- Interpolazione di forma tra superfici

Fig. 5.5: Algoritmo e costruzione geometrica dell’interpolazione di forma tra superfici

101


Descrizione algoritmica:

(Params/Geometry/Surface) <S1>  <S> (Surface/Util/Divide Surface) <P>  <A> (Curve/Primitive/Line)

(Surface) <S1>  <L> (Logic/List/List Length) <L>  <N> (Logic/Sets/Duplicate Data)

(Surface) <S2>  <S> (Divide Surface)

(Params/Special/Number Slider) <SU>  <U> (Divide Surface)

(Number Slider) <SU>  <SU> (Logic/Script/Variable Expression: (SU+1)*(SV+1)+ -1)

(Number Slider) <SU>  <SU> (Variable Expression: SU+1) <r>  <U> (Surface/Freeform/Surface From Points)

(Number Slider) <SV>  <V> (Divide Surface) <P>  <B> (Line) <L>  <L> (List Length) <L>  <N> (Logic/Sets/Series) <S>  <A> (Scalar/Interval/Interval)

(Line) <L>  <D> (Duplicate Data)

(Line) <L>  <C> (Curve/Analysis/Evaluate Length)

(Number Slider) <SV>  <SV> (Variable Expression: (SU+1)*(SV+1)-1) <r>  <S> (Series)

(Number Slider) <D>  <L> (Evaluate Length) <P>  <P> (Surface From Points) <S>  <G> (Params/Special/Custom Preview)

(Number Slider) <D>  <t> (Params/Special/Gradient)

{Traffic}  <Gradient>  <Kd> (Vector/Colour/Create Shader) <S>  <S> (Custom Preview)

(Number Slider) <S>  <N> (Logic/Sets/Range) <R>  <L> (List Length) <L>  <C> (Series) <S>  <B> (Interval) <I>  <I> (Logic/List/Sub List)

(List Length) <L>  <N> (Duplicate Data) <D>  <L> (Sub List) <L>  <C> (Evaluate Length)

(Range) <R>  <D> (Duplicate Data) <D>  <D> (Logic/Tree/Graft Tree) <T>  <L> (Evaluate Length) <P>  <P> (Surface From Points) <S>  <G> (Custom Preview)

(Graft Tree) <T>  <t> (Gradient)

{Traffic}  <Gradient>  <Kd> (Create Shader) <S>  <S> (Custom Preview)

102


Fig. 5.6a: Valutazione, alla lunghezza D, delle linee congiungenti i punti di suddivisione delle superfici

103


Fig. 5.6b: Gradiente di colore applicato alle superfici interpolate alle distanze D e D/S

104


Fig. 5.7: Variazione dei parametri di ingresso dell’algoritmo di interpolazione di forma tra superfici multiple

105


5.3- Interpolazione di forma combinata tra superfici

Fig. 5.8: Algoritmo di interpolazione di forma combinata tra superfici

106


Descrizione algoritmica:

(Params/Geometry/Surface) <S1>  <S> (Surface/Util/Divide Surface) <P>  <A> (Curve/Primitive/Line)

(Surface) <S2>  <S> (Divide Surface)

(Params/Special/Number Slider) <SU>  <U> (Divide Surface)

(Number Slider) <SU>  <SU> (Logic/Script/Variable Expression: SU+1) <r>  <U> (Surface/Freeform/Surface From Points)

(Number Slider) <SV>  <V> (Divide Surface) <P>  <B> (Line) <L>  <C> (Curve/Analysis/Evaluate Length)

(Number Slider) <D1>  <L> (Evaluate Length) <P>  <P> (Surface From Points) <S>  <Si1> (Surface) <Si1>  <S> (Divide Surface) <P>  <A> (Line)

(Surface) <S3>  <S> (Divide Surface)

(Number Slider) <SU>  <U> (Divide Surface)

(Variable Expression: SU+1) <r>  <U> (Surface From Points)

(Number Slider) <SV>  <V> (Divide Surface) <P>  <B> (Line) <L>  <C> (Evaluate Length)

(Number Slider) <D2>  <L> (Evaluate Length) <P>  <P> (Surface From Points) <S>  <Si2> (Surface) <Si2>  <S> (Divide Surface) <P>  <A> (Line)

(Surface) <S4>  <S> (Divide Surface)

(Number Slider) <SU>  <U> (Divide Surface)

(Variable Expression: SU+1) <r>  <U> (Surface From Points)

(Number Slider) <SV>  <V> (Divide Surface) <P>  <B> (Line) <L>  <C> (Evaluate Length)

(Number Slider) <D3>  <L> (Evaluate Length) <P>  <P> (Surface From Points)

107


Fig. 5.9a: Valutazione, alla lunghezza D1, delle linee congiungenti i punti di suddivisione delle superfici S1 ed S2

108


Fig. 5.9b: Valutazione, alle lunghezze D2 e D3, delle linee congiungenti i punti di suddivisione delle superfici Si1 ed S3 e Si2 ed S4

109


Fig. 5.10: Variazione dei parametri di ingresso dell’algoritmo di interpolazione di forma combinata tra superfici

110


6- Attrattori

Quest’ultimo capitolo mostra i risultati della modellazione geometrica generativa degli attrattori. Gli algoritmi generativi tornano molto utili per descrivere in modo semplice un insieme verso il quale evolve un sistema dinamico. La modellazione degli attrattori consente inoltre di comprendere un aspetto più generativo dell’utilizzo di questo approccio basato sulla logica algoritmica.

Algoritmi progettati: 

Punto attrattore nel piano

Punti, curve e superfici attrattori nello spazio

Attrattore con operazioni di differenza booleana, intersezione fisica e loft

Partendo da un singolo punto attrattore nel piano, si può estendere il modello a punti, curve e superfici attrattori nello spazio e infine influenzare indirettamente alcune operazioni di modellazione quali la differenza booleana, l’intersezione fisica e il loft. Una sperimentazione quindi che deriva da considerazioni di carattere geometrico e che rappresenta un esempio di come, in modo intuitivo, sia possibile gestire anche una maggiore complessità dei risultati.

111


6.1- Punto attrattore nel piano

Fig. 6.1: Algoritmo del punto attrattore nel piano

112


Descrizione algoritmica:

(Params/Special/Number Slider) <X1>  <X> (Vector/Point/Point XYZ)

(Number Slider) <Y1>  <Y> (Point XYZ)

(Number Slider) <Z1>  <Z> (Point XYZ) <Pt>  <A> (Vector/Point/Distance)

(Number Slider) <GX>  <X> (Vector/Point/Grid Rectangular)

(Number Slider) <GY>  <Y> (Grid Rectangular)

(Number Slider) <GD>  <S> (Grid Rectangular) <G>  <B> (Distance) <D>  <A> (Scalar/Operators/Division)

(Number Slider) <I(P1)>  <B> (Division) <R>  <A> (Scalar/Util/Minimum)

(Grid Rectangular) <G>  <C> (Curve/Primitive/Circle CNR)

(Grid Rectangular) <G>  <B> (Distance)

(Number Slider) <X2>  <X> (Point XYZ)

(Number Slider) <Y2>  <Y> (Point XYZ)

(Number Slider) <Z2>  <Z> (Point XYZ) <Pt>  <A> (Distance) <D>  <A> (Division)

(Number Slider) <I(P2)>  <B> (Division) <R>  <B> (Minimum) <R>  <B> (Minimum)

(Number Slider) <Max>  <A> (Minimum) <R>  <B> (Scalar/Util/Maximum)

(Number Slider) <Min>  <A> (Maximum) <R>  <R> (Circle CNR)

113


Fig. 6.2: Algoritmo di due punti attrattori che influenzano i raggi dei cerchi centrati nei punti della griglia rettangolare piana (raggi pari alle distanze minime dei centri dai punti attrattori divise per l’influenza)

114


Fig. 6.3: Parametri di ingresso dell’algoritmo dei punti attrattori nel piano

115


6.2- Punti, curve e superfici attrattori nello spazio

Fig. 6.4: Algoritmo dei punti, delle curve e delle superfici attrattori nello spazio. I componenti dell’algoritmo quando sono di colore arancio rappresentano un avvertimento da attribuire, in genere, alla mancanza di dati in un parametro.

116


Descrizione algoritmica:

(Params/Geometry/Surface) <S>  <D> (Logic/Tree/Graft Tree) <T>  <S> (XForm/Morph/Surface Box)

(Graft Tree) <T>  <S> (Surface/Util/Isotrim)

(Graft Tree) <T>  <I> (Scalar/Interval/Divide Interval2)

(Params/Special/Number Slider) <Offset>  <D> (Surface/Freeform/Offset)

(Number Slider) <SU>  <U> (Divide Interval2)

(Number Slider) <SV>  <V> (Divide Interval2) <S>  <D> (Surface Box) <B>  <T> (Surface/Morph/Box Morph)

(Params/Geometry/Geometry) <Gm>  <G> (Box Morph)

(Divide Interval2) <S>  <D> (Isotrim) <S>  <S> (Offset) <S>  <B> (Surface/Analysis/BRep Area) <C>  <B> (Vector/Vector/Vector 2Pt)

(Isotrim) <S>  <B> (BRep Area) <C>  <A> (Vector 2Pt)

{True}  <U> (Vector 2Pt) <V>  <Z> (Vector/Plane/Plane Normal)

(BRep Area) <C>  <O> (Plane Normal) <P>  <B> (XForm/Euclidian/Orient)

(Geometry) <Go>  <G> (Orient)

(BRep Area) <C>  <C> (XForm/Affine/Scale)

(BRep Area) <C>  <A> (Vector/Point/Distance)

(BRep Area) <C>  <P> (Vector/Point/Closest Point)

(Isotrim) <S>  <G> (Scale)

(Params/Geometry/Curve) <C>  <C> (Curve/Analysis/Evaluate Length)

(Number

Slider)

<Lc>

<L>

(Evaluate

Length)

<P>

<P1>

(Params/Geometry/Point) <P1>  <S> (Closest Point) 

(Curve) <Ca>  <C> (Curve/Division/Divide Curve)

(Number Slider) <Sca>  <N> (Divide Curve) <P>  <D> (Logic/List/Flatten Tree) <D>  <P2> (Point) <P2>  <S> (Closest Point)

(Surface) <Sa>  <S> (Surface/Util/Divide Surface)

(Number Slider) <Susa>  <U> (Divide Surface)

(Number Slider) <SVsa>  <V> (Divide Surface) <P>  <D> (Flatten Tree) <D>  <P3> (Point) <P3>  <S> (Closest Point)

(Point) <P4>  <S> (Closest Point)

117


(Point) <P5>  <S> (Closest Point) <P>  <L> (Logic/List/List Length) <L>  <x> <Logic/Script/Variable Expression: x-1) <r>  <i> (Logic/List/List Item)

(Closest Point) <P>  <B> (Distance) <D>  <K> (Logic/List/Sort List) <L>  <L> (List Item) <E>  <Dmax> (Params/Special/Panel)

(Distance) <D>  <A> (Scalar/Operators/Division)

(Number Slider) <I(P)>  <B> (Division) <R>  <A> (Scalar/Util/Minimum)

(Number Slider) <Max>  <B> (Minimum) <R>  <A> (Scalar/Util/Maximum)

(Number Slider) <Min>  <B> (Maximum) <R>  <F> (Scale)

Fig. 6.5a: Punto attrattore lungo C e punti attrattori di suddivisione della curva Ca e della superficie Sa

118


Fig. 6.5b: Insieme dei punti attrattori ed estrazione e offset del sottoinsieme di superfici dalle isocurve di S

119


Fig. 6.5c: Eventuale geometria esterna da orientare o deformare sulla superficie S e valutazione del valore più alto tra le distanze, dei baricentri di area delle superfici estratte, dai punti attrattori più vicini

120


Fig. 6.5d: Scala uniforme delle superfici estratte influenzata dai punti attrattori

121


P4

S

Sa

Ca

Fig. 6.6: Parametri di ingresso dell’algoritmo degli attrattori P4, Ca ed Sa sulla superficie S

122


Go=Gm

Fig. 6.7: Geometria esterna orientata e deformata sulla superficie S

123


6.3- Attrattore con operazioni di differenza booleana, intersezione fisica e loft

Fig. 6.8: Algoritmo del punto attrattore con operazioni di differenza booleana, intersezione fisica e loft

124


Descrizione algoritmica:

(Params/Geometry/Surface) <S>  <D> (Logic/Tree/Graft Tree) <T>  <S> (XForm/Morph/Surface Box)

(Graft Tree) <T>  <A> (Intersect/Boolean/Solid Difference)

(Graft Tree) <T>  <A> (Intersect/Physical/BRep | BRep)

(Graft Tree) <T>  <S> (Surface/Util/Isotrim)

(Graft Tree) <T>  <I> (Scalar/Interval/Divide Interval2)

(Params/Special/Number Slider) <Offset>  <D> (Surface/Freeform/Offset)

(Number Slider) <SU>  <U> (Divide Interval2)

(Number Slider) <SV>  <V> (Divide Interval2) <S>  <D> (Surface Box) <B>  <T> (Surface/Morph/Box Morph)

(Params/Geometry/Geometry) <Gm>  <G> (Box Morph)

(Divide Interval2) <S>  <D> (Isotrim) <S>  <S> (Offset) <S>  <B> (Surface/Analysis/BRep Area) <C>  <B> (Vector/Vector/Vector 2Pt)

(Isotrim) <S>  <B> (BRep Area) <C>  <A> (Vector 2Pt)

{True}  <U> (Vector 2Pt) <V>  <Z> (Vector/Plane/Plane Normal)

(Vector 2Pt) <V>  <V> (Vector/Vector/Amplitude)

(Number Slider) <Lv>  <A> (Amplitude) <V>  <T> (XForm/Euclidian/Move)

(Amplitude) <V>  <V> (Vector/Vector/Unit Vector) <V>  <V> (Amplitude)

(Unit Vector) <V>  <V> (Vector/Vector/Reverse) <V>  <V> (Amplitude)

(Number Slider) <Le>  <A> (Amplitude) <V>  <D> (Surface/Freeform/Extrude)

(BRep Area) <C>  <O> (Plane Normal) <P>  <B> (XForm/Euclidian/Orient)

(Geometry) <Go>  <G> (Orient)

(BRep Area) <C>  <C> (XForm/Affine/Scale)

(BRep Area) <C>  <A> (Vector/Point/Distance)

(BRep Area) <C>  <P> (Vector/Point/Closest Point)

(Isotrim) <S>  <G> (Scale)

(Params/Geometry/Curve) <C>  <C> (Curve/Analysis/Evaluate Length)

(Number

Slider)

<Lc>

<L>

(Evaluate

Length)

<P>

<P1>

(Params/Geometry/Point) <P1>  <S> (Closest Point) 

(Curve) <Ca>  <C> (Curve/Division/Divide Curve)

125


(Number Slider) <Sca>  <N> (Divide Curve) <P>  <D> (Logic/List/Flatten Tree) <D>  <P2> (Point) <P2>  <S> (Closest Point)

(Surface) <Sa>  <S> (Surface/Util/Divide Surface)

(Number Slider) <Susa>  <U> (Divide Surface)

(Number Slider) <SVsa>  <V> (Divide Surface) <P>  <D> (Flatten Tree) <D>  <P3> (Point) <P3>  <S> (Closest Point)

(Point) <P4>  <S> (Closest Point)

(Point) <P5>  <S> (Closest Point) <P>  <B> (Distance) <D>  <K> (Logic/List/Sort List) <L>  <L> (List Item)

(Params/Primitive/Number)

<0>

<i>

(List

Item)

<E>

<Dmin>

(Params/Special/Panel) 

(Distance) <D>  <B> (Scalar/Operators/Division)

(Number Slider) <I(P)>  <A> (Division) <R>  <A> (Scalar/Util/Minimum)

(Number Slider) <Max>  <B> (Minimum) <R>  <A> (Scalar/Util/Maximum)

(Number Slider) <Min>  <B> (Maximum) <R>  <F> (Scale) <G>  <B> (Surface/Analysis/BRep Components) <E>  <C> (Curve/Util/Join Curves) <C>  <D> (Flatten Tree)

(BRep Components) <V>  <V> (Curve/Spline/Curve)

{True}  <P> (Curve/Spline/Curve) <C>  <D> (Flatten Tree) <D>  <C2> (Curve) <C2>  <G> (Move) <G>  <B> (Extrude) <E>  <B> (BRep | BRep) <C>  <D> (Flatten Tree) <D>  <G> (Move)

(Maximum) <R>  <A> (Scalar/Operators/Multiplication)

(Number Slider) <T1>  <B> (Multiplication) <R>  <A> (Amplitude) <V>  <T> (Move) <G>  <D> (Graft Tree) <T>  <S> (Surface/Freeform/Loft)

(Maximum) <R>  <A> (Multiplication)

(Number Slider) <T2>  <B> (Multiplication)

(Maximum) <R>  <B> (Division)

(Number Slider) <T2i>  <A> (Division) <R>  <A> (Amplitude) <V>  <T> (Move) <G>  <D> (Graft Tree) <T>  <S> (Loft)

(Maximum) <R>  (Logic/Script/Variable Expression: 2*x) <r>  <A> (Minimum)

(Number) <1>  <B> (Minimum) <R>  <F> (Scale) <G>  <B> (BRep Components) <E>  <C> (Join Curves) <C>  <D> (Flatten Tree)

(BRep Components) <V>  <V> (Curve/Spline/Curve)

126


{True}  <P> (Curve/Spline/Curve) <C>  <D> (Flatten Tree) <D>  <C1> (Curve) <C1>  <G> (Move) <G>  <B> (Extrude) <E>  <B> (BRep | BRep) <C>  <S> (Loft)

{Loose}  <O> (Loft)

Fig. 6.9a: Punto attrattore lungo C e punti attrattori di suddivisione della curva Ca e della superficie Sa

127


Fig. 6.9b: Insieme dei punti attrattori ed estrazione e offset del sottoinsieme di superfici dalle isocurve di S

128


Fig. 6.9c: Eventuale geometria esterna da orientare o deformare sulla superficie S e valutazione del valore più alto tra le distanze, dei baricentri di area delle superfici estratte, dai punti attrattori più vicini

129


Fig. 6.9d: Influenza del punto attrattore sulla scala uniforme delle superfici estratte e curve NURBS dai vertici

130


Fig. 6.9e: Intersezione fisica tra la sfera S e le superfici di estrusione, in direzione dell’offset, delle curve NURBS C1 e C2 con traslazione delle curve proiettate influenzata dal punto attrattore

131


Fig. 6.9f: Differenza booleana tra la sfera S e le superfici di estrusione e operazione di loft dalle curve ottenute

132


S Se

Se

S

Fig. 6.10: Differenza booleana tra la sfera S e le superfici Se di estrusione, in direzione dell’offset, delle curve NURBS dai vertici delle superfici estratte dalle isocurve di S e scalate con il punto attrattore

133


C2

C1

S

Fig. 6.11: Intersezione fisica tra la sfera S e le superfici di estrusione, in direzione dell’offset, delle curve NURBS C1 e C2 dai vertici delle superfici estratte dalle isocurve di S e scalate con il punto attrattore

134


C

B

A

C

B

A S

Fig. 6.12: Superfici loft dalle curve A e B di proiezione sulla sfera S e dalla curva C traslata, in direzione dell’offset, con il punto attrattore

135


Lc = 0.500 Lc = 0.375

Lc = 0.125

Lc = 0.250

P1

S

Lc = 0.000 C Lc = 0.000

Fig. 6.13: Parametri di ingresso dell’algoritmo e movimento del punto attrattore P1 lungo la curva C con influenza indiretta sulle operazioni di differenza booleana, intersezione fisica e loft

136


Conclusioni

L’intento della tesi è quello di analizzare un approccio alla modellazione generativa basato sulla logica algoritmica attraverso alcune applicazioni nel campo della modellazione geometrica. Osservando gli algoritmi generativi dei capitoli precedenti è possibile comprenderne le potenzialità produttive nella progettazione semplicemente soffermandosi sulle modalità di realizzazione degli stessi e sui risultati visualizzati. La completa parametrizzazione delle geometrie mostra come il disegno vettoriale inizialmente si riduce a punti, curve e superfici costituenti i parametri di ingresso degli algoritmi relazionati secondo regole di trasformazione. Quindi è possibile visualizzare e riconfigurare le geometrie in output degli algoritmi, associate a quelle iniziali, con la semplice variazione dei parametri in input. Questo fa comprendere come sia estremamente intuitivo parametrizzare un progetto in modo sia globale che locale, con la possibilità di modificare il modello in diverse fasi della progettazione oltre che a realizzarlo in minor tempo. Con la gestione dei dati attraverso le liste si può inoltre accedere alle informazioni di ogni singola parte di una geometria più complessa, con il vantaggio di avere un maggior controllo del progetto. L’approccio algoritmico consente anche di sperimentare con grande versatilità nel campo della ricerca formale, un aspetto della tesi non fine a se stesso ma derivante da considerazioni di carattere geometrico generativo: la riconoscibilità delle geometrie in output degli algoritmi progettati, infatti, è caratterizzata da un equilibrio tra complessità geometrica e complessità formale, con tratti identificabili della definizione algoritmica. Quest’approccio infine contribuisce a rendere ancora più flessibile la progettazione ondemand, già attuata grazie all’utilizzo di software parametrici associativi, estendendola a una produttività generativa più concreta in cui i designer realizzano strumenti per progettare tenendo conto delle tecnologie produttive in uso nell’azienda specifica, la quale produce su richiesta dell’acquirente/committente che può intervenire, guidato dal progettista, sul processo di trasformazione geometrica del modello (creazione partecipata).

137


Bibliografia

Pubblicazioni Iwamoto, Lisa, Digital Fabrications: Architectural and Material Techniques, Princeton Architectural Press, 2009. Meredith, Michael, From Control to Design: Parametric/ Algorithmic Architecture, Actar, 2008. Munari, Bruno, Da cosa nasce cosa, Economica Laterza, 200711. Munari, Bruno, Fantasia, Universale Laterza, 200719. Spiller, Neil, Digital Architecture Now: A Global Survey of Emerging Talent, Thames & Hudson, 2008. Tedeschi, Arturo, Architettura parametrica: Introduzione a Grasshopper®, Le Penseur, 20102.

Riferimenti web http://andreagraziano.blogspot.com http://antonioturiello.blogspot.com http://assex.altervista.org http://madeincalifornia.blogspot.com http://mixexperience.ning.com http://www.argenia.it http://www.giuliopiacentino.com http://www.grasshopper3d.com http://www.it.rhino3d.com 138


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.