57

Architecture 402al Portfolio

Embed Size (px)

DESCRIPTION

Arch 402al Fall 2009 Roland Wahlroos-Ritter

Citation preview

ARIELLE ROULEAUARCHITECTURE 402

PORTFOLIO FALL 2009NON-LINEAR AGGREGATIONS WITH ROLAND WAHLROOS-RITTER

CELLULAR AGGREGATIONS I

CELLULAR AGGREGATIONS I

OBJECTIVE

DEFINE AN ALGORITHM BASED ON RECURSIOINAL AND CONDITIONAL STATEMENTS THAT PRODUCES A VARIABLE FIELD CONDITION AND TRANSLATE THE ALGORITHM INTO INTERACTIVE DRAWINGS.

Option Explicit‘Script written by <Arielle Rouleau>‘Script copyrighted by <USC Arch402al>‘Script version Thursday, September 10, 2009 2:05:00 PM

Call Main()Sub Main()

‘create a u,v grid Dim strsrf : strsrf = rhino.getobject(“select a surface to popu-late”,8) If IsNull(strSrf) Then Exit Sub Dim uDiv : uDiv = Rhino.GetInteger(“divisions in U direction”, 1) Dim vDiv : vDiv = Rhino.GetInteger(“divisions in V direction”, 1) ‘declare offset height variable and value ‘Dim height : height = Rhino.Get-Real (“offset height”,20) Dim uDomain : uDomain = Rhino.SurfaceDomain(strsrf,0) Dim vDomain : vDomain = Rhino.SurfaceDomain(strsrf,1) Dim ustep : ustep = uDomain(1)/uDiv

Dim vstep : vstep = vDomain(1)/vDiv ‘Disable Redraw To speed up the execution of the script Rhino.EnableRedraw False Dim u, v, uvpoint, arrData For u = 0 To uDomain(1)-ustep Step ustep For v = 0 To vDomain(1)- vstep Step vstep ‘Start setting up points‘call srfCurvature function to calculate first point Dim ppA, ppB, ppC, ppD, ppE, ppF, ppG, ppH, ppI, ppJ Dim ppK, ppL, ppM, ppN, ppO, ppP, ppQ, ppR, ppS, ppT Dim ppU, ppV, ppW, ppX, ppY, ppZ, ppAA, ppBB, ppCCDim ppDD, ppEE, ppFF, ppGG, ppHH, ppII, ppJJ, ppKK, ppLL, ppMM, ppNN Dim ppOO uvPoint = Array (u,v+vStep*(15/32))arrData = srfCurvature (strsrf, uvPoint) ppA = offsetCalc(arrData, 0)

uvPoint = Array (u+uStep*(3/8),v+vStep*(3/8))arrData = srfCurvature (strsrf, uvPoint) ppB = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(17/32),v)arrData = srfCurvature (strsrf, uvPoint) ppC = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/8),v+vStep*(3/8))arrData = srfCurvature (strsrf, uvPoint) ppD = offsetCalc(arrData, 0) uvPoint = Array (u+uStep,v+vStep*(17/32))arrData = srfCurvature (strsrf, uvPoint) ppE = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/8),v+vStep*(5/8))arrData = srfCurvature (strsrf, uvPoint) ppF = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(15/32),v+vStep)arrData = srfCurvature (strsrf, uvPoint) ppG = offsetCalc(arrData, 0) uvPoint = Array

uvPoint = Array (u+uStep*(3/8),v+vStep*(3/8))arrData = srfCurvature (strsrf, uvPoint) ppB = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(17/32),v)arrData = srfCurvature (strsrf, uvPoint) ppC = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/8),v+vStep*(3/8))arrData = srfCurvature (strsrf, uvPoint) ppD = offsetCalc(arrData, 0) uvPoint = Array (u+uStep,v+vStep*(17/32))arrData = srfCurvature (strsrf, uvPoint) ppE = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/8),v+vStep*(5/8))arrData = srfCurvature (strsrf, uvPoint) ppF = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(15/32),v+vStep)arrData = srfCurvature (strsrf, uvPoint) ppG = offsetCalc(arrData, 0) uvPoint = Array

(u+uStep*(3/8),v+vStep*(5/8))arrData = srfCurvature (strsrf, uvPoint) ppH = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(3/8),v+vStep*(1/2))arrData = srfCurvature (strsrf, uvPoint) ppI = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/16),v+vStep*(7/16))arrData = srfCurvature (strsrf, uvPoint) ppJ = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/16),v+vStep*(5/16))arrData = srfCurvature (strsrf, uvPoint) ppK = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(7/16),v+vStep*(5/16))arrData = srfCurvature (strsrf, uvPoint) ppL = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(1/2),v+vStep*(3/8))arrData = srfCurvature (strsrf, uvPoint)

PPM = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(9/16),v+vStep*(5/16))arrData = srfCurvature (strsrf, uvPoint) ppN = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(11/16),v+vStep*(5/16))arrData = srfCurvature (strsrf, uvPoint) ppO = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(11/16),v+vStep*(7/16))arrData = srfCurvature (strsrf, uvPoint) ppP = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/8),v+vStep*(1/2))arrData = srfCurvature (strsrf, uvPoint) ppQ = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(11/16),v+vStep*(9/16))arrData = srfCurvature (strsrf, uvPoint) ppR = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(11/16),v+vStep

arrData = srfCurvature (strsrf, uvPoint) ppS = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(9/16),v+vStep*(11/16))arrData = srfCurvature (strsrf, uvPoint) ppT = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(1/2),v+vStep*(5/8))arrData = srfCurvature (strsrf, uvPoint) ppU = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(7/16),v+vStep*(11/16))arrData = srfCurvature (strsrf, uvPoint) ppV = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/16),v+vStep*(11/16))arrData = srfCurvature (strsrf, uvPoint) ppW = offsetCalc(arrData, 0) uvPoint = Array (u+uStep*(5/16),v+vStep*(9/16))arrData = srfCurvature (strsrf, uvPoint) ppX = offsetCalc(arrData, 0)**

WORKING DRAWINGS

UV GRID

DEFINE A UV GRIDDEFINE A SET OF POINTS ON THE UV

GRID

DRAW CURVES CONNECTING POINTS

CREATE SURFACES USING THE

PRE-CREATED LINES

FLOW DIAGRAM

2 X 10

2 X 2O

2 X 50

10 X 2

10 X 10

2 X 2

10 X 20

10 X 50

50 X 2

50 X 10

50 X 20

50 X 50

CELLULAR AGGREGATIONS II

CELLULAR AGGREGATIONS II

OBJECTIVE

DEFINE AN ALGORITHM BASED ON RECURSIOINAL AND CONDITIONAL STATEMENTS THAT PRODUCES A VARIABLE FIELD CONDITION AND TRANSLATE THE ALGORITHM INTO INTERACTIVE DRAWINGS.

SCRIPTOption Explicit‘Script written by <Arielle Rouleau>‘Script copyrighted by <USC Arch402al>‘Script version Friday, October 09, 2009 3:45:25 PM

Call Main()Sub Main()Dim strsrf : strsrf = rhino.getobject(“select a surface to popu-late”,8) If IsNull(strSrf) Then Exit Sub Dim uDiv : uDiv = Rhino.GetInteger(“divisions in U direction”, 5)Dim vDiv : vDiv = Rhino.GetInteger(“divisions in V direction”, 5) Dim uDomain : uDomain = Rhino.SurfaceDomain(strsrf,0)Dim vDomain : vDomain = Rhino.SurfaceDomain(strsrf,0) Dim ustep : ustep = uDomain(1)/uDivDim vstep : vstep = vDomain(1)/vDiv ‘Disable Redraw to speed up the execution of the script‘Rhino.EnableRedraw False

Dim u, v For u = 0 To uDomain(1)Step ustep For v = 0 To vDomain(1)Step vstep Dim uvPoint, arrData, proPoint1, proPoint2, proPoint3, propoint4, propoint5, propoint6Dim proPoint7

‘call srfCurvature function to calculate first pointuvPoint = Array (u,v)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint1 = offsetCalc(arrData, 0) ‘call srfCurvature function to calculate second pointuvPoint = Array (u,v+vstep)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint2 = offsetCalc(arrData, 0) ‘call srfCurvature function to calculate second pointuvPoint = Array (u+ustep,v)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint3 = offsetCalc(arrData, 0)

‘call srfCurvature function to calculate second pointuvPoint = Array (u+ustep,v+vstep)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint4 = offsetCalc(arrData, 0) ‘call srfCurvature function to calculate second pointuvPoint = Array (u+((4/5)*ustep),v+vstep)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint5 = offsetCalc(arrData, 0) ‘call srfCurvature function to calculate second pointuvPoint = Array (u+((1/5)*ustep),v)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint6 = offsetCalc(arrData, 0) uvPoint = Array (u,v)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint7 = offsetCalc(arrData, 1) ‘add lineDim norm : norm = Rhino.AddLine(proPoint1, proPoint7)

‘call srfCurvature function to calculate second pointuvPoint = Array (u+ustep,v+vstep)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint4 = offsetCalc(arrData, 0) ‘call srfCurvature function to calculate second pointuvPoint = Array (u+((4/5)*ustep),v+vstep)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint5 = offsetCalc(arrData, 0) ‘call srfCurvature function to calculate second pointuvPoint = Array (u+((1/5)*ustep),v)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint6 = offsetCalc(arrData, 0) uvPoint = Array (u,v)arrData = srfCurvature (strsrf, uvPoint)‘call offsetCalc function, offset dis-tance is ‘height’ proPoint7 = offsetCalc(arrData, 1) ‘add lineDim norm : norm = Rhino.AddLine(proPoint1, proPoint7)

Dim arrcrv1, arrcrv2 arrcrv1 = Array (proPoint1, proPoint5, proPoint3)arrcrv2 = Array (proPoint2, proPoint6, proPoint4) ‘draw curvesDim crv1, crv2 crv1 = Rhino.AddCurve (arrcrv1)crv2 = Rhino.AddCurve (arrcrv2) ‘divide curvesDim divcrv1, divcrv2 divcrv1 = Rhino.DivideCurve (crv1, 4)divcrv2 = Rhino.DivideCurve (crv2, 4) ‘get surface areaDim srfarea: srfarea = Rhino.SurfaceArea (strsrf) Dim circ1, circ2 circ1 = Rhino.AddCircle3Pt (divcrv1(1), divcrv2(2), divcrv2(1)) If IsNull(circ1) Then Exit Sub circ2 = Rhino.AddCircle3Pt (divcrv1(2), divcrv1(3), divcrv2(3)) If IsNull(circ2) Then Exit Sub

‘get circle radiusDim circ1rad, circ2rad circ1rad = Rhino.CircleRadius (circ1)circ2rad = Rhino.CircleRadius (circ2) ‘get circle center pointDim ctrcirc1, ctrcirc2 ctrcirc1 = Rhino.CircleCenterPoint (circ1)ctrcirc2 = Rhino.CircleCenterPoint (circ2) If circ1rad > 20 Then Rhino.DeleteObject (circ1) End If If circ2rad > 20 Then Rhino.DeleteObject (circ2) End If Rhino.HideObject strsrfRhino.HideObject crv1Rhino.HideObject crv2 Dim circdiv1, circdiv2Dim circplin1, circplin2 circdiv1 = Rhino.DivideCurve (circ1, 3)circdiv2 = Rhino.DivideCurve (circ2, 3)Dim sph1, sph2 sph1 = Rhino.AddSphere (ctrcirc1, cir-

circ1rad*(3/2))sph2 = Rhino.AddSphere (ctrcirc2, cir-c1rad*(4/3)) If circ1rad > 25 Then Rhino.DeleteObject (sph1) End If If circ2rad > 25 Then Rhino.DeleteObject (sph2) End If ‘Dim pt1, pt2, pt3, pt4 ‘pt1 = Rhino.GetPointOnSurface (sph1)‘pt2 = Rhino.GetPointOnSurface (sph2) Dim lin1, lin2Dim arrctrcirc1, arrctrcirc2 ‘lin1 = Rhino.AddLine (ctrcirc1, ProPoint7)‘lin2 = Rhino.AddLine (ctrcirc2, ProPoint7) Dim spt1, spt2 spt1 = Rhino.SplitBrep (strsrf, sph1)spt2 = Rhino.SplitBrep (strsrf, sph2) ‘Rhino.HideObject (sph1)‘Rhino.HideObject (sph2)‘Rhino.HideObjects spt1(0)

FLOW DIAGRAM

DEFINE A UV GRIDDRAW CURVES FROM DEFINED POINTS ON THE

UV GRID

DIVIDE THE CURVES INTO FOUR SECTIONS

CREATE TWO CIRCLES FROM TWO POINTS ON ONE CURVE AND ONE POINT ON THE OTHER CURVE

GET THE AREA OF THE SURFACE

GET THE CIRCLE RADIUS

DELETE ALL CIRCLES WITH A RADIUS GREATER THAN A FRACTION OF THE SURFACE

AREA

GET THE CENTER POINT OF THE

CIRCLEHIDE THE SURFACE

CREATE SPHERES OF DIFFERENT SIZES BY

MULTIPLYING THE CIRCLE RADIUS BY A SET VARIABLE

3 X 5

3 X 2O

3 X 40

3 X 50

5 X 5

BY CHANGING THE DIVISIONS OF U AND V ON THE GRID DIFFERENT OUTCOMES ARE CREATED.

*IN SOME CASES DUE TO THE SIZE OF THE FILE COMPUTERS WILL RUN OUT OF MEMORY BEFORE RENDERING THE IMAGE

5 X 20

5 X 40

10 X 5

10 X 20

25 X 5

25 X 50*

FINAL RENDERINGS

JOHANN SEBASTIAN BACH INSTITUTE

JOHANN SEBASTIAN BACH INSTITUTE

OBJECTIVE

TO CREATE AN INSTITUTE BY BLENDING A MORPHO GENETIC AND MORPHO DYNAMIC LOGIC TO CREATE A PLACE TO RESEARCH AND STUDY.

101 FREEWAY 101 FREEWAY VS. STREETS

SURROUNDING CIRCULATION METRO STOPS

LAUSD HS NO.9

CATHEDRAL OUR LADY OF THE

ANGELS

AHLMENSON THEATER

DORTHY CHANDLER PAVILLION

WALT DISNEY CONCERT HALL

MOCA

MARK TAPER FORUM

MORPHOGENETIC LOGIC

CONDITIONALLYSPIRALINGHELICOCIRCULATION

OBJECTIVE

CHOOSE AN ALGORITHM AND APPLY IT TO ONE ELEMENT OF THE BUILDING DESIGN WITH SCALE IN MIND

SCRIPT

Option Explicit‘Script written by <Arielle Rouleau>‘Script copyrighted by <USC Arch402al>‘Script version Wednesday, October 07, 2009 2:19:14 PM

Call Main()Sub Main() Dim constA, constB, Height, Num-Points, phi, rad, i, n Dim x, y, z

constA = Rhino.GetReal(“Value of first variable (a)”, 1) constB = Rhino.GetReal(“Value of second variable (b)”, 1)

NumPoints = Rhino.GetInteger(“How many points should it run thru?”,50)

Height = Rhino.GetReal(“height”)

phi = Rhino.GetReal(“Angle between points (phi)”, 30)

rad = Rhino.GetReal(“Radius”, 10)

ReDim points(NumPoints - 1)

‘added a counter c

Dim c : c = 0

For i = 0 To UBound(points) Dim arrPts

‘activate these lines if you want something more regular x=i*rad/4 * Sin(phi*i) y=i*rad/2 * Cos(phi*i) z=i*Height

‘leave these lines activat-ed if you like something messy; ‘ but substitute ‘rnd’ fac-tor with a logically if condition so that the mess makes actually sense ‘x=i*rad/4 * Sin(phi*i)*rnd ‘y=i*rad/2 * Cos(phi*i)*rnd ‘z=i* (1-Cos(phi))*rnd

arrPts = array(x,y,z)

If IsArray (arrPts) Then‘added a addpoint method to visualize your points Call Rhino.AddPoint(arrPts)‘extending the size of arrPointclt which each loopReDim Preserve arrPointclt(c)‘collecting all points in arrPointclt(c)arrPointclt(c) = arrPts‘counting +1 for each loop c = c +1

arrPointclt(c) = arrPts‘counting +1 for each loop c = c +1 End If If x > 50 Then x = 50

Next‘finally drawing the curve through the point collection Rhino.AddInterpCurve ar-rPointclt

End Sub

Option Explicit'Script written by <Arielle Rouleau>'Script copyrighted by <USC Arch402al>'Script version Wednesday, October 07, 2009 2:19:14 PM

Call Main()Sub Main() Dim constA, constB, Height, NumPoints, phi, rad, i, n Dim x, y, z

constA = Rhino.GetReal("Value of first variable (a)", 1) constB = Rhino.GetReal("Value of second variable (b)", 1)

NumPoints = Rhino.GetInteger("How many points should it run thru?",50)

Height = Rhino.GetReal("height")

phi = Rhino.GetReal("Angle between points (phi)", 30)

rad = Rhino.GetReal("Radius", 10)

ReDim points(NumPoints - 1)

'added a counter c Dim c : c = 0

For i = 0 To UBound(points) Dim arrPts

'activate these lines if you want something more regular 'x=i*rad/4 * Sin(phi*i) 'y=i*rad/2 * Cos(phi*i) 'z=i*Height

'leave these lines activated if you like something messy; ' but substitute 'rnd' factor with a logically if condition so that the mess makes actually sense x=i*rad/4 * Sin(phi*i)*rnd y=i*rad/2 * Cos(phi*i)*rnd z=i* (1-Cos(phi))*rnd

arrPts = array(x,y,z)

If IsArray (arrPts) Then 'added a addpoint method to visualize your points Call Rhino.AddPoint(arrPts) 'extending the size of arrPointclt which each loop ReDim Preserve arrPointclt(c) 'collecting all points in arrPointclt(c) arrPointclt(c) = arrPts 'counting +1 for each loop c = c +1 End If If x > 50 Then x = 50

Next 'finally drawing the curve through the point collection Rhino.AddInterpCurve arrPointclt

End Sub

usc_402_101809

conditionally recursing helico spiral circulationA helico-spiral may be expressed in terms of a single parameter Θ by writing r = F (Θ) and z = G(Θ). For a 3d Archimedean spiral these functions are simply F(Θ) = aΘ and G (Θ) = bΘ for given con-stants a and b.

To define a point on the surface one needs to specify how far along the spiral (using Θ) and how far round the semi-circle (using Φ).

r -> r + R sinΦz -> z + R(1- cosΦ)

In coordinate terms:(x, y, z) = (r cos Θ, r sin Θ, z)

Therefore

x (Θ, Φ) = (aΘ + R sinΦ) cos Θy (Θ, Φ) = (aΘ + R sinΦ) sin Θz (Θ, Φ) = bΘ + R(1-cos Φ)

r

R

R sin F

Q

F

Angl

e of

Rot

atio

n =

30

Height = 10 Radius = 10 Height = 50 Radius = 10Height = 10 Radius = 100 Height = 50 Radius = 100

Angl

e of

Rot

atio

n =

45

Angl

e of

Rot

atio

n =

Ran

dom

Get real numbers for the variables a and b

Set a limit for the function

Define an angle to use

Define a radius and height of the curve

x = i* (radius/4) * sin (phi *i)

y = i * (radius/2) * cos (phi * i)

z = i * height

Add an interpolated curve about the points

true / false

Function: r = a + bsin(Θ)

r = radius of the spirala = turns the spiral (real number)b = distance of the circles offset from each otherΘ = angle which the spiral turns

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10)

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10)

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10)

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10)

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10)

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10)

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10)

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10)

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10) x=i*rad/4 * Sin(phi*i)*rnd y=i*rad/2 * Cos(phi*i)*rnd z=i* (1-Cos(phi))*rnd

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10) x=i*rad/4 * Sin(phi*i)*rnd y=i*rad/2 * Cos(phi*i)*rnd z=i* (1-Cos(phi))*rnd

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10) x=i*rad/4 * Sin(phi*i)*rnd y=i*rad/2 * Cos(phi*i)*rnd z=i* (1-Cos(phi))*rnd

Height = Rhino.GetReal("height")phi = Rhino.GetReal("Angle between points (phi)", 30)rad = Rhino.GetReal("Radius", 10) x=i*rad/4 * Sin(phi*i)*rnd y=i*rad/2 * Cos(phi*i)*rnd z=i* (1-Cos(phi))*rnd

GET REAL NUMBERS FOR

THE VARIABLES A AND B

SET A LIMIT FOR THE FUNCTION

DEFINE AN ANGLE TO USE

DEFINE A RADIUS AND HEIGHT FOR

THE CURVE

TRUE / FALSE

X = I * (RADIUS/4) * SIN(PHI * I)

Y = I * (RADIUS/2) * COS(PHI * I) Z= I * HEIGHT

ADD AN INTERPOLATED

CURVE ABOUT THE POINTS

HEIGHT=10 RADIUS=100 ANGLE=30 HEIGHT=10 RADIUS=100 ANGLE=45

HEIGHT=50 RADIUS=100 ANGLE=30 HEIGHT=50 RADIUS=100 ANGLE=45

HEIGHT=10 RADIUS=100 ANGLE=RND

HEIGHT=50 RADIUS=100 ANGLE=RND

HEIGHT=10 RADIUS=10 ANGLE=30

HEIGHT=50 RADIUS=10 ANGLE=30

HEIGHT=10 RADIUS=10 ANGLE=45

HEIGHT=50 RADIUS=10 ANGLE=45

HEIGHT=10 RADIUS=10 ANGLE=RND

HEIGHT=50 RADIUS=10 ANGLE=RND

PRELIMINARY IDEAS

MORPHODYNAMIC LOGIC

SWELLING PIPESPROGRAM

OBJECTIVE

CHOOSE AN ALGORITHM AND APPLY IT TO ANOTHER ELEMENT WHICH RELATES TO EITHER THE SITEOR THE PROGRAM

SCRIPT

Option Explicit‘Script written by <Arielle Rouleau>‘Script copyrighted by <USC Arch402al>‘Script version Friday, October 30, 2009 3:01:53 PM

Call Main()Sub Main()

Dim aObjects : aObjects = Rhino.GetObjects(“Select Curves”, 4, True, False) Dim intSamples : intSamples = Rhi-no.GetInteger(“Number of Cross Sections”, 50, 5) Dim i Dim arrCrossSections() For i = 0 To UBound(aObjects) Dim crvObject : crvObject = aObjects(i) ‘ define number of sections based On crv length ‘Dim dblSegments : dblSeg-ments = Rhino.DivideCurveLength ( aObjects(i), 1) ‘Dim intSamples : intSam-ples = UBound(dblSegments)

Dim crvDomain : crvDomain = Rhino.CurveDomain(crvObject) Dim t, n, l

l = RN(10, 100) Dim CrossSectionPlane Dim crvCurvature, crvPoint, crvTangent, crvPerp, crvNormal n = -1

For t = crvDomain(0) To crvDomain(1) + 1e-9 Step (crvDomain(1)-crvDomain(0))/intSamples

Dim dblBendRadius : dblBendRadius = random(10,20) Dim dblPerpRadius : dblPerpRadius = random(10,20)

n = n+1 crvCurvature = Rhino.CurveCurvature(crvObject, t)

If IsNull(crvCurvature) Then crvPoint = Rhino.EvaluateCurve(crvObject, t)crvTangent = Rhino.CurveTangent(crvObject, t) crvPerp = Array(0,0,1)

crvNormal = Rhino.VectorCrossProduct(crvTangent, crvPerp)

Else crvPoint = crvCurvature(0) crvTangent = crvCurvature(1) crvPerp = Rhino.VectorUnitize(crvCurvature(4)) crvNormal = Rhino.VectorCrossProduct(crvTangent, crvPerp)

End If CrossSectionPlane = Rhino.PlaneFromFrame(crvPoint, crvPerp, crvNormal)ReDim Preserve arrCrossSections(n)arrCrossSections(n) = Rhino.AddEllipse(CrossSectionPlane, dblBen-dRadius, dblPerpRadius)

Next If n < 1 Then Exit Sub Call Rhino.AddLoftSrf(arrCrossSections)‘Call Rhino.DeleteObjects(arrCrossSections)

Per

pend

icul

ar r

adiu

s =

10

-12

curve divisions = 10 curve divsions = 50 curve divsions = 100 curve divisions = 200

Option Explicit'Script written by <Arielle Rouleau>'Script copyrighted by <USC Arch402al>'Script version Friday, October 30, 2009 3:01:53 PM

Call Main()Sub Main()

Dim aObjects : aObjects = Rhino.GetObjects("Select Curves", 4, True, False) Dim intSamples : intSamples = Rhino.GetInteger("Number of Cross Sections", 50, 5) Dim i Dim arrCrossSections() For i = 0 To UBound(aObjects) Dim crvObject : crvObject = aObjects(i) ' define number of sections based On crv length 'Dim dblSegments : dblSegments = Rhino.DivideCurveLength ( aObjects(i), 1) 'Dim intSamples : intSamples = UBound(dblSegments) Dim crvDomain : crvDomain = Rhino.CurveDomain(crvObject) Dim t, n, l

l = RN(10, 100) Dim CrossSectionPlane Dim crvCurvature, crvPoint, crvTangent, crvPerp, crvNormal n = -1

For t = crvDomain(0) To crvDomain(1) + 1e-9 Step (crvDomain(1)- crvDomain(0))/intSamples

Dim dblBendRadius : dblBendRadius = random(9,10) Dim dblPerpRadius : dblPerpRadius = random(9,10)

n = n+1 crvCurvature = Rhino.CurveCurvature(crvObject, t)

If IsNull(crvCurvature) Then crvPoint = Rhino.EvaluateCurve(crvObject, t) crvTangent = Rhino.CurveTangent(crvObject, t) crvPerp = Array(0,0,1) crvNormal = Rhino.VectorCrossProduct(crvTangent, crvPerp)

Else crvPoint = crvCurvature(0) crvTangent = crvCurvature(1) crvPerp = Rhino.VectorUnitize(crvCurvature(4)) crvNormal = Rhino.VectorCrossProduct(crvTangent, crvPerp)

End If CrossSectionPlane = Rhino.PlaneFromFrame(crvPoint, crvPerp, crvNormal) ReDim Preserve arrCrossSections(n) arrCrossSections(n) = Rhino.AddEllipse(CrossSectionPlane, dblBendRadius, dblPerpRadius)

Next If n < 1 Then Exit Sub Call Rhino.AddLoftSrf(arrCrossSections) 'Call Rhino.DeleteObjects(arrCrossSections) Next

End Sub

Function random(intLow,intUp) Randomize random = (intUp-intLow) * Rnd() + intLow End Function

Function RN(nMin, nMax) RN = Null If Not IsNumeric(nMin) Then Exit Function If Not IsNumeric(nMax) Then Exit Function If nMin >= nMax Then Exit Function Randomize RN = Int((nMax - nMin + 1) * Rnd + nMin)End Function

Per

pend

icul

ar r

adiu

s =

10

- 2

0

Per

pend

icul

ar r

adiu

s =

10

-50

Choose a spiral

Define the bend radius

Define the perpendicular radius

Choose number of divisions

Draw an ellipse at curve division

Loft ellipses

Per

pend

icul

ar r

adiu

s =

10

P

erpe

ndic

ular

rad

ius

= 1

0 -

20

P

erpe

ndic

ular

rad

ius

= 1

0 -5

0

Concert Hall

Lobby

Seminar Rooms

DepartmentDepartment

DepartmentDepartment

DepartmentDepartment

DepartmentDepartment

Department

Program:

Auditorim:- 2000sf- Most Public- 1st floor- Can have atrium opening- Place in the center / front of building

Seminar Spaces (8):- 200 sf / each- 20 x 15 x 10- Place on 1st / 2nd floor- Place not in main lobby but just off it

Concert Hall:- 27,000- Height 100’- Black box- Public space- 1st / 2nd floor access

Departments(8):- 2000 sf / each- 50 x 60 x 12- Semi public- Should blend into one another

Bend Radius

Per

pend

icul

ar R

adiu

s

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Dim intSamples : intSamples = Rhino.GetInteger ("Number of Cross Sections")Dim dblPerpRadius : dblPerpRadius = random(9,10)

Program Grouping Program on SpiralBase Spiral

LobbyConcert Hall

Seminar RoomsCirculation

Departments

Base Swell

swelling pipes

Base Swell

crvNormal = Rhino.VectorCrossProduct(crvTangent, crvPerp)

Else crvPoint = crvCurvature(0) crvTangent = crvCurvature(1) crvPerp = Rhino.VectorUnitize(crvCurvature(4)) crvNormal = Rhino.VectorCrossProduct(crvTangent, crvPerp)

End If CrossSectionPlane = Rhino.PlaneFromFrame(crvPoint, crvPerp, crvNormal)ReDim Preserve arrCrossSections(n)arrCrossSections(n) = Rhino.AddEllipse(CrossSectionPlane, dblBen-dRadius, dblPerpRadius)

Next If n < 1 Then Exit Sub Call Rhino.AddLoftSrf(arrCrossSections)‘Call Rhino.DeleteObjects(arrCrossSections)

CHOOSE A SPIRAL DEFINE THE BEND RADIUS

DEFINE THE PERPENDICULAR

RADIUS

CHOOSE NUMBER OF DIVISIONS

DRAW AN ELLIPSE AT CURVE DIVISION LOFT ELLIPSES

DIVISIONS=10 bRAD=10-12 DIVISIONS=50 bRAD=10-12 DIVISIONS=100 bRAD=10-12

DIVISIONS=100 bRAD=10-20 DIVISIONS=200 bRAD=10-20 DIVISIONS=10 bRAD=10-50

DIVISIONS=200 bRAD=10-12 DIVISIONS=10 bRAD=10-20 DIVISIONS=50 bRAD=10-20

DIVISIONS=50 bRAD=10-50 DIVISIONS=100 bRAD=10-50 DIVISIONS=200 bRAD=10-50

PRELIMINARY IDEAS

FINAL DESIGN

Concert Hall

Lobby

Seminar Room

Seminar Room

Seminar Room

To Departments

To Bridge

To Departments

PlanN1 2 4 8

Section

0 1 2 4 8

Office

Classroom

DepartmentCommon Area

Concert Hall

Lobby

Seminar Room

Seminar Room

Seminar Room

To Departments

To Bridge

To Departments

PlanN1 2 4 8

Section

0 1 2 4 8

Office

Classroom

DepartmentCommon Area

building and site diagrams

Central LA High School Number Nine

Cathedral of Our Lady of the Angels

Mark Taper Forum

Ahmanson Theater

Dorthy Chandler Pavillion

Walt Disney Concert Hall

MOCA

Johann Sebastian Bach Institute

101 Freeway Freeway vs. Streets

Public Transportation Local Circulation Grand Street Culture

Pure Circulation vs Program and Circulation Program

LobbyConcert Hall

CirculationSeminar Spaces

Departments

nTrTransportationubblic Pu

Pr gram and Circulation Programmm

Local CirculationticL

Pure Circulationc vs Program andPr

LobbyConcert Halln

CirculationCSeminar Spacesa aciSS

Departmentsp en

Grand Street Curaand SSt e t CCultureC

Public vs. Semi Public vs. Private

PROGRAM PUBLIC VS. PRIVATE PROGRAM VS. CIRCULATION

SCRIPT

Option Explicit‘Script written by <Arielle Rouleau>‘Script copyrighted by <USC Arch402al>‘Script version Wednesday, November 18, 2009 3:07:03 PM

Call Main()Sub Main() Const rhObjectSurface = 8 Dim strsurface, Udomain, Vdomain, Uparam , Vparam, arrpoint , i , j, secu , secv secu = 20 secv = 20 ReDim collec(secu,secv) ‘inputs strsurface = Rhino.GetObject (“sel the surface”,rhObjectSurface) If isnull (strsurface) Then Exit Sub ‘In Case i want To escape script ‘catch the surface the min And the max In both directions u,v Udomain = Rhino.SurfaceDomain(strsurface,0) Vdomain = Rhino.SurfaceDomain(strsurface,1) ‘looping For i = 0 To secu

For j = 0 To secv Uparam = Udomain(0) + i* ((Udo-main(1) - Udomain(0))/secu) Vparam = Vdomain(0) + j* ((Vdo-main(1) - Vdomain(0))/secv)‘here we “fix” the point On the curve arrpoint = Rhino.EvaluateSurface(strsurface, array(Uparam, Vparam)) collec(i,j)=arrpoint Next Next

Dim newpoint,newpoint2, newpoint3, np1, frame

For i = 0 To secu -1 For j = 0 To secv -1 newpoint = collec (i,j) newpoint2 = collec (i+1, j+1) newpoint3 = collec ( i+1,j) np1 = collec (i,j+1)

Call mifunctionFrame(newpoint,newpoint2, newpoint3, np1) NextNext End Sub

Function mifunction (newpoint, newpoint2, newpoint3) Call Rhino.addSrfPt (array (new-point, newpoint2, newpoint3) )End FunctionFunction mifunction (newpoint, np1, new-point2) Call Rhino.addSrfPt (array (new-point, np1, newpoint2) )End Function

Function mifunctionFrame(newpoint,newpoint2, newpoint3, np1)

‘Dim Curve1: Curve1 = Rhino.Ad-dCurve (Array(newpoint,newpoint3, new-point2, np1, newpoint), 1) Dim Curve2: Curve2 = Rhino.Ad-dCurve (Array(newpoint,newpoint3, new-point2, np1, newpoint), 3) ‘loft as usual ‘Call Rhino.AddLoftSrf(Array(Curve1,Curve2))End Function

The algorithmic logic that I chose to partner spirals with is conditional recursion. This can be applied in the circulation system in ways such as if there is a room that has an occupancy of over 600 people it deserves another spiraling path either in or out of the space.

The definition of an algorithm states that it is “a precise rule (or set of rules) specifying how to solve a problem” (Google Dictionary). Conditional recursion is then used to take the linearity of the spiral and make it non-linear.

Conditional recursion is practical in building design because whether the human psyche is conscious of it or not, the algorithmic logic is used almost in all elements of design and building code. Most codes read for every x amount of people or square feet y is needed. These conditional statements mirror many of those that we are able to script. Bach used conditionally recursioning spirals in his music especially when it came to pitch. In cer-tain songs the pitch of the notes spirals up ever increasing until a limit is reached and the song ends. The morpho-dynamic logic applied to this institute is swelling. By taking a curve and expanding and contracting space within it allows program to be applied. This system is run using conditional recurrsion in conjunction with program space allowances. If a large programmatic element is needed the spiral will swell to encompass the space. These swollen tubes are then carved out to allow light and air to pass through the spaces. Like a seashell this project takes a spiral and expands it according to out-side factors. Spaces are divided and swollen according to a set of parame-ters yet they still retain simplicity and beauty. By partnering these two ideas I believe that I will be able to create a successful space for people to come learn, research, and enjoy the work of Johann Sebastian Bach.

This semester I plan on applying a spiral and swelling theory to the Johan Sebastian Bach Research Institute.

Spirals appear all around in everyday life, from a paper clip on your desk to a headphone cord attached to your ear, spirals are everywhere. The defini-tion of a spiral is “a plane curve traced by a point circling about the center but at increasing distances from the center” (Google Dictionary). Spirals though may also be vertical such as in old wall telephone cords. These types of spirals start at a point and have the same radial dimension yet just differ from each other in the z dimension. There are many different math-ematical ways at coming about spirals each with their own set of rules and functions.

The base spiral that I chose to use for this project is a helico-spiral. A he-lico spiral is derived from a parametric equation in a cylindrical coordinate system. In the x and y directions one may see a logarithmic spiral in plan. In plan z = 0, yet in my base spiral the z factor sets the floor height. In this function r and z are exponential functions of the parameter t and usually have the same base causing the center or similitude to be located at the origin point of the xyz coordinate system. By changing the values of Theta, r and z in the equation a different spiral may be achieved. Theta defines the angle of rotation in arithmetic progression and the radium r forms a geometric progression with the scaling factor of phi.

I plan on using this spiral system spiraling mainly in circulation yet use this as a base system for incorporating skin, program, and tectonic systems. Due to the fact that there are an infinite number of types of spirals a differ-ent type can be applied to each system with out the monotony of using the same formation. In this I can apply this theory to all aspects of the building.