Architecture 402al Portfolio
-
Upload
arielle-rouleau -
Category
Documents
-
view
212 -
download
0
description
Transcript of Architecture 402al Portfolio
ARIELLE ROULEAUARCHITECTURE 402
PORTFOLIO FALL 2009NON-LINEAR AGGREGATIONS WITH ROLAND WAHLROOS-RITTER
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)**
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
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
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
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)
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
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
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.