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