ALMA MATER STUDIORUM • UNIVERSITÀ DI BOLOGNA
Facoltà di Ingegneria
CORSO DI LAUREA IN INGEGNERIA EDILE ARCHITETTURA DIPARTIMENTO DI ARCHITETTURA E PIANIFICAZIONE TERRITORIALE
TESI DI LAUREA ARCHITETTURA E COMPOSIZIONE ARCHITETTONICA 3
Isocomunicazione: integrità tensionale e connessioni intensive nel parco di Pontelungo
CANDIDATO: Vincenzo Reale RELATORE: Chiar.mo Prof. Ing. Alessio Erioli CORRELATORI: Ing. Gabriele Giacobazzi Arch.Ludovico Lombardi
Anno Accademico 2008/2009 Sessione III
http://pquod.blogspot.com
Attribution-NonCommercial-NoDerivs 3.0
3
“Guardò oltre, verso flussi di numeri che scorrevano in direzioni opposte. Capì quanto significasse per lui, il movimento di dati su uno schermo. Esaminò i diagrammi figurativi che si rifacevano a modelli organici, ala d’uccello e conchiglia spiraliforme. Era pura superficialità affermare che numeri e grafici fossero la fredda compressione di turbolente energie umane, desideri e sudate notturne ridotti a lucide unità sui mercati finanziari. In realtà i dati stessi erano pieni di calore e di passione, un aspetto dinamico del processo della vita. Quella era l’eloquenza di alfabeti e sistemi numerici, ora pienamente realizzata in forma elettronica, nel sistema binario del mondo, l’imperativo digitale che definiva ogni respiro dei miliardi di esseri viventi del pianeta. Lì c’era il palpito della biosfera. I nostri corpi e oceani erano lì, integri e conoscibili.” Don De Lillo – Cosmopolis
Alla mia famiglia e ai miei amici
2
3
Keywords: • Comunicazione • Campi intensivi • Integrità tensionale • Eleganza
5
Indice
Abstract
p a g . 11
Interazioni in un campo di forze
pag.13
IntegritĂ tensionale
pag.37
Po n te l u n g o e Pa rc o d e i P i n i , i n te r a z i o n i e d e l e ga n z a
pag.87
Bibliografia
6
p a g . 11 7
7
Abstract
8
9
Iso: primo elemento di composti nei quali indica “uguaglianza” o anche “affinità” [..]Comunicazione: partecipazione, trasmissione. Nell’ambito delle scienze del comportamento e nella teoria dell’informazione, il processo consistente nello scambio di messaggi tra individui o sistemi [..] (1)
Si può riconoscere come la carenza o il deterioramento della “comunicazione”, intesa come scambio di informazioni e dati, all’interno di sistemi complessi sia una potenziale causa della
paralisi, della stagnazione o necrosi del sistema stesso.
La definizione di sistemi iperconnessi, dove ogni qualvolta un canale sia precluso altri vengano automaticamente e concorrenzialmente attivati, o dove contemporanemante operino anche in condizioni non critiche, permette a questi di fornire una performance non soltanto ottimale (seppure potenzialmente inferiore rispetto ad una singola soluzione ad hoc) ma soprattutto adattabile e dinamica rispetto ai diversi stimoli esogeni che vengono a configurarsi, più efficiente così a livello globale.
L’ a m b i t o d e l P a r c o d e i P i n i a P o n t e l u n g o ( p e r i f e r i a d i B o l o g n a ) d e n o t a u n a c a r e n z a c r o n i c a di comunicazione tra gli ambiti
che costituiscono il sistema, dalla quale scaturiscono di-
v e r s e c r i t i c i t à ( d e g r a d o , a b b a n d o n o , p e r i c o l o s i t à s o c i a l e , e c c . . . ) . L’ o b i e t t i v o d i v e n t a q u i n di quello di definire un complesso sostenibile e multiconnesso che permetta di collegare le varie parti del sistema e di svilupparne le potenzialità, in modo da renderlo fruibile, porre fine alle criticità negative e sviluppare una serie di
di interazioni dinamiche che portino a
mutazioni favorevoli. L’ i p e r c o n n e s s i o n e s i t r a d u c e c o s ì n e l l ’ a b b a t t i m e n t o d e l l e b a r r i e r e v i s i b i l i / i n v i s i b i l i c h e c r e ano una discontinuità all’interno della zona, nella creazione di punti di riferimento, di riparo e di percorrenza dove questi sono carenti, ma anche nella definizione di un sistema costruttivo anch’esso iperconnesso nel quale gli sforzi a cui la struttura di supporto è sottoposta localmente si distribuiscano globalmente a tutto il sistema in maniera da renderlo flessibile e resistente al cambiamento delle condizioni esterne.
( 1 ) G i a c o m o D e v o t o e G i a n C a r l o O l i , D i z i o n a r i o d e l l a l i n g u a i t a l i a n a , L e M o n n i e r, 2 0 0 9 , F i r e n z e
10
11
Interazioni in un campo di forze
12
13
“Quando usiamo la parola forza, la usiamo, come fa sempre il fisico, per amore di brevità, per servirci di un simbolo che indichi la intensità e il verso di una azione, riferita al simbolo o diagramma di un oggetto materiale. È un termine soggettivo e simbolico quanto la forma stessa e q u i n d i , t r a t t a n d o d i f o r m e , l o s i p u ò u s a r e s e n z a i m p r o p r i e t à . P e rtanto la forma di ogni porzione di materia, sia essa viva o morta, e i cambiamenti di forma che appaiono nei suoi moti e nella sua crescita, possono sempre venir descritti come l’effetto dell’azione di una forza. I n b r e v e : l a f o r m a d i u n o g g e t t o è u n d i a g r a m m a d i f o r z e .” ( 2 )
Una delle conquiste teoriche più impor tanti della sensibilità contemporanea
in
campo architettonico è il superamento della concezione di design guidato dalla geometr ia come astratta regolatr ice dei mater iali da costr uzione verso la convinzione che il materiale e il compor tamento materiale devono essere implicati nella geometria stessa. Nei modelli precedenti il ruolo sovrano della geometria era quello di regolare o imprimersi sulle irrazionalità e sulle condizioni acciden-
1
tali della mater ia. Le misure, le proporzioni e tutti gli elementi di pura estensione mantenevano una pr ior ità su ciò che regolavano. Il nuovo modello architettonico è quindi concepito non come una soppressione delle misure ma come un interscambio tra le differenze intensive ed estensive. L e d i f f e r e n z e i n t e n s i v e , d e f i n i t e a n c h e “ g r a d i e n t e ”, s o n o p r o p r i e t à d e l l a m a t e r i a c o n d i f f e r e n z e i n d i v i s i b i l i , q u a l i p e s o , e l a s t i c i t à , p r e s s i o n e , c a l o r e , d e n s i t à . Tu t t e le propr ietà intensive propr ie di un oggetto che viene dimezzato si mantengono uguali in ciascuna metà. Ad esempio, una tazza di acqua bollente, divisa a metà, è calda come lo era prima della divisione. Al contrar io, le propr ietà estensive sono propr ietà della mater ia con differenze di visibili, come la misura, i limiti, la massa, il volume totale e il tempo. Se una cer ta quantità di acqua bollente è divisa equamente
in due recipienti, ciascun recipi-
ente conterrà metà della massa iniziale. Non è però giusto affer mare che le qualità estensive sono quantitative e quelle intensive qualitative. Infatti le pr ime sono semplicemente quantitative, mentre le seconde sono sia quantitative che qualitative. (3)
2 ( 2 ) D ’A R C Y W e n t w o r t h T h o m p s o n , O n G r o w t h a n d F o r m , p . 1 5 , D o v e r r e p r i n t , M i n e o l a , 1 9 9 2 ( 3 ) R A I S E R J e s s e , A t l a s o f n o v e l t e c t o n i c s , p . 7 2 - 7 7, P r i n c e t o n A r c h i t e c t u r a l P r e s s , N e w Yo r k , 2 0 0 6 , elaborazione dell’autore
14
( 1 ) Pro s p e tto d i u n a c a s a i n s t i l e g e o rg i a n o b a s a t a s u l l a s e z i o n e a u re a ( 2 ) R i l eva z i o n i t e r m i c h e s a t e l l i t a r i , c o s t a o c c i d e n t a l e S t a t i U n i t i , h tt p : / / w w w. w i k i p e d i a . c o m
15
“Naturalmente il poeta dirà che c’è assolutamente una dimensione intensiva insita nelle 5:00 del pomeriggio, così come l’artista dirà che ci sono certe misure estensive, come la proporzione umana o la sezione aurea, che giocano in una sorta di risonanza con l’animo umano. Ma in entrambi i casi
si potrebbe
argomentare che l’effettiva natura di queste situazioni risale al loro contesto. Nel primo caso il numero non è semplicemente il tempo dichiarato dall’orologio, m a u n m o m e n to d e l l a g i o r n a ta , m e n t re n e l s e c o n d o c a s o è u n’ i m m e d i a te z z a v i s i va c h e a c q u i s i s c e u n a p ro p o r z i o n e c o m e m a te r i a l e , s e n z a t ra s c e n d e r l o” ( 4 )
La relazione tra intensivo ed estensivo ha sempre contraddistinto le ar ti minori e le pratiche specializzate di design architettonico, quali l’ar tigianato medievale della pietra. Ma al tempo non era possibile inser ire questa specializzazione a livello globale. La tecnologia del diciannovesimo secolo e il processo di meccanizzazione hanno marginalizzato questa dimensione di pratica perchè non poteva essere 3
standardizzata e sistematizzata (due processi prevalenti della moder nizzazione). Anche dal punto di vista filosofico esulava dalla concezione che fosse la ragione a gover nare il tessuto dell’edificio, la razionalità ad elevarsi sopra la mater ia. Pe r m e tte re a q u e s t a d i n a m i c a d i o p e r a re è i nve c e i m p o r t a n te n o n s o l t a n to n e l reame dei nuovi materiali ma per ripensare la costruzione e l’organizzazione.
Dopo la r ivoluzione infor matica, attraverso le tecnologie attuali è altresì possibile definire o individuare dei campi intensivi e mappar li attraverso soft ware di analisi (solare, termica, illuminotecnica, dinamica, ecc..). Una volta definiti i campi di forze nelle quali l’architettura si trova per sua natura, fisica, ad operare è possibile, tramite soft ware di modellazione parametr ica, creare delle superfici e delle str utture r ispondenti ed adattabili a queste condizioni. Uno degli esempi più semplici: la superficie di una str uttura la cui porosità è regolata in base all’irraggiamento solare, dove esso è maggiore essa offr irà maggiore scher matura e viceversa.
Tu t t o q u e s t o p o r t a n e l l a f a s e s u c c e s s i v a a l e g a r e q u e s t o t i p o d i a p p r o c c i o c o n l e nuove tecnologie di produzione contemporanea industriale. S u p e r a t e l e c a t e n e d i p r o d u z i o n e d o v e “ o n e s i z e f i t s a l l ”, d o v e c i o è i l p r o d o t t o è
4 (4) RAISER Jesse, op. cit.,
p.18 (3) Ar tigiani medievali, lavorazione della pietra, miniatura da codice medievale inglese (4) CNC a cinque assi durante la fresatura di modello per uno scafo, http://janseneer ing.wordpress.com
16
17
standardizzato e poi distribuito uguale per ogni consumatore (cercando nell’ambito d e l l a p r o g e t t a z i o n e d i i n d i v i d u a r e l a c o n f i g u r a z i o n e “ m e d i a ”, c h e m e d i a p p u n t o l e esigenze di ogni consumatore), tecnologie quali le macchine a controllo numerico aprono la strada oggi una personalizzazione del prodotto, la cosiddetta “mass c u s to m i z a t i o n” . Q u e s to h a u n r i svo l to a n c h e n e l l a p ro d u z i o n e a rc h i te tto n i c a : s e il costo per la produzione di pezzi “simili” ma non identici è equivalente o di poco superiore alla produzione di una grande quantità di componenti standardizzati ecco che diviene possibile produrre
i pannelli di una superficie quale quella
dell’esempio di cui sopra facendo interagire le macchine di produzione a controllo numer ico con il soft ware di modellazione utilizzato.
La creazione di str utture e superfici che agiscono interagendo con i campi intensivi è possibile attraverso l’utilizzo di diversi programmi parametr ici, uno di questi è il plugin Rhinoscript per il programma di modellazione nurbs Rhinocerous. Nell’ambito preparatorio alla tesi sono state sviluppate una serie di definizioni di questo tipo.
S c r i p t # 01 - D e f i n i z i o n e d i s u p e r f i c i i n c a m p i d i i n te r a z i o n e Il primo esempio sono una serie di possibili pannellizzazioni di superfici che vari-
5
ano la loro porosità proporzionalmente alla loro distanza da dei punti attrattor i. Oltre alla porosità possono esserci anche altri tipi di variazioni quali lo spessore dei componenti, la loro densità. Option Explicit ‘ . Scr ipt wr itten by Vincenzo Reale ‘ . univin@libero.it ‘ S c r i p t v e r s i o n s a b a t o 11 m a g g i o 2 0 0 9 0 5 . 0 2 . 2 8 Call SurfacesEditor() Sub SurfacesEditor() Dim arr param, arrresults, arr values Dim strsurf Dim arrchoose a r r c h o o s e = ( a r r a y ( “ 1 ° S U R F H O N E Y ”,” 2 ° S U R F H E X A G O N ”, “ 3 ° S U R F G R I D ”,” 4 ° S U R F R N D ”,” 5 ° S U R F B O X ”,” 6 ° S U R F W A V E S ”,” 7 ° S U R F B O X H O L E ”,” 8 ° S U R F P Y R A M I D ”,” 9 ° S U R F C U R V E S ” ) ) If isnull (arrchoose) Then Exit Sub a r r p a r a m = a r r a y ( “ c r e a t e s u r f a c e s f r o m e q u a t i o n ? ( Y / N ) ”,” e q u a t i o n s u r f a c e s z = f ( x , y [ , D , A ] ) ”, “ u s u b d i v i s i o n s ( > 1 ) ”,” v subdivisions (>1)”) a r r v a l u e s = a r r a y ( “ Y ”,” c o s ( s q r ( x ^ 2 + y ^ 2 ) ) ”,” 5 ”,” 5 ” ) a r r c h o o s e = R h i n o . L i s t B o x ( a r r c h o o s e , “ c h o o s e ! ”, “ S U R F A C E ” ) a r r r e s u l t s = r h i n o . p r o p e r t y l i s t b o x ( a r r p a r a m , a r r v a l u e s ,” P a r a m e t e r s ”,” V i n k ’ s S u r f a c e E d i t o r ” ) D i m u p a r, v p a r upar = CInt (for matnumber (arrresults(2))) If isnull(upar) Then Exit Sub vpar = CInt (for matnumber (arrresults(3))) If isnull (vpar) Then Exit Sub If isarray(arrresults) Then Select Case Ucase (arrresults(0)) Case “Y” s t rs u r f = c re a te s u r fa c e ( a r r re s u l t s ( 1 ) , u p a r, v p a r ) Case “N” s t r s u r f = r h i n o . g e t o b j e c t ( “ S e l e c t s u r f a c e t o t e x t u r i z e ”, 8 + 1 6 + 3 2 , Tr u e , Tr u e ) End Select Select Case Ucase (arrchoose) Case “1° SURFHONEY” Ca l l s u r f h o n ey ( s t rs u r f, u p a r, v p a r ) Case “2° SURFHEXAGON”
18
6 (5) Stomata della pelle del pomodoro, la loro aper tura è regolata dalla differenza di temperatura tra l’inter no e l’ester no in maniera da provvedere alla traspirazione senza che esso dissecchi, http://hawaii.hawaii.edu/laurab/generalbotany (6) Sviluppo di una definizione di Rhinoscript che riprende il compor tamento della stomata seguendo regole di vicinanza
19
Ca l l s u r f h exa g o n ( s t rs u r f, u p a r, v p a r ) Case “3° SURFGRID” Ca l l s u r f g r i d ( s t rs u r f, u p a r, v p a r ) Case “4° SURFRND” Ca l l s u r f r n d ( s t rs u r f, u p a r, v p a r ) Ca s e “ 5 ° S U R F B OX ” Ca l l s u r f b ox ( s t rs u r f, u p a r, v p a r ) C a s e “ 6 ° S U R F WAV E S ” Ca l l s u r f wave s ( s t rs u r f, u p a r, v p a r ) Ca s e “ 7 ° S U R F B OX H O L E ” Ca l l s u r f b ox h o l e ( s t rs u r f, u p a r, v p a r ) Ca s e “ 8 ° S U R F PY R A M I D ” Ca l l s u r f py r a m i d ( s t rs u r f, u p a r, v p a r ) Ca s e “ 9 ° S U R F C U RV E S ” Ca l l s u r f c u r ve s ( s t rs u r f, u p a r, v p a r ) End Select End If C a l l r h i n o . E n a b l e R e d r a w ( Tr u e ) End Sub ‘ - - - - - C R E AT E S U R F A C E - - - - Fu n c t i o n c re a te s u r fa c e ( s t re q , u p a r, v p a r ) D i m a r r C o u n t ( 1 ) , n C o u n t , x , y, z Dim intstart, intEnd intstart = -5 intEnd = -5 arrCount(0) = upar arrCount(1) = vpar nCount = 0 Dim arrpoints() F o r x = i n t s t a r t To a r r C o u n t ( 0 ) + s g n ( i n t s t a r t ) * ( a b s ( i n t s t a r t ) + 1 ) F o r y = i n t e n d To a r r C o u n t ( 0 ) + s g n ( i n t e n d ) * ( a b s ( i n t e n d ) + 1 ) z = solveequation(streq,x,y) Re D i m Pre s e r ve a r r p o i n t s ( n c o u n t ) a r r P o i n t s ( n C o u n t ) = A r r a y ( x , y, z ) nCount = nCount + 1 Next Next
7
c re a te s u r fa c e = R h i n o. Ad d S r f P t G r i d ( a r r Co u n t , a r r Po i n t s ) C a l l r h i n o . E n a b l e R e d r a w ( Tr u e ) E n d Fu n c t i o n Fu n c t i o n s o l v e e q u a t i o n ( B y Va l s t r f u n c t i o n , B y Va l x , B y Va l y ) Dim z D i m D, A , A n g l e d a t a D = rhino.Hypot(x,y) a n g l e D a t a = r h i n o . A n g l e ( a r r a y ( 0 , 0 , 0 ) , a r r a y ( x , y, 0 ) ) ‘ ‘ ‘ ‘ ‘
0 1 2 3 4
The The The The The
X,Y angle In degrees. elevation. delta In the X direction. delta In the Y direction. delta In the Z direction.
If isnull (angledata) Then A = 0.0 Else A = R h i n o . To R a d i a n s ( A n g l e d a t a ( 0 ) ) ‘ l ’ a n g o l o i n c o o r d i n a t e p o l a r i End If On Error Resume Next Execute(“z =” & strfunction) I f e r r. n u m b e r = 0 T h e n solveequation = z Else solveequation = 0.0 End If E n d Fu n c t i o n ‘----- CASE 1 SURFHONEY ----S u b s u r f h o n ey ( s t rs u r f, u p a r, v p a r ) u p a r = u p a r * 10 v p a r = v p a r * 10 Dim dblheight : dblheight = rhino.getreal(“extr usion height?” ,.3) If isnull (dblheight) Then Exit Sub Ca l l r h i n o. e n a bl e re d r aw ( Fa l s e ) Dim i, j Dim uvalone(1), uvalt wo D i m a r r U o n e , a r r Vo n e Dim arr pttemp, pointt wo Dim pt1, pt2, pt3, pt4, pt5, pt6 Re D i m m a t r i x ( u p a r, v p a r )
20
8 (7) Definizione secondo regole (8) Definizione porosità regole
di di di di
una superficie la cui componente superficiale morbida variail suo spessore vicinanza una superficie la cui componente superficiale varia lo spessore secondo e la vicinanza
21
Dim tempt arruone = array (0,0) a r r Vo n e = a r r a y ( 0 , 0 ) Dim strcell, arrct, arr ptsurf, arr nor m, arr nor mend, arr line, strcell2 If rhino.IsSurface(strsurf) Then arr uone = rhino.surfacedomain(strsurf,0) a r r Vo n e = r h i n o . s u r f a c e d o m a i n ( s t r s u r f , 1 ) End If F o r i = 0 To u p a r F o r j = 0 To v p a r uvalone(0)= ((arruone(1)-arruone(0))/upar)*i u v a l o n e ( 1 ) = ( ( a r r V o n e ( 1 ) - a r r Vo n e ( 0 ) ) / v p a r ) * j arr pttemp = rhino.EvaluateSurface(strsurf,uvalone) matr ix(i,j) = arr pttemp Next Next Dim oct1, oct2, oct3, oct4, arrlinehuge, arrel1, arrel2 Dim rn F o r i = 1 To u p a r - 2 S t e p 4 F o r J = 0 To v p a r - 2 S t e p 2 pt1 = matrix(i,j) pt2 = matrix(i+1,j) pt3 = matrix(i+2,j+1) pt4 = matrix(i+1,j+2) pt5 = matrix(i,j+2) pt6 = matrix(i-1,j+1) strcell = rhino.AddCur ve(array(pt1,pt2,pt3,pt4,pt5,pt6,pt1),1) arrct = array( (pt6(0)+pt3(0))/2,(pt6(1)+pt3(1))/2,(pt6(2)+pt3(2))/2) a r r p t s u r f = r h i n o. S u r fa c e C l o s e s t Po i n t ( s t rs u r f, a r rc t ) rn = rnd s t r c e l l 2 = r h i n o . S c a l e O b j e c t ( s t r c e l l , a r r c t , a r r a y ( 0 . 5 , 0 . 5 , 0 . 5 ) , Tr u e ) arr nor m = rhino.SurfaceNor mal(strsurf,arr ptsurf) a r r n o r m = r h i n o . Ve c t o r S c a l e ( a r r n o r m , d b l h e i g h t ) a r r n o r m e n d = r h i n o. Po i n t Ad d ( a r rc t , a r r n o r m ) arr line = rhino.AddLine(arrct,arr nor mend)
9
Call rhino.SelectObject (strcell) rhino.Command(“-patch “ & “enter”) oct1=rhino.FirstObject rhino.UnselectAllObjects rhino.SelectObject (strcell2) rhino.Command(“-patch “ & “enter”) oct2=rhino.FirstObject rhino.UnselectAllObjects oct3 = rhino.Extr udeSurface(oct1,arr line) arr linehuge = rhino.ExtendCur veLength(arr line,0,1,40) oct4 = rhino.Extr udeSurface(oct2,arr linehuge) rhino.MoveObject oct4, arr nor mend,arrct arrel1 = (array(oct3)) arrel2 = (array(oct4)) rhino.BooleanDifference arrel1,arrel2 Call rhino.DeleteObject (arr line) Call rhino.DeleteObject (oct1) Call rhino.DeleteObject (oct2) Next Next F o r i = 3 To u p a r - 2 S t e p 4 F o r J = 1 To v p a r - 2 S t e p 2 pt1 = matrix(i,j) pt2 = matrix(i+1,j) pt3 = matrix(i+2,j+1) pt4 = matrix(i+1,j+2) pt5 = matrix(i,j+2) pt6 = matrix(i-1,j+1) strcell = rhino.AddCur ve(array(pt1,pt2,pt3,pt4,pt5,pt6,pt1),1) arrct = array( (pt6(0)+pt3(0))/2,(pt6(1)+pt3(1))/2,(pt6(2)+pt3(2))/2) a r r p t s u r f = r h i n o. S u r fa c e C l o s e s t Po i n t ( s t rs u r f, a r rc t ) rn = rnd s t r c e l l 2 = r h i n o . S c a l e O b j e c t ( s t r c e l l , a r r c t , a r r a y ( 0 . 5 , 0 . 5 , 0 . 5 ) , Tr u e ) arr nor m = rhino.SurfaceNor mal(strsurf,arr ptsurf) a r r n o r m = r h i n o . Ve c t o r S c a l e ( a r r n o r m , d b l h e i g h t ) a r r n o r m e n d = r h i n o. Po i n t Ad d ( a r rc t , a r r n o r m ) arr line = rhino.AddLine(arrct,arr nor mend)
10 ( 9 ) , ( 1 0 ) Ta s s e l l a z i o n i c o n v a r i a z i o n e d i a l t e z z a e p o r o s i t à . i n ( 1 0 ) q u m e n t o d e l l a p r o l i f e r a z i o n e per definire zone di accumulazione dei componenti
Call rhino.SelectObject (strcell) rhino.Command(“-patch “ & “enter”) oct1=rhino.FirstObject rhino.UnselectAllObjects
22
23
rhino.SelectObject (strcell2) rhino.Command(“-patch “ & “enter”) oct2=rhino.FirstObject rhino.UnselectAllObjects oct3 = rhino.Extr udeSurface(oct1,arr line) arr linehuge = rhino.ExtendCur veLength(arr line,0,1,40) oct4 = rhino.Extr udeSurface(oct2,arr linehuge) rhino.MoveObject oct4, arr nor mend,arrct arrel1 = (array(oct3)) arrel2 = (array(oct4)) rhino.BooleanDifference arrel1,arrel2 Call rhino.DeleteObject (arr line) Call rhino.DeleteObject (oct1) Call rhino.DeleteObject (oct2) Next Next Call rhino.deleteobject(strsurf) C a l l r h i n o . E n a b l e R e d r a w ( Tr u e ) End Sub ‘----- CASE 2 SURFHEXAGON ----Sub SURFHEXAGON(strsurf,Intuint,Intvint) D i m d b l h e i g h t : d b l h e i g h t = r h i n o . g e t r e a l ( “ e x t r u s i o n h e i g h t ”, . 3 ) Intuint = IntUint*20 Intvint = Intvint*20 Ca l l r h i n o. E n a bl e Re d r aw ( Fa l s e )
11
Dim arrUdom, arrVdom arrUdom = Rhino.SurfaceDomain(strsurf,0) arrVdom = Rhino.SurfaceDomain(strsurf,1) Dim i, j D i m a r r P t , u p a r, v p a r ReDim arrPt(intUint-1 , intVint-1) F o r i = 0 To I n t u i n t - 1 F o r j = 0 To i n t v i n t - 1 upar = arrudom(0) + i*(arrudom(1)-arrudom(0))/(intuint-1) vpar = arrudom(0) + j*(arrvdom(1)-arrvdom(0))/(intvint-1) a r r p t ( i , j ) = r h i n o. E va l u a te S u r fa c e ( s t rs u r f, a r r ay ( u p a r, v p a r ) ) Next Next Dim Dim Dim Dim For
arrpanel, arrpanel2 strcur vepanel, strcur vepanel2 arrsurfpanel,arrsurfpanel2 s t r c u t , a r r C P, d b l d i s t 1 , d b l s c a l e i = 6 To I n t u i n t - 6 S t e p 6
F o r j = 0 To i n t v i n t - 6 S t e p 1 8 arr panel = array (arr pt(i,j),arr pt(i+3,j+6), arr pt(i-3,j+6),arr pt(i,j)) arrsurfpanel = rhino.addsrfpt(arr panel) Next Next F o r i = 0 To I n t u i n t - 6 S t e p 6 F o r j = 0 To i n t v i n t - 6 S t e p 1 8 arr panel = array (arr pt(i,j),arr pt(i+6,j), arr pt(i+3,j+6),arr pt(i,j)) arrsurfpanel = rhino.addsrfpt(arr panel) Next Next F o r i = 3 To I n t u i n t - 6 S t e p 1 2 F o r j = 6 To i n t v i n t - 6 S t e p 1 8 arr panel = array (arr pt(i,j),arr pt(i+6,j), arr pt(i+3,j+6),arr pt(i,j)) arrsurfpanel = rhino.addsrfpt(arr panel) Next Next F o r i = 1 2 To I n t u i n t - 1 2 S t e p 1 2 F o r j = 0 To i n t v i n t - 1 2 S t e p 1 8
12 ( 11 ) , ( 1 2 ) D e f i n i z i o n i d i s u p e r f i c i m o r b i d e r e a g e n t i a c a m p i g e n e r a t i d a p u n t i , v a r i a z i o n e d i s p e s s o r e , c o n v e s s i t à , increspatura superficiale
arr panel2 = array (arr pt(i,j),arr pt(i-3,j+6), arr pt(i+3,j+6),arr pt(i,j)) strcur vepanel2 = rhino.addcur ve(arr panel2,1) arrsurfpanel2 = rhino.addsrfpt(arr panel2) Next Next
24
25
F o r i = 6 To I n t u i n t - 1 2 S t e p 1 2 F o r j = 1 2 To i n t v i n t - 1 2 S t e p 1 8 arr panel2 = array (arr pt(i,j),arr pt(i-3,j+6), arr pt(i+3,j+6),arr pt(i,j)) strcur vepanel2 = rhino.addcur ve(arr panel2,1) arrsurfpanel2 = rhino.addsrfpt(arr panel2) Next Next Dim arrstrcur vepanel(), k k =0 F o r i = 9 To I n t u i n t - 9 S t e p 1 2 F o r j = 6 To i n t v i n t - 1 2 S t e p 1 8 Re D i m Pre s e r ve a r rs t rc u r ve p a n e l ( k ) arr panel = array (arr pt(i,j),arr pt(i+6,j), arr pt(i+9,j+6),arr pt(i+6,j+12), arr pt(i,j+12),arr pt(i,j+12),arr pt(i3,j+6),arrpt(i,j)) arrstrcur vepanel(k) = rhino.addcur ve(arr panel,1) Dim arrct arrct = array( (arrpt(i-3,j+6)(0)+arrpt(i+9,j+6)(0))/2,(arrpt(i-3,j+6)(1)+arrpt(i+9,j+6)(1))/2,(arrpt(i-3,j+6) (2)+arrpt(i+9,j+6)(2))/2) Dim arrptsurf a r r p t s u r f = r h i n o. S u r fa c e C l o s e s t Po i n t ( s t rs u r f, a r rc t ) Dim strcell2 s t r c e l l 2 = r h i n o . S c a l e O b j e c t ( a r r s t r c u r v e p a n e l ( k ) , a r r c t , a r r a y ( 0 . 3 , 0 . 3 , 0 . 3 ) , Tr u e ) Dim arrnorm, arrnormend, arrline arr nor m = rhino.SurfaceNor mal(strsurf,arr ptsurf) a r r n o r m = r h i n o . Ve c t o r S c a l e ( a r r n o r m , d b l h e i g h t ) a r r n o r m e n d = r h i n o. Po i n t Ad d ( a r rc t , a r r n o r m ) arr line = rhino.AddLine(arrct,arr nor mend) rhino.MoveObject strcell2, arrct, arr nor mend Ca l l r h i n o. Ad d L o ft S r f ( a r r ay ( a r rs t rc u r ve p a n e l ( k ) , s t rc e l l 2 ) , , , , , , Fa l s e ) Call rhino.deleteobject (arr line) k = k+1 Next Next Call Call End ‘ End
rhino.deleteobject(strsurf) r h i n o . e n a b l e r e d r a w ( Tr u e ) Sub
strcell = rhino.AddCur ve(array(pt1,pt2,pt3,pt4,pt5,pt6,pt1),2) arrct = array( (pt6(0)+pt3(0))/2,(pt6(1)+pt3(1))/2,(pt6(2)+pt3(2))/2) a r r p t s u r f = r h i n o. S u r fa c e C l o s e s t Po i n t ( s t rs u r f, a r rc t ) rn = rnd s t r c e l l 2 = r h i n o . S c a l e O b j e c t ( s t r c e l l , a r r c t , a r r a y ( r n * 0 . 7, r n * 0 . 7, r n * 0 . 7 ) , Tr u e ) arr nor m = rhino.SurfaceNor mal(strsurf,arr ptsurf) a r r n o r m = r h i n o . Ve c t o r S c a l e ( a r r n o r m , d b l h e i g h t ) a r r n o r m e n d = r h i n o. Po i n t Ad d ( a r rc t , a r r n o r m ) arr line = rhino.AddLine(arrct,arr nor mend) rn = rnd s t r c e l l 3 = r h i n o . S c a l e O b j e c t ( s t r c e l l , a r r c t , a r r a y ( r n * 0 . 5 , r n * 0 . 5 , r n * 0 . 5 ) , Tr u e ) s t r c e l l 4 = r h i n o . S c a l e O b j e c t ( s t r c e l l , a r r c t , a r r a y ( 0 . 8 , 0 . 8 , 0 . 8 ) , Tr u e ) rhino.MoveObject strcell3, arrct, arr nor mend rhino.MoveObject strcell4, arrct, arr nor mend C a l l r h i n o . A d d L o f t S r f ( a r r a y ( s t r c e l l , s t r c e l l 2 , s t r c e l l 3 , s t r c e l l 4 ) , , , , , , Tr u e ) Call rhino.DeleteObject (arr line) Call rhino.DeleteObjects (array(strcell,strcell2,strcell3,strcell4)) Next Next For For pt1 pt2 pt3 pt4 pt5 pt6
i = 3 To u p a r - 2 S t e p 4 J = 1 To v p a r - 2 S t e p 2 = matrix(i,j) = matrix(i+1,j) = matrix(i+2,j+1) = matrix(i+1,j+2) = matrix(i,j+2) = matrix(i-1,j+1)
strcell = rhino.AddCur ve(array(pt1,pt2,pt3,pt4,pt5,pt6,pt1),2) arrct = array( (pt6(0)+pt3(0))/2,(pt6(1)+pt3(1))/2,(pt6(2)+pt3(2))/2) a r r p t s u r f = r h i n o. S u r fa c e C l o s e s t Po i n t ( s t rs u r f, a r rc t ) rn = rnd s t r c e l l 2 = r h i n o . S c a l e O b j e c t ( s t r c e l l , a r r c t , a r r a y ( r n * 0 . 8 , r n * 0 . 8 , r n * 0 . 8 ) , Tr u e )
Fu n c t i o n
‘----- CASE 4 SURFRND ----S u b s u r f r n d ( s t rs u r f, u p a r, v p a r )
arr nor m = rhino.SurfaceNor mal(strsurf,arr ptsurf) a r r n o r m = r h i n o . Ve c t o r S c a l e ( a r r n o r m , d b l h e i g h t ) a r r n o r m e n d = r h i n o. Po i n t Ad d ( a r rc t , a r r n o r m ) arr line = rhino.AddLine(arrct,arr nor mend) rn=rnd
Dim dblheight : dblheight = rhino.getreal(“elements height?” ,.3) If isnull (dblheight) Then Exit Sub Ca l l r h i n o. e n a bl e re d r aw ( Fa l s e ) Dim i, j Dim uvalone(1), uvalt wo D i m a r r U o n e , a r r Vo n e Dim arr pttemp, pointt wo Dim pt1, pt2, pt3, pt4, pt5, pt6 Re D i m m a t r i x ( u p a r, v p a r ) Dim tempt arruone = array (0,0) a r r Vo n e = a r r a y ( 0 , 0 ) Dim strcell, arrct, arr ptsurf, arr nor m, arr nor mend, arr line, strcell2 If rhino.IsSurface(strsurf) Then arr uone = rhino.surfacedomain(strsurf,0) a r r Vo n e = r h i n o . s u r f a c e d o m a i n ( s t r s u r f , 1 ) End If F o r i = 0 To u p a r F o r j = 0 To v p a r uvalone(0)= ((arruone(1)-arruone(0))/upar)*i u v a l o n e ( 1 ) = ( ( a r r V o n e ( 1 ) - a r r Vo n e ( 0 ) ) / v p a r ) * j arr pttemp = rhino.EvaluateSurface(strsurf,uvalone) matr ix(i,j) = arr pttemp Next Next Dim strcell3, strcell4 Dim rn F o r i = 1 To u p a r - 2 S t e p 4 For pt1 pt2 pt3 pt4 pt5 pt6
26
J = 0 To v p a r - 2 S t e p 2 = matrix(i,j) = matrix(i+1,j) = matrix(i+2,j+1) = matrix(i+1,j+2) = matrix(i,j+2) = matrix(i-1,j+1)
s t r c e l l 3 = r h i n o . S c a l e O b j e c t ( s t r c e l l , a r r c t , a r r a y ( r n * 0 . 8 , r n * 0 . 8 , r n * 0 . 8 ) , Tr u e ) s t r c e l l 4 = r h i n o . S c a l e O b j e c t ( s t r c e l l , a r r c t , a r r a y ( 0 . 9 , 0 . 9 , 0 . 9 ) , Tr u e ) rhino.MoveObject strcell3, arrct, arr nor mend rhino.MoveObject strcell4, arrct, arr nor mend C a l l r h i n o . A d d L o f t S r f ( a r r a y ( s t r c e l l , s t r c e l l 2 , s t r c e l l 3 , s t r c e l l 4 ) , , , , , , Tr u e ) Call rhino.DeleteObject (arr line) Call rhino.DeleteObjects (array(strcell,strcell2,strcell3,strcell4)) Next Next Call rhino.deleteobject(strsurf) C a l l r h i n o . E n a b l e R e d r a w ( Tr u e ) End Sub ‘ - - - - - CAS E 9 S U R F C U RV E S - - - - S u b S U R F C U RV E S ( s t rs u r f, u p a r, v p a r ) D i m U , v, i , j , a r r p a r a m ( 1 ) , a r r p o i n t Dim arrparamnormal, arrnormal, linenorm Dim inter pcur ve Dim strsurfloft, str inter pcur ve, str inter pcur veonsurf, intheight, intloftfreq, intloftt ype Dim arrinter pcur ve upar = upar -1 vpar = vpar -1 i n t h e i g h t = r h i n o . g e t r e a l ( “ m a x i m u m h e i g h t ? ”, 1 ) If isnull(intheight) Then Exit Sub i n t l o f t f r e q = r h i n o . g e t i n t e g e r ( “ l o f t f r e q u e n c e ? ”, 2 , 2 ) If intloftfreq < intloftt ype =” rhino.getreal(“>4 Then Exit Sub intloftt ype = intloftt ype -1 U = rhino.SurfaceDomain(strsurf,0) v = rhino.surfacedomain (strsurf,1) If Not isarray(U) Or Not isarray (v) Then Exit Sub F o r i = 0 To u p a r arrparam(0) = u (0) + (((u(1)-u(0))/upar)*i) F o r j = 0 To v p a r arrparam(1) = v (0) + (((v(1)-v(0))/vpar)*j)
27
arr point = rhino.evaluatesurface(strsurf,arr param) arr paramnor mal = rhino.surfaceclosestpoint(strsurf,arr point) arr nor mal = rhino.surfacenor mal(strsurf, arr paramnor mal) a r r n o r m a l = r h i n o . Ve c t o r S c a l e ( a r r n o r m a l , i n t h e i g h t ) Dim arr nvect arr nvect = rhino.pointAdd(arr point,arr nor mal) ‘ linenor m = rhino.AddLine(arr point,arr nvect) ‘ Call rhino.ObjectColor(linenor m,rgb(255,0,255)) Re D i m Pre s e r ve a r r n o r m p t s s u r f ( v p a r ) arrnormptssurf(j)=arrpoint Re D i m Pre s e r ve a r r n o r m p t s E n d ( v p a r ) If i = 0 And i = upar And j=0 And j=vpar Then arrnormptsEnd(j) = arrpoint Else arr nor mptsEnd (j) = arr nvect End If Dim intcrossnpts: intcrossnpts = 2 Dim intstripefreq: intstripefreq = i+1 Re D i m Pre s e r ve a r r p t w ave ( v p a r ) D i m s t r WAV E Re D i m Pre s e r ve a r r p t w ave u d ( v p a r ) Dim strwaveud If intstripefreq Mod 2 Then If intstripefreq <> 1 Then If j Mod intcrossnpts Then arr pt wave(j) = arr nor mptssurf(j) arr pt waveud(j) = arr nor mptssurf(j) Else a r r p t w ave ( j ) = a r r n o r m p t s s u r f Pr ( j ) arr pt waveud(j) = arr nor mptsEnd(j) End If If j = vpar Then s t r WAV E = R h i n o. A d d I n t e r p C r v O n S r f ( s t r s u r f , a r r p t w a v e ) strwaveud = Rhino.AddInter pCur ve (arr pt waveud, 3)
13
a r r I n t e r p C u r v e = a r r a y ( s t r WAV E p ( i - 1 ) , s t r w a v e u d p r ( i - 1 ) , s t r WAV E ) s t r s u r f L o f t = R h i n o . A d d L o f t S r f ( a r r I n t e r p C u r v e , , , i n t L o f t Ty p e , 1 , 1 0 0 , F a l s e ) Call Rhino.SurfaceIsocur veDensit y (strsurfLoft, -1) End If End If Else If j Mod intcrossnpts Then a r r p t w ave ( j ) = a r r n o r m p t s s u r f Pr ( j ) arr pt waveud(j) = arr nor mptsEnd(j) Else arr pt wave(j) = arr nor mptssurf(j) arr pt waveud(j) = arr nor mptssurf(j) End If If j = vpar Then s t r WAV E = R h i n o. A d d I n t e r p C r v O n S r f ( s t r s u r f , a r r p t w a v e ) strwaveud = Rhino.AddInter pCur ve (arr pt waveud, 3) If i>1 Then a r r I n t e r p C u r v e = a r r a y ( s t r WAV E p ( i - 1 ) , s t r w a v e u d p r ( i - 1 ) , s t r WAV E ) s t r s u r f L o f t = R h i n o . A d d L o f t S r f ( a r r I n t e r p C u r v e , , , i n t L o f t Ty p e , 1 , 1 0 0 , F a l s e ) Rhino.SurfaceIsocur veDensit y strsurfLoft, -1 End If End If End If R e D i m Pr e s e r v e s t r WAV E p ( u p a r ) s t r WAV E p ( i ) = s t r WAV E Re D i m Pre s e r ve s t r w ave u d p r ( u p a r ) strwaveudpr(i) = strwaveud Re D i m Pre s e r ve a r r n o r m p t s s u r f Pr ( v p a r ) a r r n o r m p t s s u r f Pr ( j ) = a r r n o r m p t s s u r f ( j ) Re D i m Pre s e r ve a r r n o r m p t s E n d p r ( v p a r ) arrnormptsEndpr(j) = arrnormptsEnd(j) Next Next Call rhino.deleteobject (strsurf)v End Sub
14
‘ - - - - - CA S E 7 S U R F B OX H O L E - - - - Sub Call Dim Dim
s u r f b ox h o l e ( s t rs u r f, u p a r, v p a r ) r h i n o. e n a bl e re d r aw ( Fa l s e ) i n t p o s i t i o n : i n t p o s i t i o n = r h i n o . g e t r e a l ( “ m a x i m u m i n t e r p o s i t i o n ? ”, 0 . 0 5 , 0 ) i n t h e i g h t : i n t h e i g h t = r h i n o . g e t r e a l ( “ m a x i m u m h e i g h t ? ”, 0 . 4 , 0 )
Dim Dim Dim Dim
i,j uvalone(1),uvalt wo arrudom, arrvdom arr pttemp, pointt wo
28
(13), (14) Ulter ior i definizioni di superfici reagenti a regole di prossimità
29
Dim pt1, pt2, pt3, pt4 Dim arr pts: arr pts = array(pt1,pt2,pt3,pt4) Re D i m a r r p t s ( u p a r, v p a r ) Dim temppt arrudom = array(0,0) arr vdom = array (0,0) arr udom = rhino.SurfaceDomain(strsurf,0) arr vdom = rhino.surfacedomain (strsurf,1)
rhino.BooleanDifference arr trapezoid,arrellipse Call rhino.DeleteObject(tempsrf) Call rhino.DeleteObject(ellipse2) Call rhino.DeleteObject(linenor mhuge) Call rhino.DeleteObjects(array(linep1p4nor m,linep1p2extend,linep1p4extend,linep1p2,linep1p4)) rhino.UnselectAllObjects E n d Fu n c t i o n
F o r i = 0 To u p a r F o r j = 0 To v p a r uvalone(0) = ((arrudom(1)-arrudom(0))/upar)*i uvalone(1) = ((arr vdom(1)-arr vdom(0))/vpar) * (j) arr pttemp = rhino.EvaluateSurface(strsurf, uvalone) arr pts(i,j) = arr pttemp Next Next
‘ - - - - - CA S E 6 S U R F WAV E S - - - - -
F o r i = 0 To u p a r - 1 F o r j = 0 To v p a r - 1 pt1 = arrpts(i,j) pt2 = arrpts(i+1,j) pt3 = arrpts(i+1,j+1) pt4 = arrpts (i,j+1) Call drawbox2(pt1,pt2,pt3,pt4,intposition,intheight)
nrows = nrows -1 ncolumns = ncolumns -1
Next Next
Sub Dim Dim Dim Dim Dim
Surfwaves (strsurf, nrows, ncolumns) u , v, i , j , a r r p a r a m ( 1 ) , a r r p o i n t arrparamnormal, arrnormal, normal, deltaheight ve c to r, a r r n o r m a l n ew strinter pcur ve, strinter pcur veonsurf strsurfloft
d e l t a h e i g h t = r h i n o . G e t R e a l ( “ w a v e h e i g h t ? ”, 5 , 1 ) Ca l l r h i n o. e n a bl e re d r aw ( Fa l s e ) U = RHino.SurfaceDomain(strsurf,0) v = rhino.surfacedomain(strsurf,1) If Not isarray(u) Or Not isarray(V) Then Exit Sub
Call rhino.DeleteObject (strsurf) C a l l r h i n o . e n a b l e r e d r a w ( Tr u e ) End Sub Fu n c t i o n d r aw b ox 2 ( p t 1 , p t 2 , p t 3 , p t 4 , i n t p o s i t i o n , i n t h e i g h t ) D i m t e m p s r f , a r r d o m a i n U , a r r d o m a i n v, a r r d i r e c t i o n Dim arr param(1), arrnormal, linenormalsmall, linenormalbig, pt5 D i m l i n e p 1 p 4 , l i n e p 1 p 4 e x t e n d , l i n e a r r a y, l i n e p 1 p 2 , l i n e p 1 p 4 n o r m , l i n e p 1 p 2 e x t e n d Dim ver tsurface1,ver tsurface2, arr ptdomain,arr ptparam,pt6
F o r i = 0 To n r o w s arr param(0) = U(0) + ((U(1)-u(0))/nrows)*i F o r j = 0 To n c o l u m n s arrparam(1) = V(0) + ((V(1)-V(0))/ncolumns)*j arr point = rhino.evaluatesurface(strsurf, arr param) arr paramnor mal = rhino.SurfaceNor mal(strsurf,arr param) arr paramnor mal= rhino.vectorscale(arr paramnor mal, CDbl(deltaheight)) ve c to r = r h i n o. Po i n t Ad d ( a r r p o i n t , a r r p a r a m n o r m a l ) nor mal = rhino.AddLine(arr point, vector)
tempsrf = rhino.AddSrfPt(array(pt1,pt2,pt3,pt4)) arrdomainU = rhino.surfacedomain(tempsrf,0) arrdomainV = rhino.surfacedomain(tempsrf,1) arr param(0) = (arrdomainU(1)-arrdomainu(0))/2 arr param(1) = (arrdomainV(1)-arrdomainV(0))/2 pt5 = rhino.EvaluateSurface(tempsrf, arr param)
Re D i m Pre s e r ve a r r n o r m a l e n d c o l l e c t i o n ( n c o l u m n s ) If j = 0 And j = ncolumns Then arrnormalendcollection(j)=arrpoint Else arr nor malendcollection(j) = vector End If
arr nor mal = rhino.surfacenor mal(tempsrf, arr param)
Re D i m Pre s e r ve a r r n o r m a l o r i g i n e c o l l e c t i o n ( n c o l u m n s ) arrnormaloriginecollection(j) = arrpoint
Dim vector ve c to r = r h i n o. Po i n t Ad d ( p t 5 , a r r n o r m a l ) l i n e n o r m a l s m a l l = r h i n o . A d d L i n e ( p t 5 , R h i n o . Ve c t o r A d d ( p t 5 , a r r n o r m a l ) ) linenor malbig = rhino.ExtendCur veLength(linenor malsmall, 0,1,intheight*r nd)
Call rhino.deleteobject (nor mal)
arr ptdomain = rhino.Cur veDomain(linenor malbig) arrptparam = arrptdomain(1) pt6 = rhino.EvaluateCur ve(linenor malbig,arr ptparam)
Re D i m Pre s e r ve a r r I n te r p c u r ve ( n ro w s ) If i Mod 2 Then arr inter pcur ve(i) = rhino.addinter pcur ve(arr nor malendcollection) Else arr inter pcur ve(i) = rhino.AddInter pCr vOnSrf(strsurf,arr nor malor iginecollection) End If
linep1p4 = rhino.AddLine(pt1,pt4) linep1p2 = rhino.AddLine(pt1,pt2) linep1p4nor m = rhino.CopyObject(linep1p4,pt5,pt6) linep1p4extend = rhino.ExtendCur veLength(linep1p4, 0,1,intposition) linep1p2extend = rhino.ExtendCur veLength(linep1p2, 0,1,intposition) linearray= (array(linep1p4extend,linep1p4nor m)) ver tsurface1 =rhino.AddEdgeSrf(linearray) ver tsurface2 = rhino.Extr udeSurface(ver tsurface1,linep1p2extend)
Next
Next s t rs u r f l o ft = r h i n o. Ad d L o ft S r f ( a r r i n te r p c u r ve , , , 3 , 1 , 10 0 ) rhino.SurfaceIsocur veDensit y strsurfloft, -1 rhino.ObjectColor strsurfloft, rgb(255,0,255)
Dim linenormhuge linenor mhuge = rhino.ExtendCur veLength(linenor malsmall,0,1,40) Dim ellipse1 ellipse1 = rhino.AddCur ve(array(pt1,pt2,pt3,pt4,pt1))
Call Call Call Call
rhino.DeleteObjects (arr inter pcur ve) rhino.deleteobject (strsurf) rhino.deleteobjects (vector) r h i n o . E n a b l e R e d r a w ( Tr u e )
rhino.SelectObject ellipse1 rhino.Command(“-patch “ & “enter”)
End Sub
Dim ellipse2 ellipse2=rhino.FirstObject Dim ellipse3 ellipse3 = rhino.Extr udeSurface(ellipse2,linenor mhuge) rhino.MoveObject ellipse3, pt6,pt5 Dim arrellipse, arr trapezoid arrellipse = (array(ellipse3)) arr trapezoid = (array(ver tsurface2))
30
31
S c r i p t # 0 2 - D e f i n i z i o n e d i u n a s u p e r f i c i e i n t e n s e g r i t à 01 Nei due esempi successivi si è cercato di introdurre delle considerazioni str utturali, definendo una serie di elementi continui che circondano una serie di elementi isolati (vedi integr ità tensionale, p.35). Come nell’esempio precedente le str utture hanno una loro modulazione in base al campo in cui si trovano variando la loro densità, la loro porosità e il loro spessore. S u b s u r f s t a rs ( s t rs u r f, u p a r, v p a r ) upar = upar*5 vpar = vpar*5 Dim dblheight : dblheight = rhino.getreal(“extr usion height?” ,.05) If isnull (dblheight) Then Exit Sub D i m a t t r p o i n t : a t t r p o i n t = r h i n o . g e t o b j e c t ( “ p o i n t a t t r a c t o r ”, 1 ) D i m a r r p o i n t : a r r p o i n t = r h i n o. Po i n t Co o rd i n a te s ( a tt r p o i n t ) Ca l l r h i n o. e n a bl e re d r aw ( Fa l s e ) Dim i, j Dim uvalone(1), uvalt wo D i m a r r U o n e , a r r Vo n e Dim arr pttemp, pointt wo D i m p t 1 , p t 2 , p t 3 , p t 4 , p t 5 , p t 6 , P T 7, P t 8 , p t 5 b , p t 6 b , p t 7 b , p t 8 b , p t c 1 , p t c 2 Re D i m m a t r i x ( u p a r, v p a r ) Dim tempt arruone = array (0,0) a r r Vo n e = a r r a y ( 0 , 0 ) Dim strcell, arrct, arr ptsurf, arr nor m, arr nor mend,arr nor menddown, arr line, strcell2 If rhino.IsSurface(strsurf) Then arr uone = rhino.surfacedomain(strsurf,0) a r r Vo n e = r h i n o . s u r f a c e d o m a i n ( s t r s u r f , 1 ) End If F o r i = 0 To u p a r F o r j = 0 To v p a r uvalone(0)= ((arruone(1)-arruone(0))/upar)*i u v a l o n e ( 1 ) = ( ( a r r V o n e ( 1 ) - a r r Vo n e ( 0 ) ) / v p a r ) * j arr pttemp = rhino.EvaluateSurface(strsurf,uvalone) matr ix(i,j) = arr pttemp Next Next Dim oct1, oct2, oct3, oct4, arrlinehuge, arrel1, arrel2 Dim r n, cr vtemp, dbldist F o r i = 1 To u p a r - 1 F o r J = 0 To v p a r - 1 pt1 = matrix(i,j) pt2 = matrix(i+1,j) pt3 = matrix(i,j+1) pt4 = matrix(i+1,j+1) pt5 = array( (pt1(0)+pt2(0))/2,(pt1(1)+pt2(1))/2,(pt1(2)+pt2(2))/2) pt6 = array( (pt2(0)+pt4(0))/2,(pt2(1)+pt4(1))/2,(pt2(2)+pt4(2))/2) pt7 = array( (pt3(0)+pt4(0))/2,(pt3(1)+pt4(1))/2,(pt3(2)+pt4(2))/2) pt8 = array( (pt1(0)+pt3(0))/2,(pt1(1)+pt3(1))/2,(pt1(2)+pt3(2))/2) ptc1 = array( (pt5(0)+pt7(0))/2,(pt5(1)+pt7(1))/2,(pt5(2)+pt7(2))/2) ptc2 = array( (pt6(0)+pt8(0))/2,(pt6(1)+pt8(1))/2,(pt6(2)+pt8(2))/2) dbldist = rhino.Distance(ptc1,arr point) d bl d i s t = R h i n o. L o g 10 ( d bl d i s t * 7 ) I f d b l d i s t < 1. 1 d b l d i s t = ” ” > pt5b = array( pt5(0)+(ptc1(0)-pt5(0))/(dbldist),pt5(1)+(ptc1(1)-pt5(1))/(dbldist),pt5(2)+(ptc1(2)-pt5(2))/(dbldist)) pt6b = array( pt6(0)+(ptc2(0)-pt6(0))/(dbldist),pt6(1)+(ptc2(1)-pt6(1))/(dbldist),pt6(2)+(ptc2(2)-pt6(2))/(dbldist)) pt7b = array( pt7(0)+(ptc1(0)-pt7(0))/(dbldist),pt7(1)+(ptc1(1)-pt7(1))/(dbldist),pt7(2)+(ptc1(2)-pt7(2))/(dbldist)) pt8b = array( pt8(0)+(ptc2(0)-pt8(0))/(dbldist),pt8(1)+(ptc2(1)-pt8(1))/(dbldist),pt8(2)+(ptc2(2)-pt8(2))/(dbldist)) Call rhino.AddCur ve(array(pt1,pt2,pt4,pt3,pt1),1) strcell = rhino.addcur ve(array(pt1,,pt5b, pt2,pt6b, pt4, pt7b,pt3,pt8b,pt1),1) arrct = array( (pt4(0)+pt1(0))/2,(pt4(1)+pt1(1))/2,(pt4(2)+pt1(2))/2) a r r p t s u r f = r h i n o. S u r fa c e C l o s e s t Po i n t ( s t rs u r f, a r rc t ) arr nor m = rhino.SurfaceNor mal(strsurf,arr ptsurf) a r r n o r m = r h i n o . Ve c t o r S c a l e ( a r r n o r m , d b l h e i g h t ) a r r n o r m e n d = r h i n o. Po i n t Ad d ( a r rc t , a r r n o r m ) a r r n o r m e n d d ow n = r h i n o. Po i n t s u b t r a c t ( a r rc t , a r r n o r m ) cr vtemp = rhino.AddSrfPt(array(pt1,arr nor mend,pt5b)) cr vtemp = rhino.AddSrfPt(array(pt5b,arr nor mend,pt2)) cr vtemp = rhino.AddSrfPt(array(pt2,arr nor mend,pt6b)) cr vtemp = rhino.AddSrfPt(array(pt6b,arr nor mend,pt4)) cr vtemp = rhino.AddSrfPt(array(pt4,arr nor mend,pt7b)) cr vtemp = rhino.AddSrfPt(array(pt7b,arr nor mend,pt3)) cr vtemp = rhino.AddSrfPt(array(pt3,arr nor mend,pt8b)) cr vtemp = rhino.AddSrfPt(array(pt8b,arr nor mend,pt1)) cr vtemp cr vtemp cr vtemp cr vtemp cr vtemp cr vtemp cr vtemp
32
= = = = = = =
rhino.AddSrfPt(array(pt1,arr nor menddown,pt5b)) rhino.AddSrfPt(array(pt5b,arr nor menddown,pt2)) rhino.AddSrfPt(array(pt2,arr nor menddown,pt6b)) rhino.AddSrfPt(array(pt6b,arr nor menddown,pt4)) rhino.AddSrfPt(array(pt4,arr nor menddown,pt7b)) rhino.AddSrfPt(array(pt7b,arr nor menddown,pt3)) rhino.AddSrfPt(array(pt3,arr nor menddown,pt8b))
15
(15) Definizione di suna superficie in tensegr ità 1, studio da modello fisico
33
cr vtemp = rhino.AddSrfPt(array(pt8b,arr nor menddown,pt1)) arr line = rhino.AddLine(pt1,pt2) Call rhino.selectobject (arr line) r h i n o . C o m m a n d “ _ p i p e “ & “. 0 2 “ & “. 0 2 “ & “ _ e n t e r “ & “ _ e n t e r “ rhino.UnselectAllObjects arr line = rhino.AddLine(pt3,pt4) Call rhino.selectobject (arr line) r h i n o . C o m m a n d “ _ p i p e “ & “. 0 2 “ & “. 0 2 “ & “ _ e n t e r “ & “ _ e n t e r “ rhino.UnselectAllObjects Next Next C a l l r h i n o . E n a b l e R e d r a w ( Tr u e ) End sub
Script #03 - Definizione di una superficie in tensegrità 02 Sub Dim Call Dim Dim Dim Dim Dim
S u r f p y r a m i d ( s t r s u r f , u p a r , v p a r ) i n t h e i g h t : i n t h e i g h t = r h i n o . g e t r e a l ( “ m a x i m u m h e i g h t ? ”, 0 . 4 , 0 ) r h i n o. e n a bl e re d r aw ( Fa l s e ) i, j uvalone(1), uvalt wo arrudom, arrvdom arr pttemp, pointt wo pt1, pt2, pt3, pt4
Dim arrpts() Re D i m a r r p t s ( u p a r, v p a r ) arrudom = array(0,0) arr vdom= array(0,0) If rhino.IsSurface(strsurf) Then arr udom = rhino.SurfaceDomain(strsurf, 0) arr vdom = rhino.SurfaceDomain(strsurf, 1) End If F o r i = 0 To u p a r F o r j = 0 To v p a r uvalone(0) = ((arrudom(1)-arrudom(0))/upar)*i uvalone(1) = ((arr vdom(1)-arr vdom(0))/vpar)*j arr pttemp = rhino.EvaluateSurface(strsurf,uvalone) arr pts(i,j) = arr pttemp Next Next F o r i = 0 To u p a r - 1 F o r j = 0 To v p a r - 1 pt1 = arrpts (i,j) pt2 = arrpts (i+1,j) pt3 = arrpts (i+1,j+1) pt4 = arr pts (i,j+1) ‘rettangoli di base Call pyramid (pt1,pt2,pt3,pt4,intheight) Next Next C a l l r h i n o . E n a b l e R e d r a w ( Tr u e ) Call rhino.deleteobject (strsurf) End Sub Fu n c t i o n py r a m i d ( p t 1 , p t 2 , p t 3 , p t 4 , i n t h e i g h t ) D i m t e m p s r f , a r r d o m a i n U , a r r d o m a i n V, a r r d i r e c t i o n Dim arr param(1), arrnormal, linenormalsmall, linenormalbig, arr ptdomain,arr ptparam Dim pt5, pt6 Dim sideone, sidet wo, sidethree, sidefour tempsrf = rhino.addsrfpt (array(pt1,pt2,pt3,pt4)) arrdomainU = rhino.SurfaceDomain(tempsrf,0) arrdomainv= rhino.SurfaceDomain(tempsrf,1) arr param(0) = (arrdomainU(1)-arrdomainU(0))/2 arr param(1) = (arrdomainv(1)-arrdomainV(0))/2 pt5 = rhino.EvaluateSurface(tempsrf, arr param) arr nor mal = rhino.surfacenor mal (tempsrf, arr param) Dim vector ve c to r = r h i n o. Po i n t Ad d ( p t 5 , a r r n o r m a l ) l i n e n o r m a l s m a l l = r h i n o . A d d L i n e ( p t 5 , R h i n o . Ve c t o r A d d ( p t 5 , a r r n o r m a l ) ) linenor malbig = rhino.ExtendCur veLength(linenor malsmall, 0,1,intheight)’maybe r nd*height rhino.selectobject (tempsrf) rhino.Command “flip” arr nor mal = rhino.SurfaceNor mal(tempsrf, arr param) ve c to r = r h i n o. Po i n t Ad d ( p t 5 , a r r n o r m a l ) l i n e n o r m a l s m a l l = r h i n o . A d d L i n e ( p t 5 , R h i n o . Ve c t o r A d d ( p t 5 , a r r n o r m a l ) ) ‘rhino.Extr udeSurface tempsrf, linenor malsmall arr ptdomain = rhino.cur vedomain(linenor malbig) arrptparam = arrptdomain(1) pt6 = rhino.EvaluateCur ve(linenor malbig, arr ptparam) sideone = rhino.AddSrfPt (array(pt1,pt2,pt6)) sideone = rhino.AddSrfPt (array(pt2,pt3,pt6)) sideone = rhino.AddSrfPt (array(pt3,pt4,pt6)) sideone = rhino.AddSrfPt (array(pt4,pt1,pt6)) E n d Fu n c t i o n
34
16
(16) Definizione di suna superficie in tensegr ità 2, studio da modello fisico
35
I n t e g r i t à Te n s i o n a l e
36
37
“ Tu t t e l e s t r u t t u r e , p r o p r i a m e n t e c o m p r e s e , d a l s i s t e m a s o l a r e a l l ’ a t o m o , s o n o s t r u t t u r e i n t e n s e g r i t à . L’ u n i v e r s o è o v u n q u e i n i n t e g r i t à t e n s i o n a l e” ( 1 )
Non sempre la scienza è la fonte iniziale dello scambi interdisciplinare, capita c h e s i ve r i f i c h i u n’ i nve rs i o n e . I l l avo ro d i H e n r y B e rg s o n i n f i l o s o f i a , a d e s e m p i o, prefigura quello di Bernhard Riemann in matematica. Il fisico teoretico Lee Smolin viene por tato al calcolo tensoriale e alla fisica della gravità dall’osser vazione delle str utture geodetiche. Il nostro modo di pensare in architettura può essere influenzato dal nostro modo di intendere l’universo e viceversa. Questo apre una tremenda oppor tunità per la crescita dell’architettura tra le altre d i s c i p l i n e . L’ a r c h i t e t t u r a s a r à s e m p r e u n a r a p p r e s e n t a z i o n e d i f e t t i v a d e l l a a l t r e discipline, da qui l’esaur irsi dell’architettura che si basa pio, sul cinema e la letterature. Ma ci sono modelli
essa stessa, ad esem-
concettuali che sono utili al
17
regista nella disciplina cinematografica così come all’architetto nella disciplina dell’architettura. Questo sugger isce che gli stessi modelli concettuali possono migrare da una disciplina all’altra, dove essi sono instanziati attraverso le condizioni e i limiti inerenti a quelle discipline. Nel percorso progettuale si è cercato di definire così questo tipo di interazione in r ifer imento all’approfondimento del nucleo scientifico, tecnico e architettonico della cosiddetta integr ità tensionale. (2)
S o n o n u m e ro s e l e d e fi n i z i o n i a d o tt a te d e l te r m i n e “ i n te g r i t à te n s i o n a l e” o “ te n s e g rità” (ingl. tensional integrity / tensegrity). Una delle pr ime enunciazioni definisce la tensegr ità come “un pr incipio str utturale basato sull’uso di componenti in compressione tra loro isolati connessi da una rete c o n t i n u a d i c o m p o n e n t i t e s e ”. S i p u ò d i r e c h e e s s a è d i f a t t o u n n o n t i p o d i s t r u t t u r a ma un meccanismo fisico. Il ter mine, inteso in questo modo, è stato coniato da
R i c h a rd B u ck m i n s te r Fu l l e r
nel 1955, anche se la for mulazione di questo concetto neamente anche a
è attr ibuita contempora -
D a v i d G e o r g e s E m m e r i c h e Ke n n e t h D. S n e l s o n . M e n t r e i p r i m i
due si sono occupati di sistematizzare la materia definendo in maniera rigorosa e matematica le propr ietà di questo tipo di sistemi, l’ultimo si è affidato ad un ap-
18 ( 1 ) F U L L E R R . B . - S y n e r g e t i c s , M a c m i l l a n P u b l i s h i n g C o . I n c . , N e w Yo r k , 1 9 7 5 (2) RAISER Jesse, op. cit., p.126-127
38
(17) Definizione di un solido in tensegr ità, individuazione delle isole compresse e delle componenti tese (18) Scultura di Kenneth Snelson, Hirshhor n Museum, Washington DC, JON ERICKSON h tt p : / / w w w. f l i c k r. c o m / p h o t o s / 2 3 12 8 10 0 @ N 0 0 / 2 0 9 5 5 2 8 3 15
39
proccio più empir ico, attraverso il quale ha dato vita ad una ser ie di sculture “fluttua n t i ”. I l te r m i n e d e r i va q u i n d i d a l l ’ u n i o n e d e l l e d u e p a ro l e “ te n s i o n e” e “ i n te g r i t à ” e s i g n i fi c a che l’integr ità di questa classe di str utture dipende dall’equilibr io delle tensioni presenti in esse. (3)
Tu t t e l e s t r u t t u r e n e l l ’ u n i v e r s o
sono soggette all’interazione di forze di
tensione e
compressione. Il taglio, la flessione, la torsione non sono altro che la combinazione di queste forze base. Siamo soliti considerare gli edifici come str utture che si affidano pr incipalmente alla compressione per la loro stabilità: il muro di mattoni è il classico esempio. Esso giace in equilibrio grazie alla compressione
(“compressione continua”), data dalla gravità
,che si trasfer isce da un mattone all’altro fino al terreno.
Il mattone più in basso è
compresso molto di più r ispetto ai mattoni sopra di esso (non vi è una distr ibuzione ottimale del carico sui diversi componenti). Nessuno chiede quanto pesi un muro di mattoni, o una casa. Il peso è raramente una considerazione nelle str utture in compres sione continua (se ne tiene conto soltanto in casi par ticolari, quali quelli concernenti l e te n s i o n i d a te d a u n’ a z i o n e d i n a m i c a , a d e s e m p i o s i s m i c a ) . ( 4 )
U n s i s te m a i n te n s e g r i t à f u n z i o n a i n m a n i e r a s o s t a n z i a l m e n te d i ffe re n te. Pe r c a p i r l o
19
possiamo prendere due esempi antitetici: il Washington Memor ial e lo Sk ylon. Il pr imo, l’obelisco eretto nella capitale amer icana per commemorare George Washington, è costituito da una ser ie di blocchi di mar mo impilati l’uno sull’altro, si regge a causa del suo peso, funziona quindi in compressione continua, propr io come il muro di mattoni. I l s e c o n d o e r a u n a s o r t a d i s c u l t u r a e r e t t a p e r i l F e s t i v a l o f B r i t a i n ’ s S o u t h B a n k E xh i b i t i o n a L o n d r a n e l 1 9 5 1. D u r a n t e i l f e s t i v a l v e n n e o r g a n i z z a t o u n c o n c o r s o p e r l a realizzazione di
u n a s t r u tt u r a ve r t i c a l e e g l i a rc h i te tt i P h i l i p Pow e l l e H i d a l g o M oya
disegnarono lo Sk ylon che fu selezionato come la migliore proposta e realizzato. Era alto 60 metr i, di for ma affusolata in alluminio, sospeso da tre cavi quasi completamente invisibili e sembrava fluttuare a 15 metr i dal suolo. La causa della sensazione di precarietà che comunica è dovuta alla par ticolare configurazione del suo equilibrio stabile, nella quale l’elemento “pesa” e quindi tende i cavi che lo sostengono e che contemporaneamente, in maniera continua, lo comprimono nella par te superiore. In questo modo l’elemento è completamente compresso e
20 ( 3 ) B U R K H A R D T R o b e r t W i l l i a m , A P r a c t i c a l G u i d e t o Te n s e g r i t y D e s i g n , p . 5 5 , C o p y r i g h t 2 0 0 4 - 2 0 0 8 Cambridge ( 4 ) M Y E R S T. W. , A n a t o m y Tr a i n s , e l a b o r a z i o n e d e l l ’ a u t o r e p . 6 1- 6 5 , C h u r c h i l l L i v i n g s t o n e e d i t i o n , E d i n b u r g h 2 0 01
40
( 19 ) Wa s h i n g t o n M e m o r i a l , Wa s h i n g t o n D C , DAV I D I L I F F h tt p : / / e n . w i k i p e d i a . o r g / w i k i / Wa s h i n g t o n _ M o n u m e n t ( 2 0 ) Fo to g r a f i a d ’ e p o c a d e l l o S k y l o n , B r i t a i n’s S o u t h B a n k E x h i b i t i o n , L o n d r a , 19 5 1 , http://en.wikipedia.org/wiki/Sk ylon_(tower)
41
isolato mentre i cavi sono completamente tesi e continui. I vantaggi di questo sistema sono numerosi, tra gli altr i l’adattabilità a sollecitazioni improvvise e il ritor no alla configurazione di equilibrio precedente una volta queste si siano esauritesi, l’indipendenza dalla gravità per la stabilità (sono stabili anche in assenza di gravità), la redistribuzione degli sforzi locali a livello globale, ecc.. Mentre negli edifici prevale come concezione costr uttiva quella del Washington Memor ial, se ci soffer miamo ad osser vare come sono “costr uiti” i cor pi degli esser i viventi, dove l’evoluzione ha fissato molto più severamente dei limiti al peso che agisce a scapito dell’agilità e quindi della sopravvivenza, capiamo subito come la “compressione continua” non possa essere stata una strategia vincente. Un cor po è più simile ad un pallone. La superficie è il componente teso che preme v e r s o l ’ i n t e r n o . L’ a r i a è i l c o m p o n e n t e t e s o c h e s p i n g e v e r s o l ’ e s t e r n o . L a s u p e r f i c i e s i t e n d e f i n c h é n o n r a g g i u n g e l ’ e q u i l i b r i o c o n l ’ a r i a c h e p r e m e a l l ’ i n t e r n o e q u e s t o d e t e rmina la grandezza del pallone. Sostituite una serie di barre per l’aria
e dei cavi elas-
tici al posto della superficie del pallone e avrete la classica str uttura in tensegr ità.(5) 21
Se ci soffer miamo a studiare il funzionamento specifico della colonna ver tebrale uma na possiamo riscontrare un esempio ancora più interessante. Osser vando la par te frontale della colonna ver tebrale ci rendiamo conto di come essa sia un cattivo candidato per sorreggere il peso di tutto il cor po: è infatti costituita da ossa spugnose inframezzate da dischi elastici comprimibili. Ma la par te posteriore, costituita dai processi ar ticolari, dal processo trasverso e dal processo spinoso (per “ p ro c e s s o” i n a n a to m i a s i i n te n d e u n a s p o rg e n z a o u n’ e s c re s c e n z a o s s e a , q u a l i a p punto quelle delle ver tebre umane) possono essere più affidabili? (6)
Negli animali a quattro zampe vediamo come la funzione di suppor to del car ico è c o m p l e t a m e n t e d i f f e r e n t e d a q u e l l a u m a n a . L’ e l a s t i c i t à d e l l a c o l o n n a s i d i s p i e g a c o m e i cavi tesi di un ponte tra le torri che lo suppor tano (le ossa pelviche e del busto), mentre le ossa della testa e quelle della coda fuoriescono in par te da entrambi gli estremi. I muscoli addominali e del busto, accorciando la par te ventrale del cor po, aiutano a mantenere la colonna ver tebrale più o meno orizzontale. La gravità agisce per pendicolar mente alla colonna ver tebrale, in questo modo c’è solo u n a p i c c o l a p r e s s i o n e s u l c o r p o s p u g n o s o e s u i d i s c h i , e c c e t t o q u a n d o l ’ a n i m a l e e s e rcita uno sforzo. I muscoli spinali, attor no all’arco neurale, hanno solo in piccola par te una funzione di sostegno posturale e guidano invece il movimento della colonna in orie n t a z i o n e e l o c o m o z i o n e. Pe r q u e s to g l i a n i m a l i s o ff ro n o m o l to d i m e n o d e g l i u o m i n i
( 5 ) M Y E R S T. W. , o p . c i t . p . 6 7, e l a b o r a z i o n e d e l l ’ a u t o r e ( 6 ) M Y E R S T. W. , o p . c i t . p . 6 8 - 6 9 , e l a b o r a z i o n e d e l l ’ a u t o r e
42
22
(21),(22) Vista dall’alto e laterale di una ver tebra toracica umana, h tt p : / / e n . w i k i p e d i a . o rg / w i k i / L i s t _ o f _ i m a g e s _ i n _ G r ay ’s _ A n a to my : _ I I . _ O s te o l o g y
43
di problematiche legate alla colonna ver tebrale, nonostante una crisi si possa sempre verificare, come si vede ad esempio nelle gobbe dei cavalli vecchi o sovraccaricati.
La nostra colonna ver tebrale, in quanto eretti, corre invece nel verso stesso della gravità e presenta una ser ie differente di problematiche, che devono essere r isolte d i ffe re n te m e n te, m a d a q u a s i l o s te s s o i d e n t i c o s e t d i m u s c o l i e d i o s s a . Pe r a p p ro s simar ne il compor tamento sono stati definiti diversi modelli nel tempo che si avvicinano sempre di più al reale funzionamento, anche se si può dire concorrano assieme a definire un meccanismo realmente complesso.
La pila di blocchi è il modello standard newtoniano della colonna ver tebrale. Questo tipo di concezione è così par te del nostro modo di vedere che noi difficilmente r iusciamo a comprendere la colonna ver tebrale in qualsiasi altro modo. Il meccanismo è quello della compressione continua, il
peso è soppor tato direttamente dai membr i
compressi fino al terreno, non c’è necessità di elementi tesi. Riconoscendo le limitazioni dell’applicazione di questo modello alla colonna ver tebrale possiamo assumer lo e poi immaginare che tutti i tessuti attor no allo scheletro scompaiano. Anche nella persona più sana che esista lo scheletro cadrebbe a terra, in quanto non è un 23
insieme di blocchi ben disposto e in equilibr io sotto il suo peso. Basta pensare a tutti gli scheletri appesi nelle aule scolastiche: se abbiamo mai avuto modo di osser varli possiamo notare come essi non siano appoggiati al terreno, ma appesi. Riconosciamo così
un qualche ruolo per i tessuti elastici, e il ruolo della tensione,
vedendo come i blocchi che costituiscono il cor po, dopo tutto, hanno bisogno quanto meno di essere controbilanciati
dalla spinta muscolare.
N e l l ’ i l l u s t r a z i o n e a s i n i s t r a v e d i a m o u n i m m a g i n e d a l l a v o r o d i M a b e l E l l s w o r t h To d d nel 1930, di come il centro muscolare controbilancia la tendenza dello scheletro a col lassare. Se por tiamo il sistema di blocchi fuori dalla condizione di equilibrio c’è bisogno di una tensione di bilanciamento in una serie di zone che non sarebbero deputate a for nir lo: attor no ai talloni, nella par te frontale degli stinchi, nel tendine del ginocchio, nell’inguine, a metà della schiena e nella par te posteriore della mascella. Questo modello invoca ancora l’idea di una linea continua compressa che arr iva al terreno, ma in essa gli elementi tensionali modulano la tendenza di questa pila a collassare.
U n a l t r o e s e m p i o p u ò e s s e r e q u e l l o d e l l ’ a l b e r o d i u n a n a v e . L’ a l b e r o p u ò e s s e r e a s -
24
(23) Scheletro di un cavallo, http://commons.wikimedia.org/wiki/File:Skeleton_with_outline_of_a_horse.png (24) Equilibrio nel fisico umano schematizzato come una serie di blocchi, rielaborazione personale di u n o s c h i z z o d i M a b e l E l l s w o r t h To d d , h t t p : / / w w w . a n a t o m y t r a i n s . c o m / e x p l o r e / t e n s e g r i t y / e x p l a i n e d
44
45
similato ad una sor ta di colonna ver tebrale, simile ad una str uttura in compressione continua. Esso por ta dalla par te più alta fino alla base tutto il suo peso quando la barca è fer ma all’ancora. Ma quando la barca è in mare e il vento soffia esercitando una pressione su di esso, le tensioni
divengono enor mi, molto di più di quelle che la
semplice sezione in legno o in alluminio potrebbero soppor tare. Esistono allora dei cavi di suppor to in acciaio che aiutano a soppor tare lo sforzo. Un albero non r inforzato dovrebbe essere troppo largo e r ischierebbe con il suo peso di far affondare la nave. Allo stesso modo abbiamo già notato che la colonna ver tebrale difficilmente potrebbe soppor tare direttamente tutto il peso del nostro cor po senza un sovradimensionamento d e l l e ve r te b re a l l a b a s e . Q u i n d i p o s s i a m o f i g u r a re u n’ a n a l o g i a c o n i c av i d i s o s te g n o all’albero della nave e il muscolo lunghissimo che funzionano come sostegni, spingendo verso il basso e all’indietro contro la tendenza della gabbia toracica di spingere la str uttura fuor i centro. Allo stesso modo suppor tano la stabilità i muscoli scaleni e il muscolo retto dell’addome.(7)
U n u l te r i o re s p u n to p u ò ve n i re d a l l o s t u d i o d e l l a b o ta n i c a c o n d o tto d a Fre i O tto. E g l i stava cercando di capire come le piante si sostengono e in par ticolare come i girasoli possano voltarsi per cercare il sole. Il modello che egli venne a definire e a realizzare
25
è costituito da segmenti che si inseriscono l’uno nell’altro in maniera libera, permettendo cioè lo scorr imento del segmento super iore r ispetto a quello infer iore, come una ser ie di suppor ti (tees) delle palle da golf ciascuno inser ito nella coppa dell’altro. Attaccata alla par te superiore di questi suppor ti vi sono una serie di cerchi di plexiglass con dei buchi fatti a distanza di 120 gradi, suddivisi quindi in tre set per ogni disco. Ogni set ha un numero decrescente di buchi dal centro alla circonferenza, da quello p i ù b a s s o c h e n e h a 12 a q u e l l o p i ù i n a l to c h e n e h a s o l t a n to u n o. Fa c e n d o p a s s a re dei cavi (36) attraverso questi buchi, ne avremo tre che corrono solo dal segmento di base a quello successivo. Altr i tre percorreranno invece due segmenti. Fino all’ultimo set di tre cavi che passerà attraverso tutti i dischi per poi fissarsi su quello più in alto. Se leghiamo ad un ulter iore pannello tutti questi cavi e poi li tir iamo in differenti combinazioni possiamo vedere il nostro fusto girarsi, torcersi e piegarsi in ogni direzione all’inter no dell’emisfero definito dal suo raggio. Se leghiamo i cavi stabilizziamo il sistema. (8)
Una colonna ver tebrale si compor ta in modo analogo a questo modello di stelo: è una s t r u tt u r a s e g m e n t a t a c h e p u ò to rc e rs i e p i e ga rs i i n u n a g r a n d e va r i e t à d i m o d i . Po s siamo inoltre considerare l’ileocostale del dorso, che prende or igine dalla faccia es26 ( 7 ) M Y E R S T. W. , o p . c i t . p . 8 0 - 8 1 , e l a b o r a z i o n e d e l l ’ a u t o r e ( 8 ) M O T R O R . , Te n s e g r i t y : S t r u c t u r a l S y s t e m s f o r t h e F u t u r e , p . 8 5 - 8 6 , B u t t e r w o r t h - H e i n e m a n n , 2 0 0 6
46
(25), (26) r icostr uzioni del modello or iginale delle caratter istiche meccaniche di uno stelo floreale di Fre i O tto, m o d e l l o e fo to d i J O N R E K ST E N . h t t p : / / w w w. f l i c k r. c o m / p h o t o s / j o n h e f e l / 2 1 5 9 4 0 4 4 1 9 / , h t t p : / / w w w. f l i c k r. c o m / p h o t o s / j o n h e f e l / 2 1 6 01 7 8 0 5 2 /
47
terna delle ultime sei costole e si inserisce agli angoli delle prime sei e sul processo trasverso della settima ver tebra cer vicale come appunto la ser ie dei cavi che stabilizzano il sistema e gli per mettono di muoversi.
I n f i n e a r r i v i a m o a l c o n c e t t o d i t e n s e g r i t à v e r o e p r o p r i o . Tu t t e l e v e r t e b r e h a n n o s e g menti compressi ir ti di processi, detti nell’insieme archi neurali. Le corde o i cavi (muscoli e tendini) sono legati a questi segmenti senza che le ver tebre si tocchino l’un l’altra. È necessario comunque che alcune par ti del segmento superiore si situino sotto il processo super iore del segmento infer iore, altr imenti la str uttura sarebbe al di fuori delle leggi della fisica, invece che semplicemente sembrare di esserlo (funzionando in maniera analoga allo Skylon). I capi dei processi sono legati dalla par te tesa da segmento a segmento, aumentando la tensione la str uttura diventerà più cor ta e i s e g m e n t i c o m p r e s s i s i a v v i c i n e r a n n o l ’ u n o a l l ’ a l t r o, r i l a s c i a n d o l a e s s i s i d i s t a n z i e ranno (non vi è così una continuità di compressione). I processi spinali e trasversi delle ver tebre provvedono ad una serie di appigli per l’attacco dei muscoli che attor niano la colonna. Questi muscoli for mano tre diversi “ p a tte r n” : a)
i muscoli inter trasversari passano da un processo traverso ad un altro processo
traverso, un segmento alla volta, dalla par te super iore a quella infer iore della colonna ver tebrale. b ) i m u s c o l i i n te rs p i n a l i c o r ro n o d a u n p ro c e s s o s p i n a l e a l l ’ a l t ro, c o p re n d o a n c h’ e s s i un solo segmento alla volta. Entrambi questi set corrono parallelamente alla colonna ver tebrale c) i muscoli rotatori corrono dal processo spinale superiore verso i processi trasversi sottostanti. I rotator i brevi coprono solo un segmento mentre quelli lunghi coprono due segmenti, passando dal processo spinoso di una ver tebra a quelli trasversi di due ver tebre sotto I layer ester ni della muscolatura (come il il muscolo multifido, i semispinali e il muscolo sacrospinale) r ipetono questi patter n in maniera analoga, coprendo però sempre più segmenti, fino a quelli più superficiali che corrono lungo tutta la colonna ver tebrale. Le ver tebre si trovano così interconnesse le une alle altre e i muscoli rotatori contr ibuiscono a creare quel meccanismo che abbiamo già più volte evidenziato: come lo Skylon ogni ver tebra “pesa” sui legamenti ancorati a quella precedente ma ne è contemporaneamente compressa. Abbiamo così una ser ie di elementi fluttuanti tenuti insieme da una rete continua di elementi tesi. (9)
27
( 9 ) M Y E R S T. W. , o p . c i t . p . 8 5 - 8 6 , e l a b o r a z i o n e d e l l ’ a u t o r e (27) Muscoli della schiena umana, evidenziato in rosso il complesso del muscolo lunghissimo, h tt p : / / e n . w i k i p e d i a . o rg / w i k i / L i s t _ o f _ i m a g e s _ i n _ G r ay ’s _ A n a to my : _ I I . _ O s te o l o g y
48
49
La definizione del componente par te da questo tipo di approfondimento, e da uno studio parallelo della confor mazione e della str uttura delle colonne ver tebrali di altr i mammifer i quali quello delle balene. In pr imo luogo, si sviluppano una ser ie di modelli fisici atti a r iprodurre e a concepire un funzionamento simile, ottimizzandolo e semplificandolo per possibili esigenze di modulazione dello spazio. Si passa poi ad una for mulazione parametr ica sempre attraverso il suppor to del soft ware Rhinoscr ipt, definendo for ma e dimensione delle componenti, ma anche variabili quali l’inerzia delle sezioni, la snellezza e la porosità. Nel primo esempio si utilizza una componente essenziale tubolare che rispecchia gli assi della ver tebra reale.
Script #04 - Definizione di una componente semplice con geometria semplificata e funzionamento in tensegrità Option ‘Script ‘Script ‘Script
Explicit wr itten by <inser t name> copyrighted by <inser t company name> v e r s i o n d o m e n i c a 1 4 g i u g n o 2 0 0 9 1 6 . 3 1. 2 9
Call Main() Sub Main() D i m s t r c u r v e : s t r c u r v e = r h i n o . G e t O b j e c t ( “ g e t c u r v e ”, 4 , Tr u e ) If isnull(strcur ve) Then Exit Sub D i m i n t s u b : i n t s u b = r h i n o . G e t I n t e g e r ( “ s u b d i v i s i o n ”, 1 5 , 3 ) Dim arrdom: arrdom = rhino.Cur veDomain(strcur ve) Ca l l r h i n o. Pr i n t ( “ m i n “ & a r rd o m ( 0 ) & “ m a x “ & a r rd o m ( 1 ) ) Ca l l r h i n o. e n a bl e re d r aw ( Fa l s e ) Dim dblstep: dblstep = (arrdom(1)-arrdom(0))/intsub Dim arrdivpoint: arrdivpoint=rhino.DivideCur ve(strcur ve,intsub) Dim i, str plane, strcircle, dblpointoncr v Call rhino.pr int(“ “ &intsub) Dim arr pointstar t,arr pointend,arrapofis, arrnormal, arrlink, arraptrans1, arraptrans2 ReDim arr pointstar t(intsub), arr pointend(intsub), arrapofis(intsub),arr tangent(intsub),arrlink(intsub) ReDim arraptrans1(intsub), arraptrans2(intsub) D i m s t r m i d l i n e , a r r v e c t o r , a r r c u r v a t u r e , d b l a n g l e , s t r v e c t c u r v, c r v p o i n t , a r r p t c o o r d 1 Dim arr ptcoord2,arr vect1,arr vect2, arr tannor m ReDim arr tannorm(intsub), arr ptcoord1(intsub),arr ptcoord2(intsub),str plane(intsub) D i m a r r n ewc e n t r, a r rc i rc l , a r r t a n g e n tte m p, a r r a p o fi s e n d p o i n t ReDim arrcircl(intsub), arr newcentr(intsub),arr tangenttemp(intsub),arrapofisendpoint(intsub) F o r i = 0 To i n t s u b dblpointoncr v = rhino.cur veclosestpoint(strcur ve,arrdivpoint(i)) s t r p l a n e ( i ) = r h i n o. C u r ve Pe r p Fr a m e ( s t rc u r ve, d bl p o i n to n c r v ) strcircle = rhino.AddCircle(str plane(i),1) Call rhino.ObjectColor(strcircle,rgb(255,255,255)) a r r p o i n t s t a r t ( i ) = r h i n o. Ad d Po i n t ( r h i n o. C u r ve S t a r t Po i n t ( s t rc i rc l e ) ) a r r p o i n t e n d ( i ) = r h i n o . R o t a t e O b j e c t ( a r r p o i n t s t a r t ( i ) , a r r d i v p o i n t ( i ) , 1 8 0 , , Tr u e ) a r r t a n g e n t ( i ) = R h i n o . C u r v e Ta n g e n t ( s t r c u r v e , d b l p o i n t o n c r v ) a r r n e w c e n t r ( i ) = r h i n o . R o t a t e O b j e c t ( a r r p o i n t s t a r t ( i ) , a r r d i v p o i n t ( i ) , - 9 0 , a r r t a n g e n t ( i ) , Tr u e ) a r r a p t r a n s 1 ( i ) = r h i n o . R o t a t e O b j e c t ( a r r p o i n t s t a r t ( i ) , a r r d i v p o i n t ( i ) , 2 0 - i * 4 0 / i n t s u b , a r r t a n g e n t ( i ) , Tr u e ) a r r a p t r a n s 2 ( i ) = r h i n o . R o t a t e O b j e c t ( a r r p o i n t e n d ( i ) , a r r d i v p o i n t ( i ) , - 2 0 + i * 4 0 / i n t s u b , a r r t a n g e n t ( i ) , Tr u e ) a r r p t c o o rd 1 ( i ) = r h i n o. Po i n t Co o rd i n a te s ( a r r p o i n t s t a r t ( i ) ) a r r p t c o o rd 2 ( i ) = r h i n o. Po i n t Co o rd i n a te s ( a r r p o i n te n d ( i ) ) a r r t a n g e n t t e m p ( i ) = r h i n o . Ve c t o r A d d ( a r r d i v p o i n t ( i ) , a r r t a n g e n t ( i ) ) arrapofis(i)= rhino.AddLine(arrdivpoint(i),arr tangenttemp(i)) a r r v e c t o r = R h i n o . Ve c t o r C r e a t e ( a r r p t c o o r d 1 ( i ) , a r r p t c o o r d 2 ( i ) ) arrapofis(i)= rhino.RotateObject(arrapofis(i),arrdivpoint(i),-90,arr vector) a r r l i n k ( i ) = r h i n o . R o t a t e O b j e c t ( a r r a p o f i s ( i ) , a r r d i v p o i n t ( i ) , 1 8 0 , a r r v e c t o r , Tr u e ) Call rhino.ObjectColor(arrapofis(i),rgb(255,255,0)) Call rhino.ObjectColor(arr link(i),rgb(255,255,255)) arrcur vature=rhino.Cur veCur vature(strcur ve,dblpointoncr v) dblangle = rhino.Angle2(array(array(0,0,0),array(1,0,0)),array(arrdivpoint(i),arr tangenttemp(i))) Ca l l r h i n o. Pr i n t ( “ ” & d bl a n g l e ( 0 ) ) Ca l l r h i n o. Pr i n t ( “ c u r v “ & a r rc u r va t u re ( 3 ) ) c r v p o i n t = r h i n o . Ve c t o r A d d ( a r r d i v p o i n t ( i ) , a r r c u r v a t u r e ( 4 ) ) str vectcur v =rhino.AddLine(arrdivpoint(i),cr vpoint) Call rhino.pr int(“point z “& arrdivpoint(i)(2)) arrapofis(i)=rhino.RotateObject(arrapofis(i),arrdivpoint(i),-dblangle(0),arr vector) If cr vpoint(2) > arrdivpoint(i)(2) Then arrapofis(i)=rhino.RotateObject(arrapofis(i),arrdivpoint(i),-dblangle(0)/5,arr vector) Else arrapofis(i)=rhino.RotateObject(arrapofis(i),arrdivpoint(i),dblangle(0)/5,arr vector) End If a r r a p o f i s ( i ) = r h i n o . S c a l e O b j e c t ( a r r a p o f i s ( i ) , a r r d i v p o i n t ( i ) , a r r a y ( 1- i / i n t s u b , 1- i / i n t s u b , 1- i / i n t s u b ) )
50
28
29
30
(28), (29), (30) Caratter istiche e rappor ti tr idimensionali che schematizzano il compor tamento delle ver tebre umane (29), gli elementi schematizzati come tetraedri stanno mantengono tra di loro determinati rappor ti di angolo e vicinanza per non compenetrarsi e mantenere il compor tamento in tensegrità (30), variando di posizione le ver tebre mutano anche la for ma della loro sezione e la loro inersia var iando angoli e lunghezzi tra le par ti, (30) 51
Call rhino.selectobject (arrapofis(i)) r h i n o . C o m m a n d “ _ p i p e “ & “. 1 “ & “. 1 “ & “ _ e n t e r “ & “ _ e n t e r “ rhino.UnselectAllObjects arrcircl(i) = rhino.addcircle(str plane(i),0.8-i*0.7/intsub) Call rhino.ObjectColor(arrcircl(i),rgb(255,255,255)) Ca l l r h i n o. M ove O b j e c t ( a r rc i rc l ( i ) , a r rd i v p o i n t ( i ) , r h i n o. Po i n t Co o rd i n a te s ( a r r n ewc e n t r ( i ) ) ) a r r a p o fi s e n d p o i n t ( i ) = r h i n o. Ad d Po i n t ( r h i n o. C u r ve e n d Po i n t ( a r r a p o fi s ( i ) ) ) arrapofisendpoint(i) = rhino.pointcoordinates(arrapofisendpoint(i)) Next Dim arr pt1c, arr pt2c,line, str trav1,str trav2 Dim arrnewend,arrnewend2 ReDim arrnewend1(intsub),arrnewend2(intsub) F o r i = 0 To i n t s u b a r r p t 1 c = r h i n o. Po i n t Co o rd i n a te s ( a r r a p t r a n s 1 ( i ) ) a r r p t 2 c = r h i n o. Po i n t Co o rd i n a te s ( a r r a p t r a n s 2 ( i ) ) line = rhino.AddLine(arr pt1c,arr pt2c) a r r v e c t o r = R h i n o . Ve c t o r C r e a t e ( a r r p t c o o r d 1 ( i ) , a r r p t c o o r d 2 ( i ) ) line = rhino.RotateObject (line,arrdivpoint(i),40,arr vector) s t r t r av 1 = r h i n o. a d d l i n e ( r h i n o. C u r ve S t a r t Po i n t ( l i n e ) , a r rd i v p o i n t ( i ) ) s t r t r av 2 = r h i n o. a d d l i n e ( r h i n o. C u r ve e n d Po i n t ( l i n e ) , a r rd i v p o i n t ( i ) ) str trav1 = rhino.ScaleObject(str trav1,arrdivpoint(i),array(2-i*1/intsub,2-i*1/intsub,2-i*1/intsub)) str trav2 = rhino.ScaleObject(str trav2,arrdivpoint(i),array(2-i*1/intsub,2-i*1/intsub,2-i*1/intsub)) a r r n ew e n d 1 ( i ) = r h i n o. C u r ve s t a r t Po i n t ( s t r t r av 1 ) a r r n ew e n d 2 ( i ) = r h i n o. C u r ve s t a r t Po i n t ( s t r t r av 2 ) arr newend1(i) = rhino.addpoint(arr newend1(i)) arr newend2(i) = rhino.addpoint(arr newend2(i)) arr newend1(i) = rhino.pointcoordinates(arr newend1(i)) arr newend2(i) = rhino.pointcoordinates(arr newend2(i)) Call rhino.selectobject (str trav1) r h i n o . C o m m a n d “ _ p i p e “ & “. 1 “ & “. 1 ” & “ _ e n t e r “ & “ _ e n t e r “ rhino.UnselectAllObjects Call rhino.selectobject (str trav2) r h i n o . C o m m a n d “ _ p i p e “ & “. 1 “ & “. 1 “ & “ _ e n t e r “ & “ _ e n t e r “ rhino.UnselectAllObjects Call rhino.deleteobject(line) Next Dim arrfrontcircle, linefront ReDim arrfrontcircle(intsub) F o r i = 0 To i n t s u b arrcircl(i) = rhino.addcircle(str plane(i),0.4-i*0.3/intsub) Call rhino.ObjectColor(arrcircl(i),rgb(0,0,255)) Ca l l r h i n o. M ove O b j e c t ( a r rc i rc l ( i ) , a r rd i v p o i n t ( i ) , r h i n o. Po i n t Co o rd i n a te s ( a r r n ewc e n t r ( i ) ) ) arrfrontcircle(i) = rhino.cur vestar tpoint(arrcircl(i)) a r r f ro n t c i rc l e ( i ) = r h i n o. Ad d Po i n t ( a r r f ro n t c i rc l e ( i ) ) a r r f ro n t c i rc l e ( i ) = r h i n o. Ro t a te O b j e c t ( a r r f ro n t c i rc l e ( i ) , r h i n o. Po i n t Co o rd i n a te s ( a r r n ewc e n t r ( i ) ) , 2 7 0 , a r r t a n g e n t ( i ) ) a r r f ro n t c i rc l e ( i ) = r h i n o. Po i n t Co o rd i n a te s ( a r r f ro n t c i rc l e ( i ) ) linefront= rhino.AddLine(arrdivpoint(i),arrfrontcircle(i)) Call rhino.selectobject (linefront) r h i n o . C o m m a n d “ _ p i p e “ & “. 1 “ & “. 1 ” & “ _ e n t e r “ & “ _ e n t e r “ rhino.UnselectAllObjects Next Dim tensed1,tensed2,tensed3,tensed4,circle,frame,points,pointcur ve ReDim circle(intsub),frame(intsub) Call rhino.AddLoftSrf(arrcircl) tensed1 = rhino.AddCur ve(arr newend1,1) tensed2 = rhino.AddCur ve(arr newend2,1) tensed3 = rhino.AddCur ve(arrapofisendpoint,1) F o r i = 0 To i n t s u b p o i n t c u r ve = r h i n o. C u r ve C l o s e s t Po i n t ( te n s e d 1 , a r r n ew e n d 1 ( i ) ) f r a m e = r h i n o. C u r ve Pe r p Fr a m e ( te n s e d 1 , p o i n t c u r ve ) circle(i)= rhino.AddCircle(frame,0.08) Next Call rhino.AddLoftSrf(circle) p o i n t s = R h i n o. C u r ve E d i t Po i n t s ( te n s e d 2 ) F o r i = 0 To i n t s u b p o i n t c u r ve = r h i n o. C u r ve C l o s e s t Po i n t ( te n s e d 2 , a r r n ew e n d 2 ( i ) ) f r a m e = r h i n o. C u r ve Pe r p Fr a m e ( te n s e d 2 , p o i n t c u r ve ) circle(i)= rhino.AddCircle(frame,0.05) Next Call rhino.AddLoftSrf(circle) p o i n t s = R h i n o. C u r ve E d i t Po i n t s ( te n s e d 3 ) F o r i = 0 To i n t s u b p o i n t c u r ve = r h i n o. C u r ve C l o s e s t Po i n t ( te n s e d 3 , a r r a p o fi s e n d p o i n t ( i ) ) f r a m e = r h i n o. C u r ve Pe r p Fr a m e ( te n s e d 3 , p o i n t c u r ve ) circle(i)= rhino.AddCircle(frame,0.05) Next Call rhino.AddLoftSrf(circle) Dim iEnd,points2,j, ppoints,pcur ve F o r i = 1 To i n t s u b tensed4=rhino.addcurve(array(arrapofisendpoint(i),arrnewend1(i-1),arrfrontcircle(i),arrnewend2(i1),arrapofisendpoint(i)),2) iEnd =rhino.cur veendpoint(tensed4) points2=array(arrapofisendpoint(i),arr newend1(i-1),arrfrontcircle(i),arr newend2(i-1)) Call rhino.selectobject (tensed4) r h i n o . C o m m a n d “ _ p i p e “ & “. 0 5 “ & “. 0 5 “ & “ _ e n t e r “ & “ _ e n t e r “ rhino.UnselectAllObjects Next C a l l r h i n o . e n a b l e r e d r a w ( Tr u e )
31
32 ( 3 1 ) , ( 3 2 ) Pr i m o e s e m p i o d i p ro l i fe r a z i o n e d i u n c o m p o n e n te s e m p l i c e a d e f i n i re u n a p o s s i b i l e s t r u tt u r a che racchiuda lo spazio
End Sub
52
53
Script #05 - Definizione di una componente semplice con geometria tetraedrica e funzionamento in tensegrità. Mantenendo le ipotesi sopracitate e definendo delle costanti dimensionali si analizzano sia componenti tetraedriche che cubiche. Option Explicit ‘Scr ipt wr itten by <Vincenzo Reale> ‘ S c r i p t v e r s i o n l u n e d ì 2 2 g i u g n o 2 0 0 9 1 4 . 2 1. 3 6 Dim pa,pb,pc,pd pa pb pc pd
= = = =
r h i n o. Ad d Po i n t ( a r r ay ( 2 , 2 , 2 ) ) r h i n o. Ad d Po i n t ( a r r ay ( - 2 , - 2 , 2 ) ) r h i n o. Ad d Po i n t ( a r r ay ( - 2 , 2 , - 4 ) ) r h i n o. Ad d Po i n t ( a r r ay ( 2 , - 2 , - 2 ) )
Call tetradesign(pa,pb,pc,pd) Sub tetradesign(pa,pb,pc,pd) Dim pAc,pBc,pCc,pDc p Ac = r h i n o. Po i n t Co o rd i n a te s ( p a ) C a l l r h i n o . A d d Te x t ( “A”, p A c , 0 . 4 ) p B c = r h i n o. Po i n t Co o rd i n a te s ( p b ) C a l l r h i n o . A d d Te x t ( “ B ”, p B c , 0 . 4 ) p C c = r h i n o. Po i n t Co o rd i n a te s ( p c ) C a l l r h i n o . A d d Te x t ( “ C ”, p C c , 0 . 4 ) p D c = r h i n o. Po i n t Co o rd i n a te s ( p d ) C a l l r h i n o . A d d Te x t ( “ D ”, p D c , 0 . 4 )
D i m p m e d C D, p m e d C D c , p m e d A B , p m e d A B c , p m e d B D, p m e d B D c , p m e d A D, p m e d A D c , p m e d A C , p m e d A C c , p m e d C B , p m e d C pmedCD = rhino.addpoint(array((pCc(0)+pDc(0))/2,(pCc(1)+pDc(1))/2,(pCc(2)+pDc(2))/2)) p m e d C D c = r h i n o. Po i n t Co o rd i n a te s ( p m e d C D ) C a l l r h i n o . A d d Te x t ( “ m e d C D ”, p m e d C D c , 0 . 2 ) pmedAB = rhino.addpoint(array((pAc(0)+pBc(0))/2,(pAc(1)+pBc(1))/2,(pAc(2)+pBc(2))/2)) p m e d A B c = r h i n o. Po i n t Co o rd i n a te s ( p m e d A B ) C a l l r h i n o . A d d Te x t ( “ m e d A B ”, p m e d A B c , 0 . 2 ) pmedBD= rhino.addpoint(array((pBc(0)+pDc(0))/2,(pBc(1)+pDc(1))/2,(pBc(2)+pDc(2))/2)) p m e d B D c = r h i n o. Po i n t Co o rd i n a te s ( p m e d B D ) C a l l r h i n o . A d d Te x t ( “ m e d B D ”, p m e d B D c , 0 . 2 ) pmedAD= rhino.addpoint(array((pAc(0)+pDc(0))/2,(pAc(1)+pDc(1))/2,(pAc(2)+pDc(2))/2)) p m e d A D c = r h i n o. Po i n t Co o rd i n a te s ( p m e d A D ) C a l l r h i n o . A d d Te x t ( “ m e d A D ”, p m e d A D c , 0 . 2 ) pmedAC= rhino.addpoint(array((pAc(0)+pCc(0))/2,(pAc(1)+pCc(1))/2,(pAc(2)+pCc(2))/2)) p m e d AC c = r h i n o. Po i n t Co o rd i n a te s ( p m e d AC ) C a l l r h i n o . A d d Te x t ( “ m e d A C ”, p m e d A C c , 0 . 2 ) pmedCB= rhino.addpoint(array((pBc(0)+pCc(0))/2,(pBc(1)+pCc(1))/2,(pBc(2)+pCc(2))/2)) p m e d C B c = r h i n o. Po i n t Co o rd i n a te s ( p m e d C B ) C a l l r h i n o . A d d Te x t ( “ m e d C B ”, p m e d C B c , 0 . 2 )
D i m p b a r, p b a rc pbar = rhino.addpoint(array((pAc(0)+pBc(0)+pCc(0)+pDc(0))/4,(pAc(1)+pBc(1)+pCc(1)+pDc(1))/4,(pAc(2)+pBc(2)+ pCc(2)+pDc(2))/4)) p b a rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r ) C a l l r h i n o . A d d Te x t ( “ B A R ”, p b a r c , 0 . 2 )
D i m a r r p t B A R _ A B , a r r p t B A R _ C D, a r r p t B A R _ B D, a r r p t B A R _ A D, a r r p t B A R _ A C , a r r p t B A R _ C B Dim arr medab,arr medcd, arr medcd2,arr medbd,arr medad,arr medac,arr medcb arr medab = array((pbarc(0)+pmedABc(0))/2,(pbarc(1)+pmedABc(1))/2,(pbarc(2)+pmedABc(2))/2) arr ptBAR_AB = array((pbarc(0)+ arr medab(0))/2,(pbarc(1)+arr medab(1))/2,(pbarc(2)+arr medab(2))/2) arr medcd = array((pbarc(0)+pmedCDc(0))/2,(pbarc(1)+pmedCDc(1))/2,(pbarc(2)+pmedCDc(2))/2) Dim ptinter mBAR_A,ptinter mBAR_B,ptinter mBAR_C,ptinter mBAR_D Dim arr medbara,arr medbarb,arr medbarc,arr medbard arr medbara = array((pbarc(0)+pAc(0))/2,(pbarc(1)+pAc(1))/2,(pbarc(2)+pAc(2))/2) ptinter mBAR_A = array((pbarc(0)+arr medbara(0))/2,(pbarc(1)+arr medbara(1))/2,(pbarc(2)+arr medbara(2))/2) arr medbarb = array((pbarc(0)+pBc(0))/2,(pbarc(1)+pBc(1))/2,(pbarc(2)+pBc(2))/2) ptinter mBAR_B = array((pbarc(0)+arr medbarb(0))/2,(pbarc(1)+arr medbarb(1))/2,(pbarc(2)+arr medbarb(2))/2) arr medbarC = array((pbarc(0)+pCc(0))/2,(pbarc(1)+pCc(1))/2,(pbarc(2)+pCc(2))/2) ptinter mBAR_C = array((pbarc(0)+arr medbarC(0))/2,(pbarc(1)+arr medbarC(1))/2,(pbarc(2)+arr medbarC(2))/2) arr medbarD = array((pbarc(0)+pDc(0))/2,(pbarc(1)+pDc(1))/2,(pbarc(2)+pDc(2))/2) ptinter mBAR_D = array((pbarc(0)+arr medbarD(0))/2,(pbarc(1)+arr medbarD(1))/2,(pbarc(2)+arr medbarD(2))/2) D i m s t r c u r v e A B , s t r c u r v e C D, s t r c u r v e B D, s t r c u r v e A D, s t r c u r v e A C , s t r c u r v e B C ‘ C u r v e d a l a t o a l a t o s t r c u r v e A B = r h i n o . A d d C u r v e ( a r r a y ( p A c , p t i n t e r m B A R _ A , a r r p t B A R _ A B , p t i n t e r m B A R _ B , p B c ) , 3 ) ‘A B s t r c u r v e B D = r h i n o. a d d c u r v e ( a r r a y ( p B c , a r r p t B A R _ B D, p D c ) ) ‘ B D s t r c u r v e A D = r h i n o . a d d c u r v e ( a r r a y ( p A c , a r r p t B A R _ A D , p D c ) ) ’A d s t r c u r v e A C = r h i n o . A d d C u r v e ( a r r a y ( p A c , p t i n t e r m B A R _ A , a r r p t B A R _ A C , p t i n t e r m B A R _ C , p C c ) , 3 ) ‘ C U R VA A C strcur veBC = rhino.AddCur ve(array(pBc,ptinter mBAR_B,arr ptBAR_CB,ptinter mBAR_C,pCc),3) ‘BC s t r c u r v e C D = r h i n o. A d d C u r v e ( a r r a y ( p D c , p t i n t e r m B A R _ D, p b a r c , p t i n t e r m B A R _ C , p C c ) ) ‘ C D
54
33
34 (33), (34) Componente inscr ivibile in un tetraedro, si r ipor tano i punti che definiscono l’analogia con il compor tamento della ver tebra
55
D i m s t r c u r v e A B r e v e r s e â&#x20AC;&#x2DC; C U R VA A B strcur veABreverse = rhino.AddCur ve(array(pBc,ptinter mBAR_B, arr ptBAR_AB, ptinter mBAR_A, pAc) ) Dim midStrcur veAB,midStrcur veAC,midStrcur veBC,midStrcur veCD D i m m i d S t r c u r v e A D, m i d S t r c u r v e B D m i d S t rc u r ve A B = r h i n o. C u r ve M i d Po i n t ( s t rc u r ve A B ) m i d S t rc u r ve AC = r h i n o. C u r ve M i d Po i n t ( s t rc u r ve AC ) m i d S t rc u r ve B C = r h i n o. C u r ve M i d Po i n t ( s t rc u r ve B C ) m i d S t rc u r ve C D = r h i n o. C u r ve M i d Po i n t ( s t rc u r ve C D ) m i d S t rc u r ve A D = r h i n o. C u r ve M i d Po i n t ( s t rc u r ve A D ) m i d S t rc u r ve B D = r h i n o. C u r ve M i d Po i n t ( s t rc u r ve B D )
Dim splitStrcur veAB,splitStrcur veABreverse, splitStrcur veAC,splitStrcur veBC,splitStrcur veCD D i m s p l i t S t r c u r v e A D, s p l i t S t r c u r v e B D s p l i t S t r c u r v e A B = R h i n o . S p l i t C u r v e ( s t r c u r v e A B , r h i n o . C u r v e C l o s e s t P o i n t ( s t r c u r v e A B , m i d S t r c u r v e A B ) , Tr u e ) splitStrcur veABreverse = Rhino.SplitCur ve (strcur veABreverse, r h i n o. C u r ve C l o s e s t Po i n t ( s t rc u r ve A B reve rs e, m i d S t rc u r ve A B ) , Fa l s e ) s p l i t S t r c u r v e A C = R h i n o . S p l i t C u r v e ( s t r c u r v e A C , r h i n o . C u r v e C l o s e s t P o i n t ( s t r c u r v e A C , m i d S t r c u r v e A C ) , Tr u e ) s p l i t S t r c u r v e B C = R h i n o . S p l i t C u r v e ( s t r c u r v e B C , r h i n o . C u r v e C l o s e s t P o i n t ( s t r c u r v e B C , m i d S t r c u r v e B C ) , Tr u e ) s p l i t S t r c u r v e C D = r h i n o . s p l i t c u r v e ( s t r c u r v e C D , r h i n o . c u r v e c l o s e s t p o i n t ( s t r c u r v e C D , m i d S t r c u r v e C D ) , Tr u e ) s p l i t S t r c u r v e A D = r h i n o . s p l i t c u r v e ( s t r c u r v e A D , r h i n o . c u r v e c l o s e s t p o i n t ( s t r c u r v e A D , m i d S t r c u r v e A D ) , Tr u e ) s p l i t S t r c u r v e B D = r h i n o . s p l i t c u r v e ( s t r c u r v e B D , r h i n o . c u r v e c l o s e s t p o i n t ( s t r c u r v e B D , m i d S t r c u r v e B D ) , Tr u e )
D i m s w e e p 1 _ r a i l A B _ A D B D , l o f t 1 , l o f t 2 , l o f t 3 , l o f t 4 , l o f t 5 , l o f t 6 , l o f t 7, l o f t 8 , l o f t 9 , l o f t 1 0 , l o f t 11 , l o f t 1 2 Dim loft13,loft14,loft15,loft16 D i m s t r C u r v e M A B _ D, s t r C u r v e M A C _ D, s t r C u r v e M A B _ C , s t r C u r v e M A D _ C , s t r C u r v e M B D _ C , s t r C u r v e M B D _ A , strCur veMAD_B D i m s t r C u r v e M A C _ B , s t r C u r v e M C B _ D, s t r C u r v e M C B _ A
strCur veMAB_D= rhino.AddCur ve(array(midStrcur veAB,pbarc,pDc)) strCur veMAC_D= rhino.AddCur ve(array(midStrcur veAC,pbarc,pDc)) strCur veMAB_C= rhino.AddCur ve(array(midStrcur veAB,pbarc,pCc)) s t r C u r v e M A D _ C = r h i n o. A d d C u r v e ( a r r a y ( m i d S t r c u r v e A D, p b a r c , p C c ) ) s t r C u r v e M B D _ C = r h i n o. A d d C u r v e ( a r r a y ( m i d S t r c u r v e B D, p b a r c , p C c ) ) s t r C u r v e M B D _ A = r h i n o. A d d C u r v e ( a r r a y ( m i d S t r c u r v e B D, p b a r c , p A c ) ) s t r C u r v e M A D _ B = r h i n o. A d d C u r v e ( a r r a y ( m i d S t r c u r v e A D, p b a r c , p B c ) ) strCur veMAC_B = rhino.AddCur ve(array(midStrcur veAC,pbarc,pBc)) strCur veMCB_D = rhino.AddCur ve(array(midStrcur veBC,pbarc,pDc)) strCur veMCB_A = rhino.AddCur ve(array(midStrcur veBC,pbarc,pAc)) l o ft 1 = r h i n o. A d d L o ft S r f ( a r r a y ( s t r C u r v e M A B _ D, s p l i t S t r c u r v e A D ( 1 ) ) ) l o ft 2 = r h i n o. A d d L o ft S r f ( a r r a y ( s t r C u r v e M A B _ D, s p l i t S t r c u r v e B D ( 1 ) ) ) loft3 = rhino.AddLoftSrf(array(splitStrcur veABreverse(0),splitStrcur veBD(0))) loft4 = rhino.AddLoftSrf(array(splitStrcur veAB(0),splitStrcur veAD(0))) loft5 = rhino.AddLoftSrf(array(strCur veMAD_C,splitStrcur veAC(1))) loft7 = rhino.AddLoftSrf(array(splitStrcur veAD(0),splitStrcur veAC(0))) Call rhino.reversecur ve(splitStrcur veAD(1)) loft6 = rhino.AddLoftSrf(array(strCur veMAD_C,splitStrcur veCD(1))) loft8 = rhino.AddLoftSrf(array(splitStrcur veAD(1),splitStrcur veCD(0))) loft9 = rhino.AddLoftSrf(array(strCur veMBD_C,splitStrcur veBC(1)))v l o ft 10 = r h i n o. Ad d L o ft S r f ( a r r ay ( s p l i t S t rc u r ve B D ( 0 ) , s p l i t S t rc u r ve B C ( 0 ) ) ) Call rhino.reversecur ve(splitStrcur veBD(1)) l o f t 11 = r h i n o . A d d L o f t S r f ( a r r a y ( s t r C u r v e M B D _ C , s p l i t S t r c u r v e C D ( 1 ) ) ) loft12 = rhino.AddLoftSrf(array(splitStrcur veBD(1),splitStrcur veCD(0))) loft13 = rhino.AddLoftSrf(array(strCur veMAB_C,splitStrcur veAC(1))) loft14 = rhino.AddLoftSrf(array(splitStrcur veAC(0),splitStrcur veAB(0))) Call rhino.reversecur ve(splitStrcur veAB(1)) loft15 = rhino.AddLoftSrf(array(strCur veMAB_C,splitStrcur veBC(1))) loft16 = rhino.AddLoftSrf(array(splitStrcur veAB(1),splitStrcur veBC(0)))
35
Call rhino.DeleteObjects(array(splitStrcur veAD(1),splitStrcur veBD(1))) C a l l r h i n o. D e l e t e O b j e c t s ( a r r a y ( s t r C u r v e M A B _ D, s t r C u r v e M A C _ D, s t r C u r v e M A B _ C , s t r C u r v e M A D _ C , s t r C u r v e M B D _ C , s t r C u r v e MBD_A,strCur veMAD_B)) C a l l r h i n o. D e l e t e O b j e c t s ( a r r a y ( s t r C u r v e M A C _ B , s t r C u r v e M C B _ D, s t r C u r v e M C B _ A ) ) C a l l r h i n o. D e l e t e O b j e c t s ( a r r a y ( s t r c u r v e A B , s t r c u r v e C D, s t r c u r v e B D, s t r c u r v e A D, s t r c u r v e A C , s t r c u r v e B C , s t r c u r v e A B r e v e r s e ) ) C a l l r h i n o. d e l e t e o b j e c t s ( a r r a y ( p m e d C D, p m e d A B , p m e d B D, p m e d A D, p m e d A C , p m e d C B ) ) End Sub
36 (35), (36) proliferazione del secondo tipo di componente a definire una superficie che possa racchiudere lo spazio
56
57
S c r i p t # 0 6 - Pro l i fe r a z i o n e d i c o m p o n e n te a d e f i n i re u n a s u p e r f i c i e 1 Ve n g o n o f a t t e d e l l e p r o v e d i p r o l i f e r a z i o n e d a t i q u e s t i e l e m e n t i b a s e n e l l o s p a z i o , c e r cando di individuare come queste componenti modulano lo spazio stesso e riescono a creare degli ambiti definiti.
Option Explicit ‘Scr ipt wr itten by Vincenzo Reale ‘ S c r i p t v e r s i o n l u n e d ì 2 2 g i u g n o 2 0 0 9 11. 0 6 . 0 0 Call Main() Sub Main() Dim pa,pb,pc,pd Dim p p = 2 ‘ r h i n o . G e t R e a l ( “ b a s e ”, 2 , 1 ) p a = r h i n o. Ad d Po i n t ( a r r ay ( 1 , 1 , 1 ) ) p b = r h i n o. Ad d Po i n t ( a r r ay ( - 1 , - 1 , 1 ) ) p c = r h i n o. Ad d Po i n t ( a r r ay ( - 1 , 1 , - 1 ) ) p d = r h i n o. Ad d Po i n t ( a r r ay ( 1 , - 1 , - 1 ) ) dim pac,pbc,pcc,pdc p a c = r h i n o. Po i n t Co o rd i n a te s ( p a ) p b c = r h i n o. Po i n t Co o rd i n a te s ( p b ) p c c = r h i n o. Po i n t Co o rd i n a te s ( p c ) p d c = r h i n o. Po i n t Co o rd i n a te s ( p d ) Ca l l r h i n o. e n a bl e re d r aw ( Fa l s e ) Call tetra(pa,pb,pc,pd) D i m p m e d , p m e d c, p m e d 2 , p m e d 2 c, p b a r, p b a rc pmed = rhino.addpoint(array((pcc(0)+pdc(0))/2,(pcc(1)+pdc(1))/2,(pcc(2)+pdc(2))/2)) p m e d c = r h i n o. Po i n t Co o rd i n a te s ( p m e d ) pmed2 = rhino.addpoint(array((pac(0)+pbc(0))/2,(pac(1)+pbc(1))/2,(pac(2)+pbc(2))/2)) p m e d 2 c = r h i n o. Po i n t Co o rd i n a te s ( p m e d 2 ) pbar = rhino.addpoint(array((pmedc(0)+pmed2c(0))/2,(pmedc(1)+pmed2c(1))/2,(pmedc(2)+pmed2c(2))/2)) p b a rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r ) Dim i,vecrot Dim imax imax = 13 F o r i = 0 To i m a x pa = rhino.copyobject(pa,pmedc,pbarc) pb = rhino.copyobject(pb,pmedc,pbarc) pc = rhino.copyobject(pc,pmedc,pbarc) pd = rhino.copyobject(pd,pmedc,pbarc) pmed = rhino.copyobject(pmed,pmedc,pbarc) pmed2 = rhino.copyobject(pmed2,pmedc,pbarc) p b a r = r h i n o. c o pyo b j e c t ( p b a r, p m e d c, p b a rc ) p m e d c = r h i n o. Po i n t Co o rd i n a te s ( p m e d )
37
v e c r o t = r h i n o . Ve c t o r A d d ( a r r a y ( 0 , 0 , 0 ) , a r r a y ( 1 , 1 , 0 ) ) Ca l l r h i n o. Ro t a te O b j e c t s ( a r r ay ( p a , p b, p c, p d , p m e d 2 , p b a r ) , p m e d c, 4 0 / i m a x , ve c ro t , Fa l s e ) C a l l r h i n o . S c a l e O b j e c t s ( a r r a y ( p a , p b , p c , p d , p m e d 2 , p b a r ) , p b a r c , a r r a y ( 1- 0 . 2 * i / i m a x , 1- 0 . 5 * i / i m a x , 1- 0 . 5 * i / i m a x ) , Fa l s e ) p a c = r h i n o. Po i n t Co o rd i n a te s ( p a ) p b c = r h i n o. Po i n t Co o rd i n a te s ( p b ) p c c = r h i n o. Po i n t Co o rd i n a te s ( p c ) p d c = r h i n o. Po i n t Co o rd i n a te s ( p d ) p m e d 2 c = r h i n o. Po i n t Co o rd i n a te s ( p m e d 2 ) p b a rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r ) Call tetra(pa,pb,pc,pd) Ca l l te t r a r i g h t ( p a , p b, p c, p d , p m e d , p m e d 2 , p b a r, p a c, p b c, p c c, p d c, p m e d c, p m e d 2 c, p b a rc, i ) ‘ Ca l l te t r a d ow n ( p a , p b, p c, p d , p m e d , p m e d 2 , p b a r, p a c, p b c, p c c, p d c, p m e d c, p m e d 2 c, p b a rc ) Ca l l te t r a l e ft ( p a , p b, p c, p d , p m e d , p m e d 2 , p b a r, p a c, p b c, p c c, p d c, p m e d c, p m e d 2 c, p b a rc, i ) Next call rhino.enableredraw(tr ue) End Sub S u b te t r a r i g h t ( p a , p b, p c, p d , p m e d , p m e d 2 , p b a r, p a c, p b c, p c c, p d c, p m e d c, p m e d 2 c, p b a rc, i ) D i m p m e d n e w, p m e d n e w c pmednew = rhino.addpoint(array((pac(0)+pcc(0))/2,(pac(1)+pcc(1))/2,(pac(2)+pcc(2))/2)) p m e d n ewc = r h i n o. Po i n t Co o rd i n a te s ( p m e d n ew ) D i m p a r, p b r, p c r, p d r, p m e d r, p m e d 2 r, p b a r r, p a rc, p b rc, p c rc, p d rc, p m e d rc, p m e d 2 rc, p b a r rc par = rhino.copyobject(pa,pmednewc,pbarc) pbr = rhino.copyobject(pb,pmednewc,pbarc) pcr = rhino.copyobject(pc,pmednewc,pbarc) pdr = rhino.copyobject(pd,pmednewc,pbarc) pmedr = rhino.copyobject(pmed,pmednewc,pbarc) pmed2r = rhino.copyobject(pmed2,pmednewc,pbarc) p b a r r = r h i n o. c o pyo b j e c t ( p b a r, p m e d n ewc, p b a rc )
58
38 (37) (38) ulter ior i proliferazioni var iando i parametr i di diffusione, gli angoli e i rappor ti dimensionali nelle serie
59
p m e d rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d r ) Dim vecrot v e c r o t = r h i n o . Ve c t o r A d d ( p a c , p c c ) p a rc = r h i n o. Po i n t Co o rd i n a te s ( p a r ) p b rc = r h i n o. Po i n t Co o rd i n a te s ( p b r ) p c rc = r h i n o. Po i n t Co o rd i n a te s ( p c r ) p d rc = r h i n o. Po i n t Co o rd i n a te s ( p d r ) p m e d 2 rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d 2 r ) p b a r rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r r ) Ca l l te t r a ( p a r, p b r, p c r, p d r ) Dim j, imax imax = i+1 F o r j = 0 To i m a x p a r = r h i n o. c o pyo b j e c t ( p a r, p m e d n ewc, p b a rc ) p b r = r h i n o. c o pyo b j e c t ( p b r, p m e d n ewc, p b a rc ) p c r = r h i n o. c o pyo b j e c t ( p c r, p m e d n ewc, p b a rc ) p d r = r h i n o. c o pyo b j e c t ( p d r, p m e d n ewc, p b a rc ) p m e d r = r h i n o. c o pyo b j e c t ( p m e d r, p m e d n ewc, p b a rc ) p m e d 2 r = r h i n o. c o pyo b j e c t ( p m e d 2 r, p m e d n ewc, p b a rc ) p b a r r = r h i n o. c o pyo b j e c t ( p b a r r, p m e d n ewc, p b a rc ) p m e d rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d r ) p b a r rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r r ) p a rc = r h i n o. Po i n t Co o rd i n a te s ( p a r ) p b rc = r h i n o. Po i n t Co o rd i n a te s ( p b r ) p c rc = r h i n o. Po i n t Co o rd i n a te s ( p c r ) p d rc = r h i n o. Po i n t Co o rd i n a te s ( p d r ) v e c r o t = r h i n o . Ve c t o r A d d ( p a r c , p b r c ) vecrot = rhino.pointadd(vecrot,pbarrc) Ca l l r h i n o. Ro t a te O b j e c t s ( a r r ay ( p a r, p b r, p c r, p d r, p m e d 2 r, p b a r r ) , p m e d c, 5 / i m a x , ve c ro t , Fa l s e ) p a rc = r h i n o. Po i n t Co o rd i n a te s ( p a r ) p b rc = r h i n o. Po i n t Co o rd i n a te s ( p b r ) p c rc = r h i n o. Po i n t Co o rd i n a te s ( p c r ) p d rc = r h i n o. Po i n t Co o rd i n a te s ( p d r ) p m e d 2 rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d 2 r ) p b a r rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r r ) Ca l l te t r a ( p a r, p b r, p c r, p d r )
39
Next End Sub S u b te t r a l e ft ( p a , p b, p c, p d , p m e d , p m e d 2 , p b a r, p a c, p b c, p c c, p d c, p m e d c, p m e d 2 c, p b a rc, i ) D i m p m e d n e w, p m e d n e w c pmednew = rhino.addpoint(array((pbc(0)+pcc(0))/2,(pbc(1)+pcc(1))/2,(pbc(2)+pcc(2))/2)) p m e d n ewc = r h i n o. Po i n t Co o rd i n a te s ( p m e d n ew ) D i m p a r, p b r, p c r, p d r, p m e d r, p m e d 2 r, p b a r r, p a rc, p b rc, p c rc, p d rc, p m e d rc, p m e d 2 rc, p b a r rc par = rhino.copyobject(pa,pmednewc,pbarc) pbr = rhino.copyobject(pb,pmednewc,pbarc) pcr = rhino.copyobject(pc,pmednewc,pbarc) pdr = rhino.copyobject(pd,pmednewc,pbarc) pmedr = rhino.copyobject(pmed,pmednewc,pbarc) pmed2r = rhino.copyobject(pmed2,pmednewc,pbarc) p b a r r = r h i n o. c o pyo b j e c t ( p b a r, p m e d n ewc, p b a rc ) p a rc = r h i n o. Po i n t Co o rd i n a te s ( p a r ) p b rc = r h i n o. Po i n t Co o rd i n a te s ( p b r ) p c rc = r h i n o. Po i n t Co o rd i n a te s ( p c r ) p d rc = r h i n o. Po i n t Co o rd i n a te s ( p d r ) p m e d 2 rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d 2 r ) p b a r rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r r ) Dim j, imax imax = i+1 p m e d rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d r ) Dim vecrot v e c r o t = r h i n o . Ve c t o r A d d ( p b r c , p d r c ) vecrot = rhino.pointadd(vecrot,pbarrc) p a rc = r h i n o. Po i n t Co o rd i n a te s ( p a r ) p b rc = r h i n o. Po i n t Co o rd i n a te s ( p b r ) p c rc = r h i n o. Po i n t Co o rd i n a te s ( p c r ) p d rc = r h i n o. Po i n t Co o rd i n a te s ( p d r ) p m e d 2 rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d 2 r )
pbarrc =
r h i n o. Po i n t Co o rd i n a te s ( p b a r r )
Ca l l te t r a ( p a r, p b r, p c r, p d r )
40 (39) (40) ulter ior i proliferazioni var iando i parametr i di diffusione, gli angoli e i rappor ti dimensionali nelle serie
F o r j = 0 To i m a x p a r = r h i n o. c o pyo b j e c t ( p a r, p m e d n ewc, p b a rc ) p b r = r h i n o. c o pyo b j e c t ( p b r, p m e d n ewc, p b a rc ) p c r = r h i n o. c o pyo b j e c t ( p c r, p m e d n ewc, p b a rc ) p d r = r h i n o. c o pyo b j e c t ( p d r, p m e d n ewc, p b a rc )
60
61
p m e d r = r h i n o. c o pyo b j e c t ( p m e d r, p m e d n ewc, p b a rc ) p m e d 2 r = r h i n o. c o pyo b j e c t ( p m e d 2 r, p m e d n ewc, p b a rc ) p b a r r = r h i n o. c o pyo b j e c t ( p b a r r, p m e d n ewc, p b a rc ) p m e d rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d r ) p b a r rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r r ) p a rc = r h i n o. Po i n t Co o rd i n a te s ( p a r ) p b rc = r h i n o. Po i n t Co o rd i n a te s ( p b r ) p c rc = r h i n o. Po i n t Co o rd i n a te s ( p c r ) p d rc = r h i n o. Po i n t Co o rd i n a te s ( p d r ) v e c r o t = r h i n o . Ve c t o r A d d ( a r r a y ( 0 , 0 , 0 ) , a r r a y ( 1 , 1 , 0 ) ) Ca l l r h i n o. Ro t a te O b j e c t s ( a r r ay ( p a r, p b r, p c r, p d r, p m e d 2 r, p b a r r ) , p m e d c, 5 / i m a x , ve c ro t , Fa l s e ) p a rc = r h i n o. Po i n t Co o rd i n a te s ( p a r ) p b rc = r h i n o. Po i n t Co o rd i n a te s ( p b r ) p c rc = r h i n o. Po i n t Co o rd i n a te s ( p c r ) p d rc = r h i n o. Po i n t Co o rd i n a te s ( p d r ) p m e d 2 rc = r h i n o. Po i n t Co o rd i n a te s ( p m e d 2 r ) p b a r rc = r h i n o. Po i n t Co o rd i n a te s ( p b a r r ) Ca l l te t r a ( p a r, p b r, p c r, p d r )
Next End Sub
S c r i p t # 0 7 - Pro l i fe r a z i o n e d i c o m p o n e n te a d e f i n i re u n a s u p e r f i c i e re a g e n te 1 (viene ripor tata solo la parametrizzazione della par te centrale della componente) L’ e v o l u z i o n e t i e n e a n c h e c o n t o d e l l a p o s s i b i l i t à d i s o s t e n e r e u n a s u p e r f i c i e c h e c o n tribuisca a schermare lo spazio racchiuso e si moduli in presenza di interazioni più o meno for ti con l’ambiente ester no. In questo modo si inizia una corr ispondenza tra i dati ambientali e la superficie stessa che modula le sue aper tura in funzione dell’irraggiamento maggiore o minore (schermando quello maggiore). Option Explicit ‘ . Script written by Vincenzo Reale ‘ . univin@libero.it ‘Script version lunedì 18 gennaio 2010 18.21.43 Call Main() Sub Main() Call rhino.EnableRedraw(False)
Dim punti,i,serie,serietot, a,b,c,d,e,f,g,h serietot=6
For i = 0 To serietot ‘Step 2 a = array(0,i,0) b = array(a(0)+1,a(1),0) c = array(a(0)+1,a(1)+1,0) d = array(a(0),a(1)+1,0) arrbottom = array(a,b,c,d) e = array(a(0),a(1),a(2)+1) f = array(a(0)+1,a(1),a(2)+1) g = array(a(0)+1,a(1)+1,a(2)+1) h = array(a(0),a(1)+1,a(2)+1) arrtop = array(e,f,g,h) Dim val val = i ‘10-50 Dim vallateral vallateral = 5 Dim arraold,arrbold,arrcold,arrdold, arrc2old,arrd2old,arrg2old,barold,quadlatcptold,quadlatdptold Dim curverold, curvelold Call cube(arrbottom,arrtop,i,serietot, val,vallateral,arraold,arrbold,arrcold,arrdold, arrc2old,arrd2old,arrg2old,barold,quadlatcptold,quadlatdptold,cur verold, curvelold) Next End Sub
41
Dim arrtop, arrbottom
Call rhino.EnableRedraw(True)
42 (41),(42) Sviluppo di “generazioni” di componenti che, dal semplice schema tetraedr ico, arr ivano ad uno schema cubico mantenendo però un meccaniscmo di compor tamento analogo. Ai componenti tesi definiti come cavi si sostituiscono elementi a membrana.
Sub cube(arrbottom,arrtop,i,serietot, val,vallateral,ByRef arraold,ByRef arrbold,ByRef arrcold,ByRef arrdold,ByRef arrc2old,ByRef arrd2old,ByRef arrg2old,ByRef barold,ByRef quadlatcptold,ByRef quadlatdptold, ByRef curverold,ByRef curvelold)
62
63
Dim arrh1pt,arrh1plane,arrh1crv Dim arrb1pt,arrb1plane,arrb1crv
Dim h1z: h1z = array(1,1,1,1) Dim h1u: h1u = array(0,1,1,0) Dim h1v: h1v = array(0,0,1,1) Dim b1z: b1z = array(0.8,0.8,0.8,0.8) Dim b1u: b1u = h1u Dim b1v: b1v = h1v
call CQuad (arrbottom,arrtop,b1z,b1u,b1v,arrb1pt,arrb1crv,arrb1plane,1) call CQuad (arrbottom,arrtop,h1z,h1u,h1v,arrh1pt,arrh1crv,arrh1plane,1) Call rhino.DeleteObjects(array(arrb1plane,arrb1crv,arrh1plane,arrh1crv)) Call basement(arrb1pt,arrh1pt,i,serietot, val,vallateral)
old) End Sub
Call tessel02(arrbottom,arrb1pt,i,serietot,arraold,arrbold,arrcold,arrdold, arrc2old,arrd2old,arrg2old,barold,quadlatcptold,quadlatdptold,curverold, curvel-
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ PANNELLO ‘BASEMENT: smista le componenti a seconda del loro valore di evoluzine Sub basement(arrbottom,arrtop,i,serietot, val,vallateral) End Sub
If val <=10 Then Call bas1(arrbottom,arrtop,i,serietot, val,vallateral) If val <=20 And val >10 Then Call bas2(arrbottom,arrtop,i,serietot, val,vallateral) If val <=30 And val >20 Then Call bas3(arrbottom,arrtop,i,serietot, val,vallateral) If val <=40 And val >30 Then Call bas4(arrbottom,arrtop,i,serietot, val,vallateral) If val <=50 And val >40 Then Call bas5(arrbottom,arrtop,i,serietot, val,vallateral) If val <=60 And val >50 Then Call bas6(arrbottom,arrtop,i,serietot, val,vallateral) If val <=70 And val >60 Then Call bas7(arrbottom,arrtop,i,serietot, val,vallateral) If val <=80 And val >70 Then Call bas8(arrbottom,arrtop,i,serietot, val,vallateral) If val <=90 And val >80 Then Call bas9(arrbottom,arrtop,i,serietot, val,vallateral)
43 Sub bas2(arrbottom,arrtop,i,serietot, val,vallateral) val = val -11 val=val/100
Dim scale: scale = 0.6-val ‘PRIMO ELEMENTO COMPONENTE ‘le coordinate dei punti dentro il quadrilatero -- dati i quad poi trovo le superfici ‘base superiore Dim a0z: a0z = array(0.6,0.6,0.6,0.6) Dim a0u: a0u = array(0,1,1,0) Dim a0v: a0v = array(0,0,0.3+val*2,0.3+val*2) Dim degA: degA = 1
‘cerchio superiore esterno Dim c0z: c0z = array(0.9 + val,0.9+ val,0.9+ val,0.9+ val) Dim c0u: c0u = array(b0u(0)+0.05,b0u(1)-0.05,b0u(2)-0.05,b0u(3)+0.05) Dim c0v: c0v = array(b0v(0)+0.05,b0v(1)+0.05,b0v(2)-0.05,b0v(3)-0.05) Dim degC: degC = 2
‘base Dim f0z: f0z = array(0,0,0,0) Dim f0u: f0u = array(0.1,0.9,0.9,0.1) Dim f0v: f0v = a0v Dim degF: degF = 1
‘il d è il cerchio superiore interno fatto dalla subroutine ‘cerchio base Dim e0z: e0z = array(0.2,0.2,0.2,0.2) Dim e0u: e0u = array(f0u(0)+0.05,f0u(1)-0.05,f0u(2)-0.05,f0u(3)+0.05) Dim e0v: e0v = array(f0v(0)+0.05,f0v(1)+0.05,f0v(2)-0.05,f0v(3)-0.05) Dim degE: degE = 2
‘cerchio intermedio Dim b0z: b0z = array(0.8 + val,0.8+ val,0.8+ val,0.8+ val) Dim b0u: b0u = array(a0u(0)+0.3-val*3,a0u(1)-0.3+val*2-val,a0u(2)-0.3+val*2-val,a0u(3)+0.3-val*3) Dim b0v: b0v = array(a0v(0),a0v(1)+0.05+val*3/2,a0v(2)-0.05,a0v(3)-0.05) Dim degB: degB = 2
Dim quadA0pt,quadB0pt,quadC0pt,quadD0pt,quadE0pt,quadF0pt
Call elementsurface(arrbottom,arrtop,a0z,a0u,a0v,b0z,b0u,b0v,c0z,c0u,c0v,e0z,e0u,e0v,f0z,f0u,f0v,quadA0pt,quadB0pt,quadC0pt,quadD0pt,quadE0pt,quadF 0pt,degA,degB,degC,degE,degF,scale) ‘per superficie laterale Call surflateral(quadA0pt,quadF0pt,vallateral) ‘SECONDO ELEMENTO COMPONENTE ‘le coordinate dei punti dentro il quadrilatero -- dati i quad poi trovo le superfici ‘base superiore
64
44
(43), (44) Ipotesi di pannello incor porato nel componente con sensibilità di aper ture e chiusure in relazione all’irraggiamento o ad altri parametri, da aper tura totale ad aper tura al 50%
65
Dim a1z: a1z = a0z Dim a1u: a1u = array(0,1,1,0) Dim a1v: a1v = array(a0v(3),a0v(2),1,1)
‘cerchio superiore esterno Dim c1z: c1z = c0z Dim c1u: c1u = array(b1u(0)+0.05,b1u(1)-0.05,b1u(2)-0.05,b1u(3)+0.05) Dim c1v: c1v = array(b1v(0)+0.05,b1v(1)+0.05,b1v(2)-0.05,b1v(3)-0.05)
‘base Dim f1z: f1z = array(0,0,0,0) Dim f1u: f1u = array(0.1,0.9,0.9,0.1) Dim f1v: f1v = a1v
‘il d è il cerchio superiore interno fatto dalla subroutine ‘cerchio base Dim e1z: e1z = e0z Dim e1u: e1u = array(f1u(0)+0.05,f1u(1)-0.05,f1u(2)-0.05,f1u(3)+0.05) Dim e1v: e1v = array(f1v(0)+0.05,f1v(1)+0.05,f1v(2)-0.05,f1v(3)-0.05)
‘cerchio intermedio Dim b1z: b1z = b0z Dim b1u: b1u = array(a1u(0)+0.1-val,a1u(1)-0.1-val,a1u(2)-0.15-val,a1u(3)+0.1-val) Dim b1v: b1v = array(a1v(0)+0.08+val,a1v(1)+val+0.05,a1v(2)-0.3+val,a1v(3))
Dim quadA1pt,quadB1pt,quadC1pt,quadD1pt,quadE1pt,quadF1pt
Call elementsurface(arrbottom,arrtop,a1z,a1u,a1v,b1z,b1u,b1v,c1z,c1u,c1v,e1z,e1u,e1v,f1z,f1u,f1v,quadA1pt,quadB1pt,quadC1pt,quadD1pt,quadE1pt,quadF 1pt,degA,degB,degC,degE,degF,scale) ‘per superficie laterale Call surflateral(quadA1pt,quadF1pt,vallateral) If vallateral = 0 Then Call surflateral(quadA1pt,quadE1pt,vallateral) If vallateral = 1 Or vallateral = 3 Then Call surflateral(quadA1pt,quadE1pt,vallateral) If vallateral = 1 Or vallateral = 3 Then Call surflateral(quadA0pt,quadE0pt,vallateral) If vallateral = 2 Then Call surflateral(quadA0pt,quadE0pt,vallateral) End Sub
45
Sub elementsurface(arrbottom, arrtop, a0z,a0u,a0v,b0z,b0u,b0v,c0z,c0u,c0v,e0z,e0u,e0v,f0z,f0u,f0v,ByRef quadA0pt,ByRef quadB0pt,ByRef quadC0pt,ByRef quadD0pt,ByRef quadE0pt,ByRef quadF0pt,degA,degB,degC,degE,degF,scale) Dim quadA0crv,quadB0crv,quadC0crv,quadD0crv,quadE0crv,quadF0crv Dim quadA0plane,quadB0plane,quadC0plane,quadD0plane,quadE0plane,quadF0plane
call CQuad(arrbottom,arrtop,a0z,a0u,a0v,quadA0pt,quadA0crv,quadA0plane,degA) call CQuad(arrbottom,arrtop,b0z,b0u,b0v,quadB0pt,quadB0crv,quadB0plane,degB) call CQuad(arrbottom,arrtop,c0z,c0u,c0v,quadC0pt,quadC0crv,quadC0plane,degC) call CQuad(arrbottom,arrtop,e0z,e0u,e0v,quadE0pt,quadE0crv,quadE0plane,degE) call CQuad(arrbottom,arrtop,f0z,f0u,f0v,quadF0pt,quadF0crv,quadF0plane,degF)
Call rhino.CurveSeam(quadA0crv,rhino.CurveClosestPoint(quadA0crv,rhino.Curvemidpoint(rhino.AddLine(quadA0pt(0),quadA0pt(1))))) ‘bordo interno del buco, ad una distanza fissa da b o con una maggiore chiusura Dim bar: bar = centerpoint(quadC0pt) quadD0crv = rhino.ScaleObject(quadC0crv,bar,array(scale,scale,scale),True) quadD0pt = rhino.CurvePoints(quadD0crv) quadD0plane = rhino.AddSrfPt(quadD0pt)
Call loftsurface(quadA0crv,quadB0crv,quadC0crv,quadD0crv,quadE0crv,quadF0crv) Call rhino.DeleteObjects(array(quadA0plane,quadB0plane,quadC0plane,quadE0plane,quadF0plane))
Call rhino.DeleteObjects(array(quadA0crv,quadB0crv,quadC0crv,quadD0crv,quadE0crv,quadF0crv))
End Sub End Sub Sub Pointsurface(quadA0pt,quadE0pt) Dim i For i = 0 To ubound(quadA0pt)-1 Call rhino.AddSrfPt(array(quadA0pt(i),quadA0pt(i+1),quadE0pt(i+1),quadE0pt(i))) Next Call rhino.AddSrfPt(array(quadA0pt(ubound(quadA0pt)),quadA0pt(0),quadE0pt(0),quadE0pt(ubound(quadA0pt)))) End Sub ‘CENTERPOINT: dato un array di punti ne trova il baricentro Function centerpoint(arrpts) Dim i Dim intpt: intpt = ubound(arrpts) Dim utot, vtot, ztot utot = 0
66
46
(45), (46) Ipotesi di pannello incor porato nel componente con sensibilità di aper ture e chiusure in relazione all’irraggiamento o ad altri parametri, da aper tura al 50% a chiusura totale
For i = 0 To intpt
67
Next
utot= arrpts(i)(0) + utot vtot= arrpts(i)(1) + vtot ztot= arrpts(i)(2) + ztot
‘ INTPT è il numero di punti MENO UNOOOOOOOOOO utot=utot/(1+intpt) vtot=vtot/(1+intpt) ztot=ztot/(1+intpt) centerpoint = array(utot,vtot,ztot)
End Function ‘QUAD: dati i livelli top e bottom, le distanze percentuali e gli array (con quattro spazi) per punti curve e piani me li restituisce sub CQuad (arrbottom,arrtop,zdist,udist,vdist,ByRef pts,ByRef crv,ByRef plane,degree) Dim i, arrtemp(), ctemp(2) For i = 0 To ubound(zdist) ReDim Preserve arrtemp(i) ctemp(0)=udist(i) ctemp(1)=vdist(i) ctemp(2)=zdist(i) arrtemp(i) = ctemp Next Dim zlevels zlevels = levels(arrbottom,arrtop,zdist) pts = definite(arrtemp,zlevels) End Sub
crv = rhino.AddCurve(array(pts(0),pts(1),pts(2),pts(3),pts(0)),degree) plane = rhino.AddSrfPt(pts)
47
‘LEVELS: dato tob, bottom e un array di distanze crea array di piani e loro curve Function levels(arrbottom,arrtop,dist) Dim i,arrtemp() For i = 0 To ubound(dist) ReDim Preserve arrtemp(i) arrtemp(i) = levelz(arrtop,arrbottom,dist(i)) Next levels = arrtemp End Function ‘LEVELZ: dato array top, array bottom, e distanza mi crea UN piano e livello Function levelz(L,L1,dist) Dim i,arrtemp() For i = 0 To ubound(L) ReDim Preserve arrtemp(i) Call vector(L1(i),L(i),dist,arrtemp(i)) Next levelz = arrtemp End Function ‘VECTOR: dati due punti e la percentuale mi crea il vettore intermedio Sub vector(a,a1,dist,ByRef ax) ax = rhino.VectorAdd(rhino.Vectorscale(rhino.VectorSubtract(a1,a),dist),a) End Sub ‘DEFINITE date coordinate uvz, insieme distanze u,v e livelli z da punti e curva che li unisce Function definite(arrcoord,zlevels) Dim i Dim arrpoints(),u,v,z For i = 0 To ubound(arrcoord) ReDim Preserve arrpoints(i) u= arrcoord(i)(0) v= arrcoord(i)(1) arrpoints(i) = point(zlevels(i),u,v) Next definite = arrpoints End Function ‘POINT: dato il livello, una percentuale x e una y mi dà il punto (togliere addpoint) Function point(arrlevel,U_,V_) Dim vec1,vec2,vecris vec1 = rhino.vectorsubtract(arrlevel(1),arrlevel(0)) vec1 = rhino.vectorscale(vec1,U_) vec1 = rhino.VectorAdd(vec1,arrlevel(0)) vec2 = rhino.vectorsubtract(arrlevel(2),arrlevel(3)) vec2 = rhino.vectorscale(vec2,U_) vec2 = rhino.VectorAdd(vec2,arrlevel(3))
68
48
(47), (48) Seconda ipotesi di pannello incor porato nel componente con sensibilità di aper ture e chiusure in relazione all’irraggiamento o ad altri parametri, da aper tura totale ad aper tura al 50%
69
vecris = rhino.VectorSubtract(vec2,vec1) vecris = rhino.VectorScale(vecris,V_) point = rhino.VectorAdd(vec1,vecris) ‘Call rhino.AddPoint(pt)
End Function ‘QUADBAR: data una serie di array trova il baricentro dei punti degli array e il baricentro generale Sub Quadbar(ptbar,arrquad) Dim i, arrtemp() For i = 0 To ubound(arrquad) ReDim Preserve arrtemp(i) arrtemp(i) = centerpoint(arrquad(i)) ‘Call rhino.AddPoint(arrtemp(i)) Next ‘Call rhino.AddCurve(arrtemp,1) ptbar = centerpoint(arrtemp) End Sub ‘CENTERPOINT: dato un array di punti ne trova il baricentro Function centerpoint(arrpts) Dim i Dim intpt: intpt = ubound(arrpts) Dim utot, vtot, ztot utot = 0
For i = 0 To intpt
Next
utot= arrpts(i)(0) + utot vtot= arrpts(i)(1) + vtot ztot= arrpts(i)(2) + ztot
‘ INTPT è il numero di punti MENO UNOOOOOOOOOO utot=utot/(1+intpt) vtot=vtot/(1+intpt) ztot=ztot/(1+intpt) centerpoint = array(utot,vtot,ztot)
49
End Function ‘QUAD: dati i livelli top e bottom, le distanze percentuali e gli array (con quattro spazi) per punti curve e piani me li restituisce Sub Quad (arrbottom,arrtop,zdist,udist,vdist,ByRef pts,ByRef crv,ByRef plane) Dim i, arrtemp(), ctemp(2) For i = 0 To ubound(zdist) ReDim Preserve arrtemp(i) ctemp(0)=udist(i) ctemp(1)=vdist(i) ctemp(2)=zdist(i) arrtemp(i) = ctemp Next Dim zlevels zlevels = levels(arrbottom,arrtop,zdist) pts = definite(arrtemp,zlevels) End Sub
crv = rhino.AddCurve(pts,1) plane = rhino.AddSrfPt(pts)
50
(49), (50) Seconda ipotesi di pannello incor porato nel componente con sensibilità di aper ture e chiusure in relazione all’irraggiamento o ad altri parametri, da aper tura al 50% a chiusura totale
70
71
S c r i p t # 0 8 - Pro l i fe r a z i o n e d i c o m p o n e n te a d e f i n i re u n a s u p e r f i c i e re a g e n te 2 L’ u l t i m a s o l u z i o n e p r e v e d e c h e l a s u p e r f i c i e s i a d i r e t t a m e n t e i n t e g r a t a n e l c o m p o n e n t e il quale si inser isce nella str uttura generale della superficie creando delle aper ture, d i va r i c a n d o, l a p e l l e d e l l a s t r u tt u r a e f u o r i u s c e n d o. Po s s i a m o ve d e re u n c a s o p i a n o e un caso spaziale. Nel momento in cui si raggiunge un valore minimo di irraggiamento la superficie si apre maggior mente e viceversa. Le connessioni agiscono non solo in maniera longitudinale ma anche trasversale, con la componente centrale sostanzialm e n t e c o m p r e s s a e l e m e m b r a n e l a t e r a l i e f r o n t a l i t e s e . Tu t t a l a c o m p o n e n t e v i e n e p o i integrata nel percorso generale.
51
Option Explicit ‘ . Script written by Vincenzo Reale ‘ . univin@libero.it ‘Script version martedì 2 febbraio 2010 18.12.16 Call main Sub Main() Call rhino.EnableRedraw(False) Dim punti,i,serie,serietot, a,b,c,d,e,f,g,h serietot=5 Dim arrtop, arrbottom For i = 0 To serietot a = array(0,i,0) b = array(a(0)+1,a(1),0) c = array(a(0)+1,a(1)+1,0) d = array(a(0),a(1)+1,0) arrbottom = array(a,b,c,d) e = array(a(0),a(1),a(2)+1) f = array(a(0)+1,a(1),a(2)+1) g = array(a(0)+1,a(1)+1,a(2)+1) h = array(a(0),a(1)+1,a(2)+1) arrtop = array(e,f,g,h) Dim arraold,arrbold,arrcold,arrdold, arrc2old,arrd2old,arrg2old,barold,quadlatcptold,quadlatdptold Dim curverold, curvelold dim val,vallateral Call cube(arrbottom,arrtop,i,serietot, val,vallateral,arraold,arrbold,arrcold,arrdold, arrc2old,arrd2old,arrg2old,barold,quadlatcptold,quadlatdptold,curverold, curvelold) Next Call rhino.EnableRedraw(True) End Sub
52
Sub cube(arrbottom,arrtop,i,serietot, val,vallateral,ByRef arraold,ByRef arrbold,ByRef arrcold,ByRef arrdold,ByRef arrc2old,ByRef arrd2old,ByRef arrg2old,ByRef barold,ByRef quadlatcptold,ByRef quadlatdptold, ByRef curverold,ByRef curvelold) If i <= 2 Then Call rhino.AddBox(array(arrtop(0),arrtop(1),arrtop(2),arrtop(3),arrbottom(0),arrbottom(1),arrbottom(2),arrbottom(3))) Else Call tessel02(arrbottom,arrtop,i-3,serietot-3,arraold,arrbold,arrcold,arrdold, arrc2old,arrd2old,arrg2old,barold,quadlatcptold,quadlatdptold,curvero ld, curvelold)
End If End Sub
Sub invertarray(ByRef arrbottom) Dim arrtemp arrtemp = arrbottom arrbottom(0)= arrtemp(3) arrbottom(1)=arrtemp(0) arrbottom(2)=arrtemp(1) arrbottom(3)=arrtemp(2) End Sub ‘COMPONENTE STRUTTURA Sub tessel02(arrbottom,arrtop,serie,serietot,ByRef arraold,ByRef arrbold,ByRef arrcold,ByRef arrdold,ByRef arrc2old,ByRef arrd2old,ByRef arrg2old,ByRef barold,ByRef quadlatcptold,ByRef quadlatdptold, ByRef curverold,ByRef curvelold) ‘le coordinate dei punti dentro il quadrilatero -- dati i quad poi trovo le superfici Dim az: az = array(0.8,0.8,0.8,0.8) Dim au: au = array(0.4,0.45,0.45,0.4) Dim av: av = array(0.5,0.5,0.6,0.6) Dim bz: bz = az Dim bu: bu = array(0.55,0.6,0.6,0.55) Dim bv: bv = av Call superior(az,au,av,bz,bu,bv,arrbottom,arrtop,serie,serietot)
72
53
(51),(52),(53) Definizione di un nuovo tipo di componente con pannellazione più strettamente incor porata che si disticca da una superficie completamente chiusa. In questo caso esempio di applicazione ad un elemento piano, visto in pianta (51), prospetto laterale (52), vista prospettica (53)
73
Dim cz: cz = array(0.3,0.3,0.4 ,0.4 ) Dim cu: cu = array(0,0,0,0) Dim cv: cv = array(0 ,0.1 ,0.1,0) Dim dz: dz = cz Dim du: du = array(1,1,1,1) Dim dv: dv = cv Dim ez: ez = array(0.1,0.15,0.25 ,0.25) Dim eu: eu = array(0.48,0.53,0.53,0.48) Dim ev: ev = array(1,1,1,1) Dim fz: fz = array(0.18,0.18,0.22,0.22) Dim fu: fu = eu Dim fv: fv = array(0,0,0,0) Dim gz: gz = array(0.2,0.2,0,0) ‘da invertire Dim gu: gu = array(0.45,0.55,0.55,0.45) Dim gv: gv = array(0.35 ,0.35 ,0.4 ,0.4) ‘da invertire ‘per superfici nella parte under Dim c2z: c2z = cz Dim c2u: c2u = cu Dim int: int= (cv(1)-cv(0))/3 Dim c2v: c2v = array(cv(0)+int,cv(1)-int,cv(2)-int,cv(3)+int) Dim d2z: d2z = cz Dim d2u: d2u = du Dim d2v: d2v = c2v Dim int2: int2 = (gz(2)-gz(1))/3 Dim g2z: g2z = gz ‘array(gz(0)+int2,gz(1)+int2,gz(2)-int2,gz(3)-int2) Dim g2u: g2u = gu Dim int3: int3 = (gv(2)-gv(1))/3 Dim g2v: g2v = gv ‘array(gv(0)+int3,gv(1)+int3,gv(2)-int3,gv(3)-int3) Dim incr: incr = (cz(2)-cz(0))*0.3 Dim latcz: latcz = array(cz(0)+incr,cz(1)+incr,cz(2)-incr,cz(3)-incr) Dim latcu: latcu = array(0,0,0,0) Dim latcv: latcv = array(cv(1),0.5 ,0.5 ,cv(2) ) Dim latdz: latdz = latcz Dim latdu: latdu = array(1,1,1,1) Dim latdv: latdv = latcv ‘per punta unica Dim atopz: atopz = array(2,2,2,2) Dim atopu: atopu = array(0.45,0.55,0.55,0.45) Dim atopv: atopv = array(0.5,0.5,0.6,0.6) Dim quadatoppt,quadatopcrv,quadatopplane ‘ per teso laterale staccato Dim quadApt,quadBpt,quadCpt,quadDpt,quadEpt,quadFpt,quadGpt, quadc2pt,quadd2pt,quadg2pt Dim quadAcrv,quadBcrv,quadCcrv,quadDcrv,quadEcrv,quadFcrv,quadGcrv,quadc2crv,quadd2crv,quadg2crv Dim quadAplane,quadBplane,quadCplane,quadDplane,quadEplane,quadFplane,quadGplane,quadc2plane,quadd2plane,quadg2plane Dim quadlatcpt,quadlatdpt Dim quadlatccrv,quadlatdcrv Dim quadlatcplane,quadlatdplane
54
Call quad(arrbottom,arrtop,az,au,av,quadApt,quadAcrv,quadAplane) Call quad(arrbottom,arrtop,bz,bu,bv,quadBpt,quadBcrv,quadBplane) Call quad(arrbottom,arrtop,cz,cu,cv,quadCpt,quadCcrv,quadCplane) Call quad(arrbottom,arrtop,dz,du,dv,quadDpt,quadDcrv,quadDplane) Call quad(arrbottom,arrtop,ez,eu,ev,quadEpt,quadEcrv,quadEplane) Call quad(arrbottom,arrtop,fz,fu,fv,quadFpt,quadFcrv,quadFplane) Call quad(arrbottom,arrtop,gz,gu,gv,quadGpt,quadGcrv,quadGplane) Call quad(arrbottom,arrtop,c2z,c2u,c2v,quadC2pt,quadC2crv,quadC2plane) Call quad(arrbottom,arrtop,d2z,d2u,d2v,quadD2pt,quadD2crv,quadD2plane) Call quad(arrbottom,arrtop,g2z,g2u,g2v,quadG2pt,quadG2crv,quadG2plane) Call quad(arrbottom,arrtop,atopz,atopu,atopv,quadAtoppt,quadAtopcrv,quadAtopplane)
‘ELEMENTI TESI LATERALI CHE IN QUESTO CASO SI TOCCANO Call quad(arrbottom,arrtop,latcz,latcu,latcv,quadlatCpt,quadlatCcrv,quadlatCplane) Call quad(arrbottom,arrtop,latdz,latdu,latdv,quadlatDpt,quadlatDcrv,quadlatDplane) Dim bar ‘TROVA IL BARICENTRO DI A B ED E Call quadbar(bar,array(quadApt,quadBpt,quadEpt)) Dim curvepass: curvepass=1 Dim degcurve: degcurve=2 Dim curves Dim linenewr,linenewl,curvenewr,curvenewl Call makesmoothcurves(bar,quadApt,quadBpt,quadCpt,quadDpt,quadEpt,quadFpt,quadGpt,quadC2pt,quadD2pt,quadG2pt,curvepass,degcurve,arraold, arrbold, arrcold, arrdold, arrc2old,arrd2old,arrg2old,barold,quadlatcptold,quadlatdptold,serie,serietot,quadlatcpt,quadlatdpt,linenewr,linenewl,curvenewr,curvenewl,quadatoppt)
‘PER PASSARE LA PUNTA AL PEZZO SUCCESSIVO arraold = quadApt arrbold = quadBpt arrcold = quadCpt arrdold= quadDpt arrc2old = quadC2pt arrd2old = quadD2pt arrg2old = quadG2pt barold = bar quadlatcptold = quadlatcpt quadlatdptold = quadlatdpt curverold = curvenewr curvelold = curvenewr
55
(54),(55) Due viste dello stesso tipo di componente applicato ad una superficie piana, da notare la variazione di aper tura e il sollevamento degli elementi r ispetto al piano di superficie
Call rhino.DeleteObjects(array( quadAplane,quadBplane,quadCplane,quadDplane,quadEplane,quadFplane,quadGplane,quadc2plane,quadd2plane,quadg2pl ane,quadlatCplane,quadlatDplane)) Call rhino.DeleteObjects(array(quadAcrv,quadBcrv,quadCcrv,quadDcrv,quadEcrv,quadFcrv,quadGcrv,quadc2crv,quadd2crv,quadg2crv,quadlatccrv,quadlatdc rv))
74
75
End Sub
Call rhino.deleteobjects(array(quadAtopcrv,quadAtopplane))
Sub superior(ByRef az,ByRef au,ByRef av,ByRef bz,ByRef bu,ByRef bv,arrbottom,arrtop,serie,serietot) Dim a3frontu,a3backu, b3frontu,b3backu a3frontu= 0.35 -0.05* serie a3backu = 0.4 -0.05* serie b3frontu= 1-a3frontu’0.7 ‘+0.05’*serie b3backu = 1-a3backu’0.65 ‘+0.05’*serie Dim difference: difference = a3backu-a3frontu Dim bdifference: bdifference = b3backu-b3frontu Dim abackz: abackz = array(az(0)+0.05*serie,az(1)+0.05*serie,az(2)+.1+0.05*serie,az(3)+.1+0.05*serie) Dim abacku: abacku = array(a3backu,a3backu+.1,a3backu+.1,a3backu) Dim abackv: abackv = array(0,0,0,0) Dim bbackz: bbackz = abackz Dim bbacku: bbacku = array(b3backu-.1,b3backu,b3backu,b3backu-.1) ‘controlla Dim bbackv: bbackv = array(0,0,0,0) Dim afrontz: afrontz = array(az(0)+0.05*(serie+1),az(1)+0.05*(serie+1),az(2)+.1+0.05*(serie+1),az(3)+.1+0.05*(serie+1)) Dim afrontu: afrontu = array(a3frontu,a3frontu+.1,a3frontu+.1,a3frontu) Dim afrontv: afrontv = array(1,1,1,1) Dim bfrontz: bfrontz = afrontz Dim bfrontu: bfrontu = array(b3frontu-.1,b3frontu,b3frontu,b3frontu-.1) Dim bfrontv: bfrontv = array(1,1,1,1) Call lines(au(3),av(3),a3frontu,afrontv(0),a3backu,abackv(0),1.5) Call lines(au(2),av(2),a3frontu+0.1,afrontv(0),a3backu+0.1,abackv(0),1.5) Call lines(au(0),av(0),a3frontu,afrontv(0),a3backu,abackv(0),2) Call lines(au(1),av(1),a3frontu+0.1,afrontv(0),a3backu+0.1,abackv(0),2) Call lines(bu(3),bv(3),b3frontu,bfrontv(0),b3backu,bbackv(0),1.5) Call lines(bu(2),bv(2),b3frontu-0.1,bfrontv(0),b3backu-0.1,bbackv(0),1.5) Call lines(bu(0),bv(0),b3frontu,bfrontv(0),b3backu,bbackv(0),2) Call lines(bu(1),bv(1),b3frontu-0.1,bfrontv(0),b3backu-0.1,bbackv(0),2) Dim atopz : atopz = array(az(0)+.1,az(1)+.1,az(2)+.1,az(3)+.1) Dim atopu : atopu = au Dim atopv : atopv = av Dim btopz : btopz = az Dim btopu : btopu = bu Dim btopv : btopv = bv Dim alatz: alatz = array(0.7,0.7,0.8,0.8) Dim alatu: alatu = array(0,0,0,0) Dim alatv: alatv = array(0,1,1,0) Dim blatz: blatz = array(0.7,0.7,0.8,0.8) Dim blatu: blatu = array(1,1,1,1) Dim blatv: blatv = array(0,1,1,0) Dim atoppt,abackpt,afrontpt,alatpt Dim atopcrv,abackcrv,afrontcrv,alatcrv Dim atopplane,abackplane,afrontplane,alatplane Dim btoppt,bbackpt,bfrontpt,blatpt Dim btopcrv,bbackcrv,bfrontcrv,blatcrv Dim btopplane,bbackplane,bfrontplane,blatplane Call quad(arrbottom,arrtop,atopz,atopu,atopv,atoppt,atopcrv,atopplane) Call quad(arrbottom,arrtop,abackz,abacku,abackv,abackpt,abackcrv,abackplane) Call quad(arrbottom,arrtop,afrontz,afrontu,afrontv,afrontpt,afrontcrv,afrontplane) Call quad(arrbottom,arrtop,alatz,alatu,alatv,alatpt,alatcrv,alatplane) Call quad(arrbottom,arrtop,btopz,btopu,btopv,btoppt,btopcrv,btopplane) Call quad(arrbottom,arrtop,bbackz,bbacku,bbackv,bbackpt,bbackcrv,bbackplane) Call quad(arrbottom,arrtop,bfrontz,bfrontu,bfrontv,bfrontpt,bfrontcrv,bfrontplane) Call quad(arrbottom,arrtop,blatz,blatu,blatv,blatpt,blatcrv,blatplane) Dim ptsuppz: ptsuppz = array (az(0)-.1,az(1)-.1,az(2)-.1,az(3)-.1) Dim ptsuppu: ptsuppu = array(abacku(0),bbacku(1),bfrontu(1),afrontu(0)) Dim ptsuppv: ptsuppv = array(0,0,1,1) Dim ptsupppt,ptsuppcrv,ptsuppplane Call quad(arrbottom,arrtop,ptsuppz,ptsuppu,ptsuppv,ptsupppt,ptsuppcrv,ptsuppplane) If serie > 0 Then Dim pt1: pt1 = abackpt(0) Dim pt2: pt2 = ptsupppt(0) Dim pt3: pt3 = afrontpt(0) Dim pt4: pt4 = ptsupppt(3) Dim crv1,crv2,crv3,crv4 crv1 = rhino.AddCurve(array(abackpt(3),pt1,alatpt(3)),2) crv2 = rhino.AddCurve(array(abackpt(0),pt2,alatpt(0)),2) crv3 = rhino.AddCurve(array(afrontpt(3),pt3,alatpt(2)),2) crv4 = rhino.AddCurve(array(afrontpt(0),pt4,alatpt(1)),2) Dim srf1,srf2 srf1= rhino.addloftsrf(array(crv1,crv3)) srf2= rhino.addloftsrf(array(crv2,crv4)) Call surfhole(srf1(0),srf2(0),4,5) pt1 = bbackpt(1) pt2 = ptsupppt(1) pt3 = bfrontpt(1) pt4 = ptsupppt(2)
76
56
57
58
(56),(57),(58) Lo steso tipo di elemento applicato ad un caso spaziale a definire una sor ta di arco. La striscia si compor ta ancora in tensegrità con elementi a membrana di collegamento tra una componente e l’altra e coniuga a questa impostazione la possibilità di variare la porosità della superficie.
crv1 = rhino.AddCurve(array(bbackpt(2),pt1,blatpt(3)),2) crv2 = rhino.AddCurve(array(bbackpt(1),pt2,blatpt(0)),2) crv3 = rhino.AddCurve(array(bfrontpt(2),pt3,blatpt(2)),2) crv4 = rhino.AddCurve(array(bfrontpt(1),pt4,blatpt(1)),2)
77
srf1= rhino.addloftsrf(array(crv1,crv3)) srf2= rhino.addloftsrf(array(crv2,crv4)) Call surfhole(srf1(0),srf2(0),4,5)
Dim quadapt,quadaplane,quadacrv,quadbpt,quadbplane,quadbcrv Call quad(arrbottom,arrtop,az,au,av,quadapt,quadaplane,quadacrv) Call quad(arrbottom,arrtop,bz,bu,bv,quadbpt,quadbplane,quadbcrv) Call rhino.addsrfpt(array(abackpt(0),abackpt(1),quadapt(1),quadapt(0))) Call rhino.addsrfpt(array(quadapt(3),quadapt(2),afrontpt(1),afrontpt(0))) Call rhino.AddPoint(bbackpt(1)) Call rhino.addsrfpt(array(bbackpt(0),bbackpt(1),quadbpt(0),quadbpt(1))) Call rhino.addsrfpt(array(quadbpt(3),quadbpt(2),bfrontpt(0),bfrontpt(1))) Call rhino.addsrfpt(array(abackpt(1),afrontpt(1),afrontpt(2),abackpt(2))) Call rhino.addsrfpt(array(bbackpt(0),bfrontpt(0),bfrontpt(3),bbackpt(3))) Call rhino.addsrfpt(array(abackpt(2),afrontpt(2),afrontpt(3),abackpt(3))) Call rhino.addsrfpt(array(bbackpt(3),bfrontpt(3),bfrontpt(2),bbackpt(2))) else
pt1 = abackpt(0) pt2 = ptsupppt(0) pt3 = afrontpt(0) pt4 = ptsupppt(3) crv1 = rhino.AddCurve(array(abackpt(3),pt1,alatpt(3)),2) crv2 = rhino.AddCurve(array(abackpt(0),pt2,alatpt(0)),2) crv3 = rhino.AddCurve(array(afrontpt(3),pt3,alatpt(2)),2) crv4 = rhino.AddCurve(array(afrontpt(0),pt4,alatpt(1)),2) srf1= rhino.addloftsrf(array(crv1,crv3)) srf2= rhino.addloftsrf(array(crv2,crv4)) Call surfhole(srf1(0),srf2(0),4,5) pt1 = bbackpt(1) pt2 = ptsupppt(1) pt3 = bfrontpt(1) pt4 = ptsupppt(2)
crv1 = rhino.AddCurve(array(bbackpt(2),pt1,blatpt(3)),2) crv2 = rhino.AddCurve(array(bbackpt(1),pt2,blatpt(0)),2) crv3 = rhino.AddCurve(array(bfrontpt(2),pt3,blatpt(2)),2) crv4 = rhino.AddCurve(array(bfrontpt(1),pt4,blatpt(1)),2)
End If
srf1= rhino.addloftsrf(array(crv1,crv3)) srf2= rhino.addloftsrf(array(crv2,crv4)) Call surfhole(srf1(0),srf2(0),4,5)
59
Call quad(arrbottom,arrtop,az,au,av,quadapt,quadaplane,quadacrv) Call quad(arrbottom,arrtop,bz,bu,bv,quadbpt,quadbplane,quadbcrv) Call rhino.addsrfpt(array(abackpt(0),abackpt(1),quadapt(1),quadapt(0))) Call rhino.addsrfpt(array(quadapt(3),quadapt(2),afrontpt(1),afrontpt(0))) Call rhino.AddPoint(bbackpt(1)) Call rhino.addsrfpt(array(bbackpt(0),bbackpt(1),quadbpt(0),quadbpt(1))) Call rhino.addsrfpt(array(quadbpt(3),quadbpt(2),bfrontpt(0),bfrontpt(1))) Call rhino.addsrfpt(array(abackpt(1),afrontpt(1),afrontpt(2),abackpt(2))) Call rhino.addsrfpt(array(bbackpt(0),bfrontpt(0),bfrontpt(3),bbackpt(3))) Call rhino.addsrfpt(array(abackpt(2),afrontpt(2),afrontpt(3),abackpt(3))) Call rhino.addsrfpt(array(bbackpt(3),bfrontpt(3),bfrontpt(2),bbackpt(2)))
Call rhino.DeleteObjects(array(atopcrv,abackcrv,afrontcrv,alatcrv,atopplane,abackplane,afrontplane,alatplane,btopcrv,bbackcrv,bfrontcrv,blatcrv,btopplane,bbackplane,b frontplane,blatplane,ptsuppcrv,ptsuppplane)) Call rhino.deleteobjects(array(quadaplane,quadacrv,quadbplane,quadbcrv)) End Sub Sub makesmoothcurves(bar,arrA,arrB,arrC,arrD,arrE,arrf,arrg,arrc2,arrd2,arrg2,pass,deg,arraold, arrbold, arrcold, arrdold, arrc2old,arrd2old,arrg2old,barold, quad1ptold ,quad2ptold,serie,serietot,quad1pt,quad2pt,ByRef linenewright,ByRef lineneleft, ByRef curvenewright, ByRef curvenewleft,quadatoppt) Dim arrtemp(1),relcurve,relcurve2
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ‘LATO DIETRO ABCD
‘ segmento quadrangolare in basso tra C e D Dim curveCDl : curveCDl = Curve(arrC(0),arrD(0),bar,pass,deg) ‘ CURVA DI RACCORDO! arrtemp(0) = join (curvecdl,array(arrC(3),arrC(0)),array(arrD(3),arrD(0))) Dim curveCDh : curveCDh = Curve(arrC(3),arrD(3),bar,pass,deg) arrtemp(1) = curveCDh Call rhino.AddEdgeSrf(arrtemp) ‘curva laterale tra C e D ‘segmento laterale sinistro AC basso Dim curveABl : curveABl = Curve(arrB(0),arra(1),bar,pass,deg) Dim loft1: loft1=curveabl relcurve = splitcurve(curveABl,curveCDh,bar) Dim curveAC : curveAC = Curve(arrA(0),arrC(2),bar,pass,deg) relcurve2 = splitcurve(curveAC,relcurve,rhino.CurveMidPoint(rhino.AddCurve(array(rhino.CurveMidPoint(curveac),rhino.CurveMidPoint(relcurve)),2))) arrtemp(1) = joincrv(curveAC(1),relcurve2,relcurve(1)) arrtemp(0)= rhino.JoinCurves(array(arrtemp(1),rhino.AddLine(arrC(2),arrC(3)))) Call rhino.AddEdgeSrf(array(arrtemp(0)(0),curvecdh(0)))
‘segmento laterale sinistro AC alto arrtemp(1) = joincrv(curveAC(0),relcurve2,relcurve(0)) arrtemp(0)= rhino.JoinCurves(array(arrtemp(1),rhino.AddLine(arrA(0),arra(1))))
78
60
(59), (60) viste tridimensionali della stessa componente.
79
Call rhino.AddEdgeSrf(array(arrtemp(0)(0),curveABl(1)))
‘segmento laterale destro BD basso Dim curveBD : curveBD = Curve(arrB(1),arrD(2),bar,pass,deg) curveABl = Curve(arrB(0),arra(1),bar,pass,deg) curveCDh = Curve(arrC(3),arrD(3),bar,pass,deg) relcurve = splitcurve(curveABl,curveCDh,bar) relcurve2 = splitcurve(curveBD,relcurve,rhino.CurveMidPoint(rhino.AddCurve(array(rhino.CurveMidPoint(curveBD),rhino.CurveMidPoint(relcurve)),2))) arrtemp(1) = joincrv(curveBD(1),relcurve2,relcurve(1)) arrtemp(0)= rhino.JoinCurves(array(arrtemp(1),rhino.AddLine(arrD(2),arrD(3)))) Call rhino.AddEdgeSrf(array(arrtemp(0)(0),curvecdh(1)))
80
‘segmento laterale destro BD alto arrtemp(1) = joincrv(curveBD(0),relcurve2,relcurve(0)) arrtemp(0)= rhino.JoinCurves(array(arrtemp(1),rhino.AddLine(arrB(0),arrB(1)))) Call rhino.AddEdgeSrf(array(arrtemp(0)(0),curveABl(0))) ‘’’’’’’’’’’’’’’’’’’’’’’’ FINE PARTE DIETRO TUTTA ‘’’’ PARTE SOSTENENTE Dim surfs1(1),surfs2(1) Dim curveleft,curveright ‘parte sotto e bordi sopra Dim first,second,line ‘per curva sopra divisione giusta parte sostenente dietro Dim tempcurve: tempcurve = curveCDl Dim sostenentealtosx,sostenentealtodx, tempcurve2 Dim tempdomain: tempdomain=rhino.curvedomain(tempcurve) Dim temparray1,temparray2 temparray1 =(tempdomain(1)-tempdomain(0))/2-(tempdomain(1)-tempdomain(0))/80 ‘deve esserci lo stesso valore più grande più grande fessura temparray2 = (tempdomain(1)-tempdomain(0))/2+(tempdomain(1)-tempdomain(0))/80 tempcurve2 = rhino.splitcurve(tempcurve,temparray1,False) sostenentealtosx = tempcurve2(0) tempcurve2 = rhino.splitcurve(tempcurve,temparray2,False) sostenentealtodx = tempcurve2(1) Dim linea, lineb linea = rhino.SplitCurve(tempcurve,temparray1,False) lineb = rhino.SplitCurve(tempcurve,temparray2,False) ‘’’’’’’’ Dim udomain udomain=rhino.curvedomain(curveCDl) Dim coordfirst: coordfirst = (udomain(1)-udomain(0))/2 Dim curvemidpoint: curvemidpoint = rhino.EvaluateCurve(curveCDl,coordfirst)
‘Call definecurve(sostenentedavantisx) line= rhino.addline(arrg(2),arrg(3)) first=rhino.AddLine(arrg(3),rhino.CurveMidPoint(line)) second= sostenentedavantisx surf3= rhino.AddLoftSrf(array(first,second),,,2) first=rhino.AddLine(rhino.CurveMidPoint(line),arrg(2)) second= sostenentedavantidx surf4= rhino.AddLoftSrf(array(first,second),,,2)
‘sinistra Dim scalehole: scalehole=array(0.5,0.5,0.5) Call makeholes (surf1(0), surf3(0), scalehole) Call makeholes (surf2(0), surf4(0), scalehole) If serie > 0 Then
End If
Call threeedge5 (arrg,arrAold,arrBold,barold,pass,deg,1,0,2,3,2,3,curveleft,curveright,leftline,rightline) ‘PARTE SUPERIORE FRONTALE Call threeedge4 (arrg,arrdold,arrbold,barold,pass,deg,1,2,2,1,2,1,surfs1,quad2ptold,serie,serietot) ‘PARTE LATERALE DESTRA TESA Call threeedge4 (arrg,arrcold,arraold,barold,pass,deg,0,3,2,1,3,0,surfs2,quad1ptold,serie,serietot) ‘PARTE LATERALE SINISTRA TESA Call threeedge2 (arrg,arrcold,arrdold,arrc2old,arrd2old,barold,pass,deg,1,0,0,1,1,0,arrc,arrd) ‘PARTE INFERIORE
If serie = serietot Then
Call threeedge (arre,arrA,arrB,bar,pass,deg,2,3,2,3,2,3) ‘PARTE SUPERIORE ULTIMA VERTEBRA Call threeedge4 (arre,arrd,arrb,bar,pass,deg,2,1,2,1,2,1,surfs1,quad2pt,serie,serietot) ‘PARTE LATERALE DESTRA Call threeedge4 (arre,arrc,arra,bar,pass,deg,3,0,2,1,3,0,surfs2,quad1pt,serie,serietot) ‘PARTE LATERALE SINISTRA Call threeedge2 (arre,arrc,arrd,arrc2,arrd2,bar,pass,deg,1,0,0,1,1,0,arrc,arrd,) ‘PARTE INFERIORE ULTIMA VERTEBRA End If If serie > 0 Then curvenewright = curveright curvenewleft = curveleft End If linenewright = rightline lineneleft = leftline End Sub Sub makeholes(ByRef surf1,ByRef surf3,scalehole) Dim bord1,bord2,bord3,bord4
‘lato posteriore Dim centroid: centroid = rhino.SurfaceAreaCentroid(surf1) Dim centroiduv: centroiduv = rhino.SurfaceClosestPoint(surf1,centroid(0)) bord1=Rhino.DuplicateSurfaceBorder(surf1) bord2=rhino.ScaleObject(bord1(0),Rhino.SurfaceAreaCentroid(surf1)(0),scalehole,True) Call Rhino.RebuildCurve (bord2,4 ,4) Dim project1: project1=Rhino.ProjectCurveToSurface (bord2, surf1, rhino.SurfaceNormal(surf1,centroiduv)) Call rhino.AddLoftSrf(array(bord1(0),project1(0)),,,2) Call rhino.DeleteObject(surf1)
‘sotto udomain= rhino.CurveDomain(line) coordfirst= (udomain(1)-udomain(0))/2+(udomain(1)-udomain(0))/20 ‘qui per diminuire intervallo in basso più grande denominatore più piccolo spazio Dim firstendpoint: firstendpoint = rhino.EvaluateCurve(line,coordfirst) Dim first2: first2 = rhino.AddLine(arrg2(0),firstendpoint) second= curvecdl(0)
‘lato anteriore centroid = rhino.SurfaceAreaCentroid(surf3) centroiduv = rhino.SurfaceClosestPoint(surf3,centroid(0)) bord3=Rhino.DuplicateSurfaceBorder(surf3)
‘sopra udomain= tempdomain coordfirst= (udomain(1)-udomain(0))/2+(udomain(1)-udomain(0))/10 ‘più grande denominatore più grande spazio minimo è però due second=linea surf1= rhino.AddLoftSrf(array(first2,sostenentealtosx),,,2) Dim leftline: leftline = rhino.AddLine(rhino.CurveendPoint(first2),rhino.CurveendPoint(second(0)))
End Sub
Call rhino.AddLoftSrf(array(bord3(0),project2(0)),,,,0)
‘PARTE SOSTENENTE DIETRO DESTRA udomain= rhino.CurveDomain(line) coordfirst= (udomain(1)-udomain(0))/2-(udomain(1)-udomain(0))/20 ‘più grande denominatore più piccolo intervallo in basso Dim firststartpoint: firststartpoint = rhino.EvaluateCurve(line,coordfirst) Dim first3: first3 = rhino.AddLine(arrg2(1),firststartpoint) second= curvecdl(1) udomain= tempdomain coordfirst= (udomain(1)-udomain(0))/2-(udomain(1)-udomain(0))/3 ‘più piccolo denominatore più grande intervallo in alto max 20 STRANO!!! second=lineb Call rhino.reversecurve(first3) surf2= rhino.AddLoftSrf(array(first3,sostenentealtodx),,,2) Dim rightline: rightline = rhino.AddLine(rhino.CurvestartPoint(first3),rhino.CurvestartPoint(sostenentealtodx))
Sub lines(ByRef au,ByRef av,afrontu,afrontv,abacku,abackv,division)
curvecdl = rhino.splitcurve(curveCDl,coordfirst,False) Dim curveb : curveB = rhino.AddLine(arrg2(3),arrg2(2)) Dim borda : borda = rhino.AddLine(arrg2(3),rhino.curvestartpoint(curveCDl(0))) Dim bordb : bordb = rhino.AddLine(arrg2(2),rhino.curveendpoint(curveCDl(1))) Dim surf1,surf2,surf3,surf4 Dim mid,break,centr ‘PARTE SOSTENENTE DIETRO SINISTRA ‘sostituire arrg con arrg2 a seconda di quello che pare meglio line= rhino.addline(arrg2(1),arrg2(0))
‘’’’ ancora parte sostenente DAVANTI Dim curveCD22l, sostenentedavanti,sostenentedavantisx,sostenentedavantidx curveCD22l = Curve(arrC2(1),arrD2(1),bar,pass,deg) udomain=rhino.curvedomain(curveCD22l) coordfirst = (udomain(1)-udomain(0))/2 sostenentedavanti = rhino.splitcurve(curvecd22l,coordfirst,False) sostenentedavantisx= sostenentedavanti(0) sostenentedavantidx = sostenentedavanti(1)
bord4=rhino.ScaleObject(bord3(0),Rhino.SurfaceAreaCentroid(surf3)(0),scalehole,True) Call Rhino.RebuildCurve (bord4,4 ,4) Dim project2: project2=Rhino.ProjectCurveToSurface (bord2, surf3, rhino.SurfaceNormal(surf3,centroiduv))
‘collegamento tra i lati Call rhino.AddLoftSrf(array(project1(0),project2(0)),,,,0) Call rhino.DeleteObject(surf3)
Dim pt2: pt2 = array (afrontu,afrontv,0) Dim pt1: pt1 = array (abacku,abackv,0) Dim line line= rhino.AddLine(pt1,pt2) Dim x : x= 0 Dim y : y= (pt2(1)-pt1(1))/division + pt1(1) Dim pt3: pt3= array(x,y,0) x = (pt1(0)-pt2(0))*(pt2(1)-pt3(1)) / (pt2(1)-pt1(1)) + pt2(0) pt3= array(x,y,0) Call rhino.AddPoint(pt3) Call rhino.addline(pt2,pt3) au = pt3(0) av = pt3(1)
End Sub
81
Function makesmoothcurves2(bar,arrA,arrB,arrC,arrD,arrE,arrF,arrG,arrH,arrA2,arrB2,arrC2,arrD2,pass,deg,arrAold,arrBold,arraHold,arrbHold,serie,serietot) Dim arrtemp(1),surf1,surf2,surf3,surf4
Dim curveEAl : curveEAl = RHINO.ADDCURVE(array(arrE(1),arrA2(0),arrA(0)),deg) Dim curveEAh : curveEAh = RHINO.ADDCURVE(array(arrE(2),arrA2(3),arrA(3)),deg) Dim curveFBl : curveFBl = RHINO.ADDCURVE(array(arrF(1),arrB2(1),arrB(1)),deg) Dim curveFBh : curveFBh = RHINO.ADDCURVE(array(arrF(2),arrB2(2),arrB(2)),deg) Dim curveEDl : curveEDl = RHINO.ADDCURVE(array(arrE(0),arrD2(0),arrD(0)),deg) Dim curveEDh : curveEDh = RHINO.ADDCURVE(array(arrE(3),arrD2(3),arrD(3)),deg) Dim curveFCl : curveFCl = RHINO.ADDCURVE(array(arrF(0),arrC2(1),arrC(1)),deg) Dim curveFCh : curveFCh = RHINO.ADDCURVE(array(arrF(3),arrC2(2),arrC(2)),deg) Call rhino.AddLoftSrf(array(curveeal,curveeah)) Call rhino.AddLoftSrf(array(curvefbl,curvefbh)) Call rhino.AddLoftSrf(array(curveedl,curveedh)) Call rhino.AddLoftSrf(array(curvefcl,curvefch)) Dim lineAGh: lineAGh= rhino.AddLine(arrA(3),arrG(3)) Dim lineBGh: lineBGh= rhino.AddLine(arrB(2),arrG(2)) Dim lineAGl: lineAGl= rhino.AddLine(arrA(0),arrG(0)) Dim lineBGl: lineBGl= rhino.AddLine(arrB(1),arrG(1)) Dim lineDHh: lineDHh= rhino.AddLine(arrd(3),arrh(3)) Dim lineCHh: lineCHh= rhino.AddLine(arrc(2),arrh(2)) Dim lineDHl: lineDHl= rhino.AddLine(arrd(0),arrh(0)) Dim lineCHl: lineCHl= rhino.AddLine(arrc(1),arrh(1)) ‘sotto arrtemp(0)= rhino.AddCurve(array(arrE(1),arrAold(1),arrG(0),arra(0)),1) arrtemp(1) = curveEAl Call rhino.AddEdgeSrf(arrtemp) arrtemp(0)= rhino.AddCurve(array(arrF(1),arrBold(0),arrG(1),arrB(1)),1) arrtemp(1) = curveFBl Call rhino.AddEdgeSrf(arrtemp)
arrtemp(0)= rhino.AddCurve(array(arrE(0),arrAold(2),arrH(0),arrD(0)),1) arrtemp(1) = curveEDl Call rhino.AddEdgeSrf(arrtemp) arrtemp(0)= rhino.AddCurve(array(arrF(0),arrBold(3),arrH(1),arrC(1)),1) arrtemp(1) = curveFCl Call rhino.AddEdgeSrf(arrtemp)
arrtemp(0)= rhino.AddCurve(array(arrAold(1),arrAold(2),arrH(0),arrG(0)),1) arrtemp(1) = rhino.AddLine(arrG(0),arrAold(1)) surf1= rhino.AddEdgeSrf(arrtemp) arrtemp(0)= rhino.AddCurve(array(arrBold(0),arrBold(3),arrH(1),arrG(1)),1) arrtemp(1) = rhino.AddLine(arrG(1),arrBold(0)) surf3= rhino.AddEdgeSrf(arrtemp)
arrtemp(0)= rhino.AddCurve(array(arrE(3),arrAhold(2),arrH(3),arrD(3)),1) arrtemp(1) = curveEDh Call rhino.AddEdgeSrf(arrtemp) arrtemp(0)= rhino.AddCurve(array(arrF(3),arrBhold(3),arrH(2),arrC(2)),1) arrtemp(1) = curveFCh Call rhino.AddEdgeSrf(arrtemp)
arrtemp(0)= rhino.AddCurve(array(arrAhold(1),arrAhold(2),arrH(3),arrG(3)),1) arrtemp(1) = rhino.AddLine(arrG(3),arrAhold(1)) surf2 = rhino.AddEdgeSrf(arrtemp) arrtemp(0)= rhino.AddCurve(array(arrBhold(0),arrBhold(3),arrH(2),arrG(2)),1) arrtemp(1) = rhino.AddLine(arrG(2),arrBhold(0)) surf4 = rhino.AddEdgeSrf(arrtemp)
Call surfhole(surf1,surf2,serie,serietot) Call surfhole(surf3,surf4,serie,serietot)
82
arrtemp(0)= rhino.AddCurve(array(arrA(0),arrG(0),arrG(1),arrB(1)),1) arrtemp(1) = rhino.AddLine(arrA(0),arrB(1)) Call rhino.AddEdgeSrf(arrtemp) arrtemp(0)= rhino.AddCurve(array(arrD(0),arrH(0),arrH(1),arrC(1)),1) arrtemp(1) = rhino.AddLine(arrD(0),arrC(1)) Call rhino.AddEdgeSrf(arrtemp)
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ‘SOPRA arrtemp(0)= rhino.AddCurve(array(arrE(2),arrAhold(1),arrG(3),arra(3)),1) arrtemp(1) = curveEAh Call rhino.AddEdgeSrf(arrtemp) arrtemp(0)= rhino.AddCurve(array(arrF(2),arrBhold(0),arrG(2),arrB(2)),1) arrtemp(1) = curveFBh surf2 = rhino.AddEdgeSrf(arrtemp)
arrtemp(0)= rhino.AddCurve(array(arrA(3),arrG(3),arrG(2),arrB(2)),1) arrtemp(1) = rhino.AddLine(arrA(3),arrB(2)) Call rhino.AddEdgeSrf(arrtemp) arrtemp(0)= rhino.AddCurve(array(arrD(3),arrH(3),arrH(2),arrC(2)),1) arrtemp(1) = rhino.AddLine(arrD(3),arrC(2)) Call rhino.AddEdgeSrf(arrtemp)
Call Rhino.CurrentLayer (“livello 01”)
Call Rhino.CurrentLayer (“Default”)
End Function Sub surfhole(ByRef surf1,ByRef surf2,serie,serietot) Dim bord1,bord2,bord3,bord4 Dim scale: scale =array(0.2+0.6*serie/serietot,0.2+0.6*serie/serietot,0.2+0.6*serie/serietot) bord1=Rhino.DuplicateSurfaceBorder(surf1) bord2=rhino.ScaleObject(bord1(0),Rhino.SurfaceAreaCentroid(surf1)(0),scale,True) Call Rhino.RebuildCurve (bord2 , 4 , 5)
Call rhino.AddLoftSrf(array(bord1(0),bord2)) Call rhino.DeleteObject(surf1) bord3=Rhino.DuplicateSurfaceBorder(surf2) bord4=rhino.ScaleObject(bord3(0),Rhino.SurfaceAreaCentroid(surf2)(0),scale,True) Call Rhino.RebuildCurve (bord4,4 ,4)
Call rhino.AddLoftSrf(array(bord3(0),bord4)) Call rhino.DeleteObject(surf2) Call rhino.AddLoftSrf(array(bord2,bord4)) End Sub Sub surfhole4(ByRef surf1,ByRef surf2,serie,serietot) Dim bord1,bord2,bord3,bord4 Dim scale: scale =array(0.2+0.6*serie/serietot,0.2+0.6*serie/serietot,0.2+0.6*serie/serietot) bord1=Rhino.DuplicateSurfaceBorder(surf1) bord2=rhino.ScaleObject(bord1(0),Rhino.SurfaceAreaCentroid(surf1)(0),scale,True) Call Rhino.RebuildCurve (bord2 , 4 , 5)
Call rhino.AddLoftSrf(array(bord1(0),bord2)) Call rhino.DeleteObject(surf1)
End Sub
Call rhino.AddLoftSrf(array(bord3(0),bord4)) Call rhino.DeleteObject(surf2)
bord3=Rhino.DuplicateSurfaceBorder(surf2) bord4=rhino.ScaleObject(bord3(0),Rhino.SurfaceAreaCentroid(surf2)(0),scale,True) Call Rhino.RebuildCurve (bord4,4 ,4)
Call rhino.AddLoftSrf(array(bord2,bord4))
Sub quadsurface(quad1,quad2) Dim i For i = 0 To 2 Call rhino.AddSrfPt(array(quad1(i),quad1(i+1),quad2(i+1),quad2(i))) Next Call rhino.AddSrfPt(array(quad1(0),quad1(3),quad2(3),quad2(0))) End Sub Sub threeedge3 (arrE,arrA,arrB,bar,pass,deg,e2,e3,a2,a3,b2,b3,ByRef surflat,quadpt,serie,serietot)
Dim curveAbh : curveAbh = Curve(arrA(2),arrb(b3),bar,pass,deg)
Dim curveAE: curveAE = Curve(arrE(e3),arra(a3),bar,pass,deg) Dim curveBE: curveBE = Curve(arrb(b2),arrE(e2),bar,pass,deg) Dim curveAE2: curveAE2= Curve(arrE(e2),arra(a2),bar,pass,deg)
Dim curveAEpt1: curveAEpt1 = Curve(pte1,pta1,bar,pass,deg) Dim curveAEpt2: curveAEpt2 = Curve(pte2,pta2,bar,pass,deg)
‘ Dim ver Dim s1,s2
Dim pta1,pta2,pte1,pte2 Call vector(arra(a3),arra(a2),0.3,pta1) Call vector(arra(a3),arra(a2),0.7,pta2) Call vector(arrE(e3),arrE(e2),0.3,pte1) Call vector(arrE(e3),arrE(e2),0.7,pte2)
Call rhino.AddLoftSrf(array(curveaept1,curveae)) ‘call rhino.AddLoftSrf(array(curveaept2,curveae2)) ‘Dim curvequade1:curvequade1= Curve(arrE(e3),quadpt(1),bar,1,9) Dim curvequade1:curvequade1= rhino.AddLine(pte1,quadpt(1)) Dim curvequade2:curvequade2= rhino.AddLine(pte2,quadpt(2)) Call rhino.AddSrfPt(array(pte1,quadpt(1),quadpt(2),pte2)) Dim curvequada1:curvequada1= rhino.AddLine(pta1,quadpt(0)) Dim curvequada2:curvequada2= rhino.AddLine(pta2,quadpt(3)) Call rhino.AddSrfPt(array(pta1,quadpt(0),quadpt(3),pta2)) Dim arrtemp(1)
83
arrtemp(0)=rhino.JoinCurves(array(curveaept1,l1),False)
Dim relcurve,relcurve2 ‘parte sinistra davanti BE
relcurve= splitcurve(curveAbh,curveBE,rhino.CurveMidPoint(rhino.AddCurve(array(rhino.CurveMidPoint(curveBE),rhino.CurveMidPoint(curveabh)),2))) arrtemp(0) = joincrv(curveBe(0),relcurve,rhino.AddLine(arrb(b3),arrb(b2))) arrtemp(1) = curveabh(1) Call rhino.AddEdgeSrf(arrtemp) curveBE = Curve(arrb(b2),arrE(e2),bar,pass,deg) ‘’call rhino.addpoint(rhino.CurveMidPoint(curveBE))
Dim split1: split1 = rhino.SplitCurve(curveAEpt2,rhino.curveclosestpoint(curveAEpt2,rhino.CurveMidPoint(curveBE))) ‘’call rhino.addpoint(rhino.curvestartpoint(split1(1))) arrtemp(0)= rhino.JoinCurves(array(rhino.AddLine(rhino.curvestartpoint(split1(1)),rhino.CurveMidPoint(curveBE)),split1(1),rhino.AddLine(pta2,arra(a2)))) arrtemp(1)=arrtemp(0)(0) Dim split2:split2=rhino.SplitCurve(arrtemp(1),curveclosestpoint(arrtemp(1),rhino.CurveMidPoint(split1(1))))
End Sub
Call rhino.AddEdgeSrf(array(arrtemp(0)(0),bor2(0)))
curveAbh = Curve(arra(a2),arrb(b3),bar,pass,deg) curveBE = Curve(arrb(b2),arrE(e2),bar,pass,deg) relcurve= splitcurve(curveAbh,curveBE,rhino.CurveMidPoint(rhino.AddCurve(array(rhino.CurveMidPoint(curveBE),rhino.CurveMidPoint(curveabh)),2))) ‘ ‘call rhino.addpoint(rhino.curveendpoint(curveabh(0))) l1= rhino.AddLine(rhino.curveendpoint(curveabh(0)),rhino.curveendpoint(split2(0))) Dim bor1: bor1=rhino.JoinCurves(array(rhino.AddLine(arra(a2),pta2),split2(1),l1)) Dim bor2: bor2= curveabh(0) Call rhino.AddEdgeSrf(array(bor1(0),bor2)) curveAbh = Curve(arra(a2),arrb(b3),bar,pass,deg) curveBE = Curve(arrb(b2),arrE(e2),bar,pass,deg) bor1=rhino.JoinCurves(array(rhino.addline(rhino.curvestartpoint(split2(1)),rhino.curvemidpoint(curveAbh)),split2(0))) bor2= rhino.addline(rhino.curvemidpoint(curveAbh),rhino.curvemidpoint(curvebe)) Call rhino.AddEdgeSrf(array(bor1(0),bor2)) l1=rhino.AddLine(rhino.curvestartpoint(split1(1)),rhino.CurveMidPoint(curveBE)) Dim l2: l2=rhino.AddLine(pte2,arrE(e2)) curveAEpt2 = Curve(pte2,pta2,bar,pass,deg) bor1=rhino.SplitCurve(curvebe,rhino.CurveClosestPoint(curvebe,rhino.CurveMidPoint(curveBE))) arrtemp(0)= rhino.JoinCurves(array(l2,bor1(1),l1)) bor2=rhino.SplitCurve(curveAEpt2,rhino.CurveClosestPoint(curveAEpt2,rhino.CurvestartPoint(arrtemp(0)(0))))
Sub surfhole2(ByRef surf1,ByRef surf2,serie,serietot) Dim bord1,bord2,bord3,bord4 Dim scale: scale= 0.2+0.6*serie/serietot bord1=Rhino.DuplicateSurfaceBorder(surf1) bord2=rhino.ScaleObject(bord1(0),Rhino.SurfaceAreaCentroid(surf1)(0),array(scale,scale,scale),True) Call Rhino.RebuildCurve (bord2,4 ,4) Call rhino.AddLoftSrf(array(bord1(0),bord2)) Call rhino.DeleteObject(surf1) bord3=Rhino.DuplicateSurfaceBorder(surf2) bord4=rhino.ScaleObject(bord3(0),Rhino.SurfaceAreaCentroid(surf2)(0),array(scale,scale,scale),True) Call Rhino.RebuildCurve (bord4,4 ,4) Call rhino.AddLoftSrf(array(bord3(0),bord4)) Call rhino.DeleteObject(surf2) Call Rhino.ReverseCurve (bord2 ) Call Rhino.CurveSeam (bord4, rhino.curveclosestpoint(bord4,rhino.CurveStartPoint(bord2))) Call rhino.AddLoftSrf(array(bord2,bord4)) End Sub Function curve(A,B,C,pass,deg) Dim i, midAB, midAC, midBC midAB = centerpoint(array(A,B)) For i = 0 To pass midAB = centerpoint(array(midAB,C)) Next If pass <> 0 Then For i = 0 To pass-1 midAC = centerpoint(array(A,C)) midBC = centerpoint(array(B,C)) Next curve = rhino.AddCurve(array(A,midAC,midAB,midBC,B),deg) Else curve = rhino.AddCurve(array(A,C,B),2) End If End Function Function curve2(A,B,B2,C,pass,deg) Dim i, midAB, midAC, midBC midAB = centerpoint(array(A,B)) For i = 0 To pass midAB = centerpoint(array(midAB,C)) Next curve2 = rhino.AddCurve(array(A,C,B),2) End Function
84
85
Po n te l u n g o e Pa rc o d e i P i n i Interazioni ed eleganza
86
87
La definizione del progetto par te dalle esigenze emerse dal Bando Iceberg 2008 c h e h a c o m e a re a d i d e fi n i z i o n e l a zo n a d i Po n te l u n g o, a l l a p e r i fe r i a d i B o l o gna. Nel bando si sottolinea come il Piano str utturale comunale abbia selezionato una serie di luoghi centrali par ticolar mente rilevanti per garantire e accrescere l’abitabilità e la vivibilità di Bologna alla scala locale di quar tiere. Le “centralità” sono per il Psc “spazi costr uiti e non, caratter izzati da multifunzionalità, da facile accessibilità pedonale, ciclabile e con traspor to pubblico, frequentato liberamente da una pluralità di utenti, spesso caratter izzato da edifici o manufatti di v a l o r e s t o r i c o , t e s t i m o n i a l e e a r c h i t e t t o n i c o c h e r e a l i z z a n o i s t a n z e d i i d e n t i t à ”. ( 1 )
All’interno il
piano
delle
dedica
strategie specifica
per
la
riqualificazione
attenzione
al
sistema
di
della
zona
spazi
che,
di
Po n te l u n g o,
par tendo
dalla
via Emilia, e dal borgo stor ico, comprende la stazione Sfm e il Parco dei Pini.
61
L’ i n s i e m e d i s p a z i a p e r t i , s t r u t t u r e e s e r v i z i c h e c a r a t t e r i z z a q u e s t a a r e a c o s t i tuisce
un
punto
di
r ifer imento,
una
potenziale
centralità,
per
tutta
la
zona.
Dal punto di vista nor mativo il Piano Str utturale individua la centralità di progetto n e l l ’ a r t i c o l o 3 8 , s c h e d a “ Po n te l u n g o” p reve d e n d o l a “ q u a l i fi c a z i o n e d e l l a c e n t r a l ità costituita dal sistema di funzioni dato dalla fer mata Sfm, dall’ufficio postale e dal Parco dei Pini, attraverso il miglioramento delle connessioni, la qualità dei percorsi e degli spazi pubblici, l’integrazione dell’offer ta di sosta e attraverso la q u a l i f i c a z i o n e d e g l i s p a z i d i a c c e s s o a l p a r c o ”. P r e v e d e i n o l t r e i l “ m i g l i o r a m e n t o dell’accessibilità e della connessione al Reno dal Parco dei Pini, integrando nel p r o g e t t o l a v a l o r i z z a z i o n e d e l l ’ e d i f i c i o c h e o s p i t a i Te a t r i d i V i t a ”. Pe r c o n s o l i d a re e r a ffo r z a re l a f u n z i o n e d i c e n t r a l i t à l a p ro p o s t a d i q u a l i fi c a z i o n e deve dunque prevedere di inter venire per migliorare sia la qualità degli spazi pubblici presenti sia l’accessibilità , appunto l’intercomunicazione con le altre zone, in par ticolare in relazione alla via Emilia a sud e al parco del Reno a est Ve n g o n o c o s ì d e f i n i t i u n a s e r i e d i o b i e t t i v i c h e i l p r o g e t t o d e v e r a g g i u n g e r e q u a l i l a c o n t i n u i t à , r i c o n o s c i b i l i t à e q u a l i f i c a z i o n e d e l s i s t e m a d e i p e r c o r s i c h e a t t r a v e rs a n o e c o l l e g a n o l a s t a z i o n e S f m , i l P a r c o d e i P i n i , v i a E m i l i a , v i a Tr i u m v i r a t o , i l parco Lungo Reno il riutilizzo dell’edificio del Dazio e la sistemazione dello spazio aper to di per tinenza, nonché l’eventuale creazione di un accesso pedonale al parco attraverso il centro spor tivo, l’integrazione dello spazio aper to di per tinenza del teatro, comprese le attrezzature oggi non utilizzate, nel sistema degli spazi di uso pubblico, la r ifunzionalizzazione ad usi di interesse pubblico dell’edificio delle 62
( 1 ) fo n t e : h tt p : / / w w w. c o m u n e . b o l o g n a . i t / c o m u n e / p s c . p h p, e l a b o r a z i o n e a u t o r e
88
In alto (61), localizzazione di Parco dei Pini nel quar tiere di Borgo Panigale in rappor to al centro stor ico di Bologna. In basso (62), il parco dei Pini nella par te direttamente accessibile, più scura, e in quella di competenza dell’Hera per lo sfr uttamento dei pozzi ar tesiani.
89
Ferrovie dello Stato oggi dismesso. (2)
Ricollegandosi alle analisi di superfici all’interno di un campo di interazioni si può collegare la metodologia progettuale intrapresa in questa fase del percorso di tesi a l l a r i c e r c a d i u n ’ a r c h i t e t t u r a “ e l e g a n t e ”, n e l s e n s o c h e v i e n e d a t o a l t e r m i n e d a Patr ik Schumacher :
“ A tt r i b u i ta a d u n a p e rs o n e i l te rm i n e “e l e ga n z a ” s u g g e r i s c e ra ffi n a te z z a s e n z a o s te n ta z i o n e . Po s s i a m o a n c h e p a r l a re “e l e ga n z a ” q u a n d o c i r i fe r i a m o a l l a s o l u z i o n e diun problema complesso. Infatti, solo se il problema è complesso e difficoltoso l a s o l u z i o n e m e r i t a l ’ a t t r i b u t o “ e l e g a n t e ”. M e n t r e s o l u z i o n i s e m p l i c i s t i c h e s o n o p s e u d o - s o l u z i o n i , l a s o l u z i o n e e l e ga n te è d e fi n i ta d a u n’ e c o n o m i a d i m e z z i a tt ra verso i quali guadagna complessità e scioglie (non necessarie) complicazioni). É questo tipo di connotaione che noi vorremmo acquisire. Un edificio o un disegno urbano elegante dovrebbero essere in grado di considerare la complessità senza scendere nel caos.” (3)
L’ e l e g a n z a p a r l a p e r s e s t e s s a , n e l l a v i t a d i t u t t i i g i o r n i l ’ e l e g a n z a s u g g e r i s c e
63
sofisticazione, gusto e r ifinimento. È un di appeal immediato e che non ha bisogno d i g i u s t i f i c a z i o n i . L’ e l e g a n z a d i c u i s i s t a o r a p a r l a n d o n o n è p e r ò l ’ e l e g a n z a d e l m i n i m a l i s m o . L’ e l e g a n z a m i n i m a l i s t a s i b a s a s u l l a s e m p l i c i t à . L’ e l e g a n z a c h e s i s t a ricercando si basa invece sulla complessità, la quale non viene mai eliminata, al p i ù v i e n e s o t t i n t e s a . L’ e l e g a n z a a r t i c o l a i n q u e s t o m o d o l a c o m p l e s s i t à , d e l l e d i n amiche, dei dati, dei campi di forze, delle prospettive. Può essere definita come l a re g o l a s o tte s a a l r a ffo r z a m e n to d e l l a “ i s o c o m u n i c a z i o n e” c h e s i è c e rc a to d i perseguire
L’ e l e g a n z a n e l l ’ a r c h i t e t t u r a c o n t e m p o r a n e a p u ò e s s e r e s u d d i v i s a i n d u e c o m p o nenti: una componente descr ittiva che considera l’elaborazione di un linguaggio al fine di provvedere alla definizione di uno stile e del suo successivo raffinamento e di una componente argomentativa che concer ne la creazione di una relazione for ma-funzione e la for mulazione di ipotesi sull’efficacia sociale e la per tinenza d e l l ’ a rc h i te tt u r a “e l e ga n te” n e l c o n te s to d e l l e s fi d e d e l l a c o n te m p o r a n e i t à . E d i l
64
ter mine può essere diviso per individuare var i livelli di lettura ai quali si r icollega il concetto:
( 2 ) fo n t e : B a n d o I c e b e r g 2 0 0 8 h tt p : / / w w w. c o m u n e . b o l o g n a . i t / i p e r b o l e / i c e b e r g / b a n d o 2 0 0 8 . h t m l , e l a b o r a zione autore (3) SCHUMACHER Patr ik, Arguing for Elegance, London 2006, elaborazione dell’autore
90
( 6 3 ) f r e g i o b a r o c c o s u l D u o m o d i N o t o, h tt p : / / w w w. f l i c k r. c o m / p h o t o s / g i a n l u c a _ i a c o n o / (64) Par te di superficie modellata attraverso componente
91
1 relativamente al numero e alla diversità di elementi all’inter no del complesso 2 alla densità e alla diversità di relazione tra gli oggetti distinguibili 3 alle relazioni tra i set di elementi (correlazioni) 4 alle relazioni tra le relazioni (sistemi di relazioni)
Una composizione elegante mostra un alto livello di complessità in tutte le dimensioni.La composizione elegante è altamente differenziata e nonostante questa dif-
65
ferenziazione è gover nata da regole. Si basa su un set sistematico di correlazioni e l e g g i c h e s o n o d e f i n i t e t r a e l e m e n t i d i f f e r e n z i a t i e s o t t o s t i t e m i . Q u e s t e c o rre l a z i o n i i n te g r a n o e r i s t a b i l i s c o n o u n a c o e re n z a v i s i b i l e e u n’ u n i t à a tt r ave rs o i l sistema differenziato
A questo punto bisogna distinguere due applicazioni parallele del concetto di complessità nel nostro dominio delle referenze: la complessità sottostante ai processi istituzionali e i processi sociali da una par te, distinta dalla complessità spaziale e dalle for me architetoniche che ci aiutano ad ar ticolare questi processi
66
vitali. La complessità sociale sottostante deve essere in qualche modo translata n e l l a c o m p l e s s i t à s p a z i a l e d i u n’ a rc h i te tt u r a c o m p l e s s a . I l c o n c e tto d i o rga n i z zazzione opera al livello di astrazione che tiene conto di entrambi i domini. È possibile elaborare tipi, schemi, sistemi e dimensioni di organizzazione che possono guidare sia l’analisi, dei processi sociali, complessi, sia la sintesi dell’appropriata, complessa, for ma architettonica. La complessa organizzazione sociale deve essere registrata, espressa e resa fruibile dalle for mazioni spaziali eleganti. L’ e l e g a n z a c o m p r e s a i n q u e s t o m o d o f a c i l i t a l ’ o r i e n t a z i o n e t r a m i t e u n c o m p l e s -
67
so spaziale e allo stesso modo assicura la leggibilità di una for mazione sociale complessa. Ancora: l’eleganza ar ticola la complessità. E l’ar ticolazione della complessità previene la per plessità. (4)
La r icerca par te quindi individuando gli elementi che fanno par te del complesso, gli oggetti, le relazioni e le interazioni esistenti.
Pe r p r i m a c o s a s i a n a l i z z a n o g l i e l e m e n t i c h e c o s t i t u i s c o n o l a c o m p l e s s i t à d e l sistema sociale esistente, par tendo da quello della mobilità.
68
(4) SCHUMACHER Patr ik, op.cit., elaborazione dell’autore Distribuzioni funzionali e analisi del sito: mobilità (65), accessi (66), residenze (67), ser vizi (68)
92
93
L’ a c c e s s i b i l i t à d a l l e z o n e e s t e r n e p u ò a v v e n i r e o t r a m i t e g l i a u t o b u s d e l l a l i n e a urbana e extraurbana o attraverso la ferrovia. Gli accessi ai mezzi pubblici e alla ferrovia sono preferenzialmente distribuiti nella par te sud orientale, la par te nord r i m a n e s g u a r n i t a . L’ a s s e p r i n i c p a l e e p i ù p r o b l e m a t i c o d e l l a v i a b i l i t à è l a v i a E m i l ia (da est a ovest), che unita ai binari ferroviar i (da nord a sud), contr ibuisce ad isolare l’area del parco.
Altro livello è quello degli accessi diretti al parco e alle attività inter ne (al momento solo il teatro). Gli accessi sono scarsamente segnalati sia per l’utenza esterna, sia per chi si trovi a percorrere l’inter no del parco. Come gli accessi ai ser vizi di mobilità anche quelli del parco sono concentrati nella par te sud della zona.
Il terzo livello è quello dell’utenza pr imar ia per il parco, cioè dei residenti nelle a r e e l i m i t r o f e . L’ a c c e s s o a l p a r c o è o s t a c o l a t o p e r q u e l l i s i t u a t i n e l l e z o n e a l d i sotto del parco dall’asse viar io della via emilia, quelli della zona occidentale (dove si sviluppano una serie di abitati di recente fabbr icazione) subiscono invece, come già sottolineato, la presenza della ferrovia che devono oltrepassare o ser vendosi
69
del viadotto o del sottopassaggio. Come ultimo livello vengono analizzati i ser vizi e le attività pr incipali presenti nell’area. I punti di maggiore attrazione possono essere individuati nell’ufficio postale a est, nella scuola a sud-ovest, nella stazione di polizia, nella distilleria e n e l s u p e r m e r c a t o n e l l a p a r t e s u d . Tu t t a l a p a r t e n o r d d e l p a r c o è a l m o m e n t o occupata dalla società Hera che si occupa dello sfr uttamento dei pozzi ar tesiani, area che secondo le disposizioni del Comune dovrebbe essere lasciata libera una volta
esauritisi i pozzi.
Pe r ev i d e n z i a re i l c a m p o d i i n te r a z i o n e d e l l i ve l l o “ s o c i a l e” v i e n e u t i l i z z a to a n c h e u n p a r a d i g m a m a g n e t i c o, s u d d i v i s o i n i n te r n o e d e s te r n o. Pe r l a p a r te e s te r n a s i cerca di comprendere il peso e la posizione più o meno favorevole degli accessi al parco (poli positivi) mentre le fer mate autobus, autostazione, i luoghi di lavoro, la scuola vengono visti come poli negativi dai quali l’utenza si dipar te. All’inter no del parco invece il polo positivo di interesse diviene il teatro, mentre i poli negativi sono gli accessi.
N e d e r i va u n’ a n a l i s i c h e s o tto l i n e a l a m a rg i n a l i t à d e g l i a c c e s s i
r ispetto al percorso e la loro posizione secondar ia e non segnalata all’inter no del parco.
70 Ve n g o n o s v o l t e u n a s e r i e d i a n a l i s i a t t e a d e f i n i r e i l p o s s i b i l e s v i l u p p o d i u n p e r c o r s o a l l ’ i n t e r n o d e l c a m p o . I n a l t o ( 6 9 ) u n g r a f i c o d i i n t e r a z i o n e m a g n e t i c a v i s u a l i z z a i r a p p o r t i d i a t t r a z i o n e r e p u l s i o n e t r a l a p a rte ester na al parco e i rappor ti inter ni tra gli accessi e il teatro. Si evidenzia una pressochè totale chiusura dell’ambito del parco agli elementi di r ilevanza ester ni, e viceversa. Ciò è dovuto soprattutto all’inadeguatezza degli accessi e alla carenza di collegamenti interni. In basso (70) una visualizzazione delle soglie di vicinanza degli alber i all’inter no del parco, suddiviso idealmente in quattro stagioni (dall’alto a sinistra, in senso orar io, pr imavera-estate-autunno-inver no) ai quali si rappor ta la “crescita” del padiglione nelle var ie stagioni, ottenuta sfr uttando le diverse soglie e quindi per mettendo una diversa penetrazione e diffusione.
94
95
A
B
C 71
D
72
73
74
75 ( 7 1 ) - ( 74 ) U n a s e r i e d i i m m a g i n i f o t o g r a f i c h e a l l ’ i n t e r n o d e l l ’ a r e a , s i e v i d e n z i a n o l a m a n c a n z a d i i n d i c a z i o n i per l’orientamento all’interno del parco (entrate/uscite non segnalate, percorso di avvicinamento al teatro non distinguibile) la presenza di aree for temente irraggiate (2 e 3), lo stato di abbandono (esempio edificio 1 dismesso)
96
(75) Definizione di una ser ie di sezioni longitudinali del parco. Si evidenziano le stesse problematiche r ilevate dall’analisi fotografica, soprattutto la mancanza di visibilità, accessi, r iconoscibilità. Individuate poi anche (simbolo a croce) una ser ie di zone mer itevoli di valor izzazione, quali quella prospiciente al teatro, quelle in vicinanza degli accessi e due zone nella par te centrale del parco dove la vegetazione è più fitta.
97
In un secondo momento si passa all’analisi spaziale nel quale il processo architettonico si inserisce in prima persona. Pe r p r i m a c o s a t r a m i te u n’ a n a l i s i fo to g r a f i c a ve n g o n o ev i d e n z i a te l e c r i t i c i t à d e l l u o g o. Preva l g o n o g l i e l e m e n t i d i n o n r i c o n o s c i b i l i t à ( g l i a c c e s s i e s te r n a m e n te n o n sono individuabili, all’interno del parco non vi sono direzioni definite), di abbandono (oltre all’edificio dismesso delle ferrovie alcune aree all’inter no del parco sono fatiscenti e abbandonate), la mancanza di confini, di segnalazioni, la mancanza di protezione dagli agenti atmosferici e la precarietà di alcuni percorsi.
Tr a m i t e a n c h e u n a s e r i e d i s e z i o n i c h e s o t t o l i n e a n o
le criticità e le problematiche
individuate. In sostanza il degrado diffuso contr ibuisce a creare una situazione che non offre nè elementi di continuità e di r iconoscibilità, nè la possibilità di individuare elementi, sistemi di relazioni e interrelazioni, sottosistemi e interdipend e n z e . E s a t t a m e n t e l ’ e s a t t o o p p o s t o d i u n s i s t e m a d e f i n i b i l e “ e l e g a n t e ”. All’interno di questa analisi si cerca comunque di individuare una serie di punti di interesse che possono ser vire da base per l’innesto di un inter vento nel contesto.
76
Viene poi effettuata la costr uzione di un modello, comprendente gli elementi naturali (alber i e arbusti) del parco, e questo modello viene ver ificato tramite analisi di irraggiamento solare (Ecotect). Da questi dati di par tenza si ottiene una definizione generale delle condizioni di irraggiamento sul suolo dell’inter vento, evidenziando le zone più esposte e meno protette. Risultano, come già evidenziato dall’analisi fotografica, ampie aree irraggiate, scher mate solo in cer ti punti dalla presenza
77
degli alber i del parco. Le zone a sud e quelle attor no all’asse ferroviar io r isultano le più sguar nite. Alle analisi globali vengono affiancate della analisi puntuali nelle zone definite più critiche dall’analisi precedente.
Uno studio sulle essenze arboree per mette, a livello dimensionale, di definire le soglie di vicinanza degli arbusti, definendo così la disposizione delle radure. La soglia di vicinanza tra gli arbusti viene var iata, in considerazione anche del fatto che la vegetazione muta il suo volto e la sua presenza al passaggio delle stagioni, arrivando ad essere un elemento molto più presente in primavere ed estate e lasciando invece più sguar nito il paesaggio durante i mesi autunno-inverali. Questo sottolinea come il campo di interazione all’inter no dell’area non sia statico, ma
78
In alto (76), analisi di radiazione incidente nella zone del Parco dei Pini. Si notano l’influenza della vegetazione nella distribuzione dei punti più caldi. Analisi puntuali (77) evidenziano r isultati analoghi. In basso la stessa analisi r ipor tata in vista prospettica, si noti il grande irraggiamento nelle aree vicino alla sede ferroviar ia (a sinistra) (78).
98
99
dinamico e var iabile con il tempo. Una qualsiasi soluzione che si basasse su dati
for me e dei profili che dipendono direttamente dal raffittimento e dal diradamento
statici potrebbe for nire la migliore r isposta solo per un breve per iodo, mentre la
della selva nel mutare del corso delle stagioni, dall’energia solare accumulata dal
soluzione che ricerchiamo deve essere integrata il più possibile con il sistema, in
suolo, dalle interazioni tra i punti sensibili nell’ambito dell’interazione sociale
modo da recepir ne le var iazioni ed adattar visi senza discostarsene.
dell’area.
L’ o b i e t t i v o d i v i e n e q u i n d i q u e l l o d i d e f i n i r e “ u n a c o m p l e s s i t à ” g o v e r a n t a d a u n a legge che assimila il nostro inter vento alle for me e agli spazi che percepiamo nei sistemi organici e inorganici naturali, dove tutte le for me sono il r isultato di forze interattive che dipendono da leggi.
Così come i sistemi naturali, le composizioni eleganti sono così integrate che non possono essere suddivise in sottosistemi indipendenti, al contrar io del design moder nista dove vi è una netta separazione tra le var ie componente funzionali. Di fatto lo sfr uttamento delle for me naturali come le for mazioni del paesaggio o le morfologie organiche come r isorsa per il trasfer imento in architettura danno un c o n t r i b u t o c o s t r u t t i v o a l l o s v i l u p p o d i q u e s t o n u o v o p a r a d i g m a e l i n g u a g g i o a rchitettonico. (5)
La par te di raccolta dati contribuisce così alla creazione di una sor ta di “campo di fo r ze” c h e p o p o l a n o l ’ a re a : v i è u n a s u p e r fi c i e g r a d i e n te d i i r r a g g i a m e n to s o l a re, v i è la vicinanza con punti di interesse e di maggiore affollamento o potenziale sviluppo, vi è la vicinanza di elementi arborei. La nostra composizione si trova così immersa nel suo ambiente, e, spinta da questo, deve mutare e trovare il modo di adattarsi.
Script #09 - Isolinee del sistema Attraverso l’utilizzo di Rhinoscr ipt in un pr imo momento si collegano i punti di interesse con le uscite e tra di loro. Queste linee fungono da linee direttr ici, base iniziale per lo sviluppo dei percorsi. I profili di questi percorsi vengono allora immersi nel campo di forze che si era pre-definito, facendo in modo che il percorso si allarghi e vada ad occupare gli spazi lasciati sguar niti e quindi più esposti (dalla superficie di irraggiamento) e contemporaneamente si amplii in presenza o in vicin a n z a d e i p u n t i d i m a g g i o r e a ff o l l a m e n t o / i n t e r e s s e . Va r i a n d o i v a l o r i d i i n t e r a z i o n e e i pesi associati alle superfici e ai punti si ottengono diverse linee di confine che p o s s o n o e s s e re a s s o c i a te a d e l l e “ i s o l i n e e” d e l s i s te m a . S i m o d e l l a n o c o s ì d e l l e
(5) SCHUMACHER Patr ik, op.cit., elaborazione dell’autore
100
Option Explicit Call Main() Sub Main() Dim linea, lineb, linealt,linealt2, attrpoints,attrpoints2 linea= “c143d945-21d9-47b1-a97d-8a06293b35ca” ‘rhino.getobject(“profilo1”,4) If isnull(linea) Then Exit Sub lineb= “b9f6c689-e954-44ca-a3ca-99b430e77136” ‘rhino.getobject(“profilo2”,4) If isnull(lineb) Then Exit Sub linealt= “9f55e712-724f-4f73-9997-dbe35512a2df” ‘rhino.getobject(“controllo altezze”,4) If isnull(linealt) Then Exit Sub linealt2= “9f55e712-724f-4f73-9997-dbe35512a2df” ‘rhino.getobject(“controllo altezze 2”,4) If isnull(linealt2) Then Exit Sub attrpoints= array(“98fd5584-543d-4560-a4ab-84d7ace92702”,”ffc68d6a-eb05-42d4-8be6-c4ca432b8aaa”,”cb92c458-d673-492b-981ea10c96b9f443”,”8120fe12-5b0b-4612-906e-694d22e7536e”,”43fea6a7-e321-4c4d-be0a-5f7761386e8c”,”1222b05d-b56e-4467-bd14-a9cefb1158e3”,”7f6d70bb0a29-466a-9bae-b9ea212692bc”,”a4089cd9-0309-41c7-8fd2-9eb6a368ec9a”,”429b840d-c427-47fc-8538-c358b8fc2786”,”9b68c446-2d2e-4d29-9cd8167415cf558d”,”3129bcb7-1e5a-4461-9d7d-9003fd240492”) ‘rhino.getobjects(“alberi”,1) If isnull(attrpoints) Then Exit Sub attrpoints2= array(“1222b05d-b56e-4467-bd14-a9cefb1158e3”) ‘rhino.getobjects(“viste”,1) If isnull(attrpoints2) Then Exit Sub Dim i,j For i = 0 To ubound (attrpoints) attrpoints(i) = rhino.PointCoordinates(attrpoints(i)) Next For i = 0 To ubound (attrpoints2) attrpoints2(i) = rhino.PointCoordinates(attrpoints2(i)) Next Call rhino.EnableRedraw(False) Dim subdivisions: subdivisions = 60 Dim apoints(), bpoints(),altpoints(),alt2points() Call dividecurve(linea,subdivisions,apoints) Call dividecurve(lineb,subdivisions,bpoints) Call dividecurve(linealt,subdivisions,altpoints) Call dividecurve(linealt2,subdivisions,alt2points) Dim k Dim minview: minview = 10 Dim pttemp, tempdist For k = 0 To ubound (attrpoints2) For i = 0 To ubound(apoints) tempdist = rhino.Distance(apoints(i),attrpoints2(k)) If tempdist < minview Then pttemp = array(0,0,25/tempdist) apoints(i) = rhino.VectorAdd(apoints(i),pttemp) End If Next Next Dim arrsections() ReDim arrsections(ubound(apoints)) Dim intsections: intsections = 20 Dim sezcurves(),dist,vectemp For i = 0 To ubound (apoints) arrsections(i) = rhino.AddLine(apoints(i),bpoints(i)) ReDim Preserve sezcurves(i) sezcurves(i) = rhino.DivideCurve(arrsections(i),intsections) Next Call modifysections(sezcurves,intsections,altpoints,1000) Dim mindist: mindist = 60 Dim pointsection Call alberipunti(sezcurves,attrpoints,mindist) Call rhino.AddCurve(attrpoints,1) Dim crvtemp() For i = 0 To ubound (sezcurves) ReDim Preserve crvtemp(i) crvtemp(i) = rhino.AddCurve(sezcurves(i)) Next Dim srf srf = rhino.AddLoftSrf(crvtemp) Call rhino.DeleteObjects(arrsections) Call rhino.DeleteObjects(crvtemp) Call rhino.EnableRedraw(true) End Sub Sub alberipunti(ByRef sezcurves,attrpoints,mindist) Dim i, j, k, pointsection, dist, vectemp, pointtemp, control For k = 0 To ubound (attrpoints) For i = 0 To ubound (sezcurves)’per ogni sezione pointsection = sezcurves(i) For j = 1 To ubound (pointsection)-1 ‘per ogni punto della sezione pointtemp= array(pointsection(j)(0),pointsection(j)(1),0) dist = abs(rhino.Distance(pointtemp,attrpoints(k)))
101
‘
‘devo fare la distanza della proiezione Call rhino.addline(pointsection(j),attrpoints(k)) If dist < mindist Then control = abs(30/dist^2) If control < 30 Then vectemp = array(0,0,abs(30/dist^2)) Else vectemp = array(0,0,30) pointsection(j)= rhino.Vectorsubtract(pointsection(j),vectemp) End If End If
Next sezcurves(i) = pointsection Next Next End Sub Sub modifysections(ByRef sezcurves,intsections,altpoints,intensity) Dim i, j, pointsection, dist, vectemp For i = 0 To ubound (sezcurves) ‘per ogni sezione pointsection = sezcurves(i) For j = 1 To ubound (pointsection)-1 ‘pero ogni punto della sezione dist = rhino.Distance(pointsection(j),altpoints(i)) ‘!!!VEDERE SE UN SOLO PUNTO O TUTTI! vectemp = array(0,0,intensity/dist^2) pointsection(j)= rhino.VectorAdd(pointsection(j),vectemp) Next sezcurves(i) = pointsection Next End Sub Sub dividecurve(curve,subdivisions,ByRef points) Dim adomain: adomain= rhino.CurveDomain(curve) Dim astep: astep = (adomain(1)-adomain(0))/subdivisions Dim a : a = 0 Dim i For i = adomain(0) To adomain(1) Step astep ReDim Preserve points(a) points(a) = rhino.EvaluateCurve(curve,i) a=a+1 Next End Sub
79
La soglia stagionale degli alberi, i grafici di irraggiamento e la definizione di punti di maggiore interazione si traducono in una diversa penetrazione ed espansione dei confini del padiglione all’inter no del parco (79)
102
103
Contemporaneamente la vicinanza o meno di queste linee ai punti di interesse fa sì che le linee stesse si sollevino creando una superficie ondulata alla base della modulazione delle sezioni dei padiglioni. Viene introdotta una nuova regola per la quale se i padiglioni inglobano elementi arborei, essi funzionano da attrattor i e “risucchiano” verso il basso le sezioni.
Così, modulando i parametr i, si ottengono diverse configurazioni possibili, che e c c e d o n o a n c h e l ’ a re a d e l l ’ a tt u a l e p a rc o d i Po n te l u n g o, a r r i va n d o a c o p r i re a n c h e tutte le zone di parco oggi occupate dai pozzi ar tesiani gestiti dalla società Hera ma che, esauritisi i pozzi, torneranno di proprietà comunale. 80
Definito un master plan generale vengono poi esaminate delle sezioni par ticolari p e r d e f i n i r e g l i a m b i t i f u n z i o n a l i d e l p a d i g l i o n e a l l ’ i n t e r n o d e l l e v a r i e z o n e . Ve n g o no individuate una serie di “cluster” di funzioni legate alla preesistenza sul luogo e alle esigenze delle utenze nelle vicinanze del parco. Si suddivide così la funzionalità del padiglione in cinque macroaree ciascuna con una sua propria specificità.
La definizione delle potenzialità funzionali viene effettuata selezionando come campione una ser ie differente di utenze, cercando di fare in modo che l’inter vento si compor ti adattandosi come al var iare delle interazioni “spaziali”/”naturali” così alle variazioni della componente sociale.
Viene così considerata in primo luogo l’utenza delle persone che abitano nelle
81
vicinanze e attraversano quotidianamente il parco per semplici esigenze di mobilità. Ad esse deve essere garantita l’attraversabilità, contemporaneamente la presenza di una ser ie di linee differenti di comunicazione può fare in modo di metter le in contatto con realtà differenti e innescare dinamiche nuove negli spostamenti quotidiani. Un secondo ambito possibile è quello degli utenti esterni che arr ivano nell’area per una deter minata attrazione ma, seguendo il loro percorso pr imar io, possono essere reindir izzati verso altre possibilità. Come terza utenza, vista la presenza della scuola, si definisce quella dell’infanzia, che vive intensamente la proliferazione degli stimoli ed è quindi
spinta a var iare le prospettive e
le attività, giocando letteralmente con la var ietà delle funzioni che è messa loro a disposizione.
82
“I compiti dell’architettura contemporanea sono contraddistinti da sempre più complesse e simultanee previsioni programmatiche che debbono essere organizDefinizione degli ambiti funzionali e delle modalità di utilizzo per diverse fasce di utenti: residenti in zona (80), utenti ester ni (81), infanzia e scuola (82)
104
105
85
86
83
87
84 In alto (83) la pianta generale della superficie ottenuta inter polando le diverse soluzioni ottenute precedentemente. Si suddivide l’area in “cluster” funzionali, in relazione anche agli elementi di interesse non valorizzati riscontrati nella prima fase di analisi: l’area giochi bambini prospiciente al teatro(1), i l g r a n d e s p a z i o n o rd o c i d e n t a l e ( 5 ) , l a p o s s i b i l i t à d i d e f i n i re u n’ a re a t r a n q u i l l a e i s o l a t a n e l l a p a r te centrale del perco (4), la vicinanza al campo spor tivo e alla scuola (5). In basso (84) come la str uttura cambia la dinamica delle sezioni del parco. 106
In alto (85) (86) la definizione di una nuova “regola” di interazione: mentre la presenza dei punti sensibili, oltre ad aumentare la grandezza della sezione favor isce anche il suo innalzamento, la presenza di alber i fi sì che la superficie venga “r isucchiata” dal terreno in modo da inglobare gli elementi arborei diffusi entro il suo per imetro. in basso (87) la definizione di interazione e il rappor to con gli alber i vengono fatte var iare con diverse leggi (quadratica, logar itmica, esponenziale) in maniera da visualizzare tutte le possibili soluzioni. 107
zate in contesti urbani
c o m p l e s s i . L’ e l e g a n z a r i c h i e s t a p e r u n a c o m p l e s s i t à m a g -
giore richeide una riduzione di complicazioni visuali integrando diversi elementi in un sistema formale e spaziale coerente e continuo. La sfida generele è di trovare modi di composizione che possono articolarsi in relazioni complesse senza p e r d e r e l a l e g g i b i l i t à e l a c a p a c i t à d i o r i e n t a r e g l i u t e n t i .” ( 6 )
Le organizzazioni complesse e le relazioni possono essere così ar ticolate e rese leggibili in maniera da far percepire un ordine nella complessità piuttosto che la complessità come disordine. Un esempio storico ci può venire, per cer ti versi, dall’architettura palladiana. Osser vando un opera come la villa La Rotonda ci possiamo rendere conto di come Palladio adempia contemporaneamente alle due funzioni di ordinare e disvelare la complessità. Ad una prima esperienza prevale l a s e n s a z i o n e d i u n’ a rc h i te tt u r a c l a s s i c a e o rd i n a t a , c h e s u p e r i m p o n e l e s u e l e g g i alla natura. Ma se si concepisce l’edificio (di for ma contemporaneamente quadrate e circolare, aper to su tutti i lati verso il paesaggio circostante) non come un o g g e t t o d a o s s e r v a r e m a c o m e u n o s t r u m e n t o , u n a s o r t a d i “ s e d i l e ”, e c c o a l l o r a c h e Palladio ci indica la complessità della natura che da quella posizione possiamo osser vare, ci disvela la nostra immersione all’inter no di un campo di forze in con-
88
tinuo mutare, in cui ogni elemento, noi compresi, e contemporanemente “flesso” e “ f l e t t e n t e ”, p e r u t i l i z z a r e l e p a r o l e d i R o b e r t V e n t u r i ( 7 ) i n d i c a n t i u n s i s t e m a d o v e tutte le par ti sono interdipendenti e nessuna è autonoma o isolata dalle altre ma è perennemente interagente. (da questo punto di vista questa inter pretazione si discosta dall’analisi che Schumacher fa nel suo saggio definendo l’architettura palladiana come architettura dell’addizione in contrasto con l’architettura barocca)
L’ u t e n t e d e v e e s s e r e i n g r a d o a l l o r a d i p e r c e p i r e a d e s e m p i o i l l u o g o e s a t t o d o v e diversi domini si intersecano o dove multiple prospettive disvelano la presenza contemporanea di patter n diversi collegati a diverse interazioni.
Tr a d i z i o n a l m e n t e l ’ o r i e n t a z i o n e s p a z i a l e h a o p e r a t o p r i m a r i a m e n t e s u l l a b a s e d i relazioni di inclusione e contenimento: il principio delle matrioske russe. La posizione spaziale è definita come una serie di contenitori di relazioni. Un modo alter nativo di operare è dato appunto dal principio di eleganza. Le figure e i domini non devono rimanere separati perchè noi abbiamo sviluppato delle regole di mutua inflessione, e regole di trasfor mazione graduale (attrattor i, repulsori, variazioni ter miche e solari, vicinanza a deter minati contesti).
(6) SCHUMACHER Patr ik, op.cit., elaborazione dell’autore
108
89
(88), (89) due viste di par te della superficie del padiglione all’inter no del parco. In alto (88) la par te in vicinanza dell’accesso sud-or ientale, in basso (89) quella in avvicinamento al teatro.
109
90
92
93
(90) (91) (pagina a fianco) definizione di due superfici nelle quali il rappor to di attrazione con gli alber i è definito del quadrato del valore di vicinanza. 91 (92),(93) studio e applicazione delle possibilità di modulazione della superficie date della componente distribuita sulla superficie del padiglione 110
111
L’ o r i e n t a m e n t o i n u n c a m p o c o m p l e s s o s i a f f i d a a l l a n a v i g a z i o n e a t t r a v e r s o v e t t o r i di trasfor mazione, di traiettor ie, piuttosto che semplicemente allo spostamento da una posizione all’altra.
Lo step successivo è di concentrarsi sull’involucro: come la tassellazione o la pannellizzazione continua possano creare superfici dove le aper ture sono integrate piuttosto che imposte. In questo ambito, dove subentra una componente funzionale, il pr incipio dell’inflessione o dell’ar ticolazione organica diviene più difficilmente sostenibile. Inoltre vi è il r ischio di un sovraffollamento del campo visivo compromettendo la leggibilità e l’or ientamento. È in questo momento, dove crescono le difficoltà, nella sfida di por tare il nuovo p a r a d i g m a n e l l a s c a l a d e l l a re a l i z z a z i o n e c h e l ’ e l e ga n z a d i v i e n e u n’ e s p l i c i t a p r i orità.
La nozione di eleganza qui promossa da ancora una cer ta attinenza al concetto di bellezza di Leon Battista Alber ti: condizione nella quale non si può nulla aggiungere o nulla sottrarre senza rovinare l’ar monia del tutto. Alber ti si è focalizzato su principi ordinatori chiave come la simmetria e la proporzione. Questi principi sono stati visti come integrazione di var ie par ti in un tutto,
tramite relazioni dimen-
sionali analogiche con quelle delle par ti della figura umana. Mentre la concezione r i n a s c i m e n t a l e p reve d e u n’ a rc h i te tt u r a a s s e m bl a t i va , l a c o n c e z i o n e a rc h i te tto n i c a dell’eleganza non presuppone sistemi proporzionali nè privilegia la simmetria. Al contrar io le par ti o i sottosistemi si flettono mutualmente per adattarsi l’un l’altro e raggiungere l’integrazione attraverso var ie modalità di interconnessione, tran-
94
sizione dolce tra le par ti, affiliazione morfologica. (8)
In questo modo possono essere lette le differenti
variazioni del componente del
capitolo precedente (tensegrità). La necessità di individuare una par ticolare sup e r f i c i e d o v e l e v a r i a z i o n i i n t e r v e n i s s e r o “ e l e g a n t e m e n t e ”, s v i l u p p a n d o s i c i o è d a u n a s i t u a z i o n e c o m p l e s s a a d u n’ a l t r a s i t u a z i o n e c o m p l e s s a s e n z a i n c i d e re i n m a niera discontinua nell’organismo architettonico. La for ma morbida si inser isce così nella continuità del padiglione creando un ulter iore sottosistema di lettura, interdipendente r ispetto a quello precedente. La regola di definizione è questa volta legata sempre a condizioni esterne: l’irraggiamento in par ticolare zone tocca punte m i n i m e e q u e s t o p e r m e t t e a l l a s u p e r f i c i e d i a p r i r s i g r a d u a l m e n t e a l l ’ a m b i e n t e c i rcostante. 95
( 7 ) V E N T U R I R o b e r t , C o m p l e x i t y a n d C o n t r a d i c t i o n i n A r c h i t e c t u r e , H a r r y N . A b r a m s , N e w Yo r k 1 9 7 7 (8) SCHUMACHER Patr ik, op.cit., elaborazione dell’autore
112
In alto (84) pianta del padiglione in vicinanza dell’accesso sud. In basso (95) vista prospettica
113
96
98
97
99
In alto (96) prospetti laterali destro e sinistro della par te di fig.94. In basso (97) una ser ie di sezioni dela stessa.
114
(98),(99) viste prospettiche dellâ&#x20AC;&#x2122;inser imento del padiglione nel parco.v
115
Bibliografia
116
117
A A B o o k : Pr o j e c t s R e v i e w 2 0 0 8 , A A p u b l i c a t i o n s , 2 010 L o n d o n
A A D R L , Te n , A A p u b l i c a t i o n s , 2 0 1 0 L o n d o n
B O U M A N O l e , 3 d > 2 d : T h e D e s i g n e r s R e p u b l i c ’ s A d v e n t u r e s i n a n d O u t o f A r c h i t e c t u r e , Te N e u e s P u b l i s h i n g C o m p a n y, 2 0 0 1
B U R K H A R D T R . W. , A P r a c t i c a l G u i d e t o Te n s e g r i t y D e s i g n , C o p y r i g h t 2 0 0 4 - 2 0 0 8 P. O . B o x 4 2 6 1 6 4 , Cambr idge, MA 02142-0021
B U R K H A R D T, R . W . , A Te c h n o l o g y f o r D e s i g n i n g Te n s e g r i t y D o m e s a n d S p h e r e s , [ o n - l i n e ] , C a m b r i d g e ( U S A ) h t t p : / / w w w . c h a n n e l 1. c o m / u s e r s / b o b w b / p r o s p e c t / p r o s p e c t . h t m # s e c
CAPON Br ian, Botanica, Edagr icole, Milano, 1999
C H A N D A N A P a u l , E v o l u t i o n a r y F o r m F i n d i n g o f Te n s e g r i t y S t r u c t u r e s , M e c h a n i c a l a n d A e r o s p a c e E n g i n e e r i n g C o r n e l l U n i v e r s i t y, I t h a c a , 1 9 9 7
D ’A R C Y W e n t w o r t h T h o m p s o n , O n G r o w t h a n d F o r m , D o v e r r e p r i n t , M i n e o l a , 1 9 9 2
D E L A N D A M a n u e l , W a r i n t h e A g e o f I n t e l l i g e n t M a c h i n e s , Z o n e B o o k s , N e w Yo r k 1 9 9 2 .
F E R R E A l b e r t , Ve r b N a t u r e s : A r c h i t e c t u r a l B o o g a z i n e ( A c t a r ’s B o o g a z i n e ) ; A r c h i t e c t u r e Boogazine edition 2007
FULLER R.B.
S y n e r g e t i c s , M a c m i l l a n P u b l i s h i n g C o . I n c . , N e w Yo r k , 1 9 7 5
G O L D F I N G E R E l i o t , A n i m a l A n a to m y fo r A r t i s t s : T h e E l e m e n t s o f Fo r m , O x fo rd U n i ve rs i t y Pre s s , O x fo rd , 2004
HENSEL Michael, MENGES Achim, Mor pho-ecologies, Architectural Association, London, 2006
I N G B E R G D o n a l d E . , C e l l u l a r t e n s e g r i t y : d e fi n i n g n e w r u l e s o f b i o l o g i c a l d e s i g n t h a t g o v e r n c y t o s k e l e t o n , J o u r n a l o f C e l l S c i e n c e , N o . 1 0 4 , p p . 6 1 3 - 6 2 7, 1 9 9 3
I N G B E R G D o n a l d E . , Te n s e g r i t y I . C e l l s t r u c t u r e a n d h i e r a r c h i c a l s y s t e m s b i o l o g y ”. J o u r n a l o f C e l l S c i e n c e , N o . 11 6 , p p . 11 5 7- 11 7 3 , 2 0 0 3
I N G B E R G D o n a l d E . , Te n s e g r i t y I I . H o w s t r u c t u r a l n e t w o r k s i n fl u e n c e c e l l u l a r i n f o r m a t i o n p r o c e s s i n g n e t w o r k s , J o u r n a l o f C e l l S c i e n c e , N o . 11 6 , p p . 1 3 9 7 - 1 4 0 8 , 2 0 0 3
J Á U R E G U I V a l e n t í n G ó m e z , Te n s e g r i t y S t r u c t u r e s a n d t h e i r A p p l i c a t i o n t o A r c h i t e c t u r e , t h e s i s S u b m i t t e d t o t h e S c h o o l o f A r c h i t e c t u r e , Q u e e n ’ s U n i v e r s i t y, B e l f a s t
JOHNSON Steven,
118
La nuova scienza dei sistemi emergenti, Garzanti, Milano, 2004
119
K E R C K H O V E D e r r i c k d e , T h e A r c h i t e c t u r e o f I n t e l l i g e n c e ( T h e I n f o r m a t i o n Te c h n o l o g y R e v o l u t i o n i n A r c h i t e c t u r e ) , B i r k h ä u s e r, B a s e l , 2 0 01
K O L A R E V I C B r a n k o , A r c h i t e c t u r e i n t h e D i g i t a l A g e : D e s i g n a n d M a n u f a c t u r i n g , Ta y l o r & Fra n c i s ; L o n d o n , 2 0 0 5
L E V I N , S . M . “ C o n t i n u o u s Te n s i o n , D i s c o n t i n u o u s C o m p r e s s i o n . A M o d e f o r B i o m e c h a n i c a l S u p p o r t o f t h e B o d y ”, B u l l e t i n o f S t r u c t u r a l I n t e g r a t i o n , R o l f I n s t i t u t e , B o l d e r . R e p e r i b i l e a n c h e s u h t t p : / / w w w . b i o t e n s e g r i t y. c o m
L U T T G E U l r i c h , K L U G E m a n f re d , BAU E R ga b r i e l a , B o t a n i c a , Z a n i c h e l l i , B o l o g n a , 19 9 7
LY N N G r e g g A n i m a t e F o r m ( H a r d c o v e r ) P r i n c e t o n A r c h i t e c t u r a l P r e s s ; 1 e d i t i o n ( J a n u ar y 1, 1999)
M O T R O R . , Te n s e g r i t y : S t r u c t u r a l S y s t e m s f o r t h e F u t u r e , B u t t e r w o r t h - H e i n e m a n n , 2006
MUNARI Br uno, Design e comunicazione visiva, Laterza, Roma, 2006
MUNARI Br uno, Da cosa nasce cosa. Appunti per una metodologia progettuale, Laterza, Roma, 2006
M Y E R S T. W. , A n a t o m y Tr a i n s , C h u r c h i l l L i v i n g s t o n e e d i t i o n , E d i n b u r g h 2 0 0 1
R A I S E R J e s s e , A t l a s o f n o v e l t e c t o n i c s , P r i n c e t o n A r c h i t e c t u r a l P r e s s , N e w Yo r k , 2 0 0 6
RUTTEN David,
RhinoScript for Rhinocerous 4.0, Rober t McNeel & Associates, 2007
SCHUMACHER Patr ik, Arguing for Elegance, published in: Elegance, AD (Architectural Design), Januar y/Februar y 2007
S N E L S O N , K . ( 19 9 0 ) “ L e tte r f ro m Ke n n e t h S n e l s o n” to R . M o t ro, I n te r n a t i o n a l J o u r n a l o f S p a c e S t r u c t u r e s , 19 9 0 , s e p e r i b i l e a n c h e s u h tt p : / / w w w. g r u n c h . n e t / s n e l s o n / r m o t o. h t m l .
VENTURI Rober t, Complexit y and Contradiction in Architecture, Harr y N. Abrams, New Yo r k 1 9 7 7 h t t p : / / e n . w i k i p e d i a . o r g / w i k i / Te n s e g r i t y h tt p : / / w w w. c h i l d r e n s h o s p i t a l . o r g / r e s e a r c h / S i t e 2 0 2 9 / m a i n p a g e S 2 0 2 9 P 2 3 s u b l eve l 2 4 . h t m l http://georgehar t.com/vir tual-polyhedra/vp.html h tt p : / / w w w. c h i l d r e n s h o s p i t a l . o r g / d r e a m / D r m R s c h 0 4 / m e c h a n i c a l _ p. h t m l h tt p : / / w w w. t e n s e g r i d a d . e s / h tt p : / / w w w. a n a t o m y t r a i n s . c o m / ex p l o r e / t e n s e g r i t y h tt p : / / w w w. c o m u n e . b o l o g n a . i t / c o m u n e / p s c . p h p 120
121
Ringraziamenti
122
123
I miei più vivi ringraziamenti vanno a tutti quelli che mi sono stati vicini durante tutto l’ultimo anno, che mi hanno aiutato direttamente, supportato o semplicemente sopportato.
Un ringraziamento particolare ad Alessandro che mia ha aiutato più volte, con grande generosità e pazienza,
a risolvere insormontabili, o in apparenza tali,
problemi di tecnici di tutti i generi. A Mario per l’aiuto, i consigli e soprattutto per i l s u o i r r a g g i u n g i b i l e c o m p u t e r. A t u t t i g l i a l t r i t e s i s t i , A n d r e a , S i m o n e e G i a c o m o , Filippo, Marco, Riccardo per l’aiuto e il sostegno reciproco nei momenti di difficoltà tecnica e burocratica. Un ringraziamento particolare ai miei genitori e a Noemi per essermi stati vicini con grandissima, infinita, pazienza. A Chiara, Giorgio & Mino, ed Elena che mi hanno sempre aiutato ogni volta che ne avevo bisogno, fino a sfamarmi e ad ospitarmi quando ne avevo necessità. A M i c h e l e p e r l a c o m p a g n i a v i a s m s d u r a n t e t u t t e l e a l b e p a s s a t e a l c o m p u t e r. Ad Alberto per i tutti i nostri appartamenti e, insieme a Claudio, per i lauti pranzi in via Sant’Isaia. Ad Alessio per ogni suggerimento, per ogni opportunità di crescita e di approfondimento, e per Marretti, e a Ludovico per la disponibilità e i consigli. A tutti i miei compagni di facoltà che hanno contribuito a rendere speciale questi anni. Un particolare ringraziamento a Daniela per la serata del 3 febbraio 1954. Ai miei amici di Cesena, anche se non ho potuto essere con loro quanto avrei voluto li sento sempre vicini e mi mancano.
Vo r re i c i t a r v i t u t t i u n o p e r u n o e f o r s e a v rò m o d o d i f a r l o , s e n z a t u t t i v o i n o n s a re b be stato possibile arrivare alla mia fatidica laurea, o almeno arrivarci vivo.
Quindi, ancora una volta, grazie di cuore!
124
125
http://pquod.blogspot.com
128
129