Project Description: light seeking machines are programmed to push grounded bricks towards light cast onto the floor.  (eg. the sunlight coming through a window).  As the sun rises and sets the light path moves and the bricks follow, thus creating emergent patterns. Lighting simluations via Ecotect will be used to: 1.  Study how brick placement can change the daylight factor 2.  Speculate and map the potential “buildable” area 3.  Help calibrate the sensitivity of the machine’s light sensors (eg. only drive towards x range in lumens) Daylight Factor – Analysis Grid: This study shows how will the number of bricks, it’s placement and material effect the daylight factor of a space? Using Tedngai’s “Ecotect Analysis Grid 2 Rhino” script, DF analysis data was converted to a surface as a means of 3D mapping “buildable“ area.  The surface peaks and valleys represent high and low lumen levels, and or the absence or prsence of a brick. Sample Ecotect Data: 1.2768, 1.28509, 1.28971, 2.2466, 3.2209, 6.85491, 13.5377, 16.4381, 17.3614, 19.4248, 19.1552, 17.8918, 17.594, 14.5499, 6.93391, 2.14391, 2.20469, 1.53283, 1.28647, 1.27194, 2.30118, 2.73324, 2.74547, 3.41999, 6.16329, 8.74706, 12.8397, 15.7009, 16.3073, 16.8703, 17.0259, 16.4576, 14.7066, 12.666, 8.22195, 4.83835, 2.97473, 2.02677, 2.40924, 2.30426, 2.0747, 2.02002, 2.69397, 3.96526, 5.18788, 7.06709, 9.70132, 11.1143, 12.1092, 13.5396, 11.7393, 12.2442, 11.5015, 9.74278, 6.9234, 4.75648, 3.81966, 3.62953, 2.42884, 2.75764, 1.83838, 1.94818, 2.2208, 3.75749, 4.04008, 5.90577, 7.41432, 8.33884, 9.43079, 9.25285, 9.03335, 8.62411, 8.31394, 7.14627, 5.73228, 3.91285, 3.94581, 3.76494, 2.97021, 2.5216, 1.89475, 2.14126, 3.055, 3.08061, 2.89965, 4.04766, 5.57898, 6.80126, 6.36056, 6.40134, 6.67575, 7.15078, 5.91055, 5.69576, 4.27529, 3.05747, 2.99106, 3.09462, 2.20309, 2.05633, 1.85562, 2.03552, 3.10559, 2.49052, 3.13657, 3.41528, 5.54401, 5.92736, 6.36552, 5.90912, 5.88865, 6.22181, 6.2505, 5.57344, 4.11307, 3.71256, 3.17819, 2.73857, 1.96613, 3.06346, 2.01836, 2.02988, 2.26621, 2.35518, 3.38627, 3.344, 4.12191, 3.99017, 4.26249, 4.88275, 4.80359, 4.77441, 4.54185, 4.21487, 3.04055, 3.04184, 2.35258, 2.26329, 1.94979, 1.9444, 1.90657, 2.31015, 2.42426, 2.38327, 2.82048, 2.84921, 3.04882, 3.74024, 3.54746, 4.0733, 3.77888, 3.4448, 3.30655, 3.87451, 3.02156, 2.93381, 3.04403, 2.37739, 2.16169, 1.75126, 1.79731, 2.16931, 2.24606, 2.35343, 2.81032, 2.36299, 3.24828, 3.10861, 3.5611, 3.06863, 3.19607, 3.57656, 3.15272, 3.18106, 2.37691, 2.42856, 2.24275, 1.9301, 2.16177, 1.62165, 2.13292, 1.90805, 1.95094, 2.0845, 2.36087, 2.33945, 2.7065, 2.82244, 2.27793, 2.52459, 2.57047, 3.29654, 2.67105, 2.57165, 2.75952, 2.37649, 1.95443, 1.97441, 1.92028, 1.77821, 1.41463, 1.58291, 2.00339, 2.00491, 2.26463, 1.8814, 2.3462, 2.30018, 2.37029, 2.60315, 2.60932, 2.44595, 2.74773, 2.57349, 2.31259, 2.23082, 2.06018, 2.02529, 1.9747, 1.72442, 1.6252, 1.88378, 1.61556, 2.26583, 1.98621, 2.32065, 2.27648, 2.52604, 2.45433, 2.76427, 2.46203, 2.74566, 3.12017, 3.00515, 2.29023, 1.89043, 1.71414, 1.86376, 1.57139, 1.4298, 1.56866, 1.52367, 1.86996, 1.47389, 2.20521, 1.97464, 2.366, 0, 2.96831, 0, 0, 3.04562, 0, 0, 2.24489, 1.906, 1.79433, 1.72464, 1.61449, 1.58028, 1.59958, 1.44488, 1.46463, 1.82442, 1.55283, 1.95514, 2.27154, 2.33628, 2.42075, 2.46626, 0, 2.10981, 1.96945, 2.27968, 2.1647, 1.9145, 1.54681, 1.75096, 1.45142, 1.45571, 1.37694, 1.41833, 1.47806, 1.76558, 1.86742, 1.41017, 2.28152, 1.92666, 0, 2.4009, 2.37541, 0, 1.97827, 1.96118, 1.95548, 1.57764, 1.83329, 1.42455, 1.40263, 1.56174, 1.50026, 1.39591, 1.39619, 1.53413, 1.49531, 1.43636, 1.8753, 1.84723, 2.19027, 1.90457, 0, 1.83741, 1.63231, 1.77766, 1.56946, 1.5087, 1.50814, 1.50956, 1.46052, 1.57554, Rhinoscript to Convert Ecotect Data:

Option Explicit
'Script written by Ted Ngai    Apr 2008
'This work is licensed under a  Creative Commons Attribution-Share Alike 3.0 United States License.
'

http://creativecommons.org/licenses/by-sa/3.0/us/


Call ReadPts()

Sub ReadPts()

        Dim strFilter, strFileName
        strFilter = "Text File (*.txt)|*.txt|All Files (*.*)|*.*||"
        strFileName = Rhino.OpenFileName("Open Point File", strFilter)
        If IsNull(strFileName) Then Exit Sub

        Dim objFSO, objFile, objFileCC
        Set objFSO = CreateObject("Scripting.FileSystemObject")

        On Error Resume Next
        Set objFile = objFSO.OpenTextFile(strFileName, 1)
        Set objFileCC = objFSO.OpenTextFile(strFileName, 1)
        If Err Then
               MsgBox Err.Description
               Exit Sub
        End If

        'Read all the numbers into an array
        Dim txt, a
        txt = objFile.ReadAll
        a = Split(txt,",")
        If Not IsArray(a) Then Exit Sub
        'Rhino.Print Ubound(a)
        'Rhino.Print a(0)

        'Check for number of columns
        Dim col, row, b
        row = 1
        b = objFileCC.ReadLine
        col = Split(b,",")
        'Check for number of rows
        Do While objFileCC.AtEndOfStream <> True
               objFileCC.SkipLine
               row = row+1
        Loop
        Rhino.Print "U : " & Ubound(col)
        Rhino.Print "V : " & row

        'create points
        Dim u,v, x, y, z, n,nMax, arrPoints()

        'Find max value
        Dim aMax, aTemp, k
        ReDim aTemp(row*Ubound(col)-1)
        k = 0
        For v = 1 To row
               For u = 1 To Ubound(col)
                       aTemp(k) = CDbl(a(k))
                       k = k+1
               Next
        Next
        aMax = Rhino.SortNumbers(aTemp, False)

        'assign value to x,y,z
        n = 0
        nMax = row*Ubound(col)
        ReDim arrPoints(nMax-1)
        'Call Rhino.EnableRedraw(False)
        For v = 1 To row
               For u = 1 To Ubound(col)
                       'Scale the u v points or apply mathematical other functions to transform the points
                       x=10*u
                       y=10*v
                       z=(CDbl(a(n))/aMax(0)*50)-55
                       arrPoints(n) = array(x,y,z)
                       n = n+1
               Next
        Next

        Dim UVcount(1)
        UVcount(0) = Ubound(col)
        UVcount(1) = row
        If Ubound(col) > 1 And row > 1 Then
               Rhino.AddsrfPtGrid UVcount,arrPoints
        Else
               Rhino.Print "Cannot make surface"
        End If
        'Call Rhino.EnableRedraw(True)

        objFile.Close
        Set objFile = Nothing
        Set objFSO = Nothing

End Sub

Once in Rhino, the infomation was altered via the mesh patch command in order to make a more legible surface Results from Data: Further Alterations: The data currently shows the presence of bricks as valleys and the absence of bricks as peaks.  Further alterations to the script itself or to the surface in Rhino in order to reverse the values.  By doing so, this information can simulate what the brick composition may look like.