## Exploration with python in rhinoceros This work was created by looking at the inherent patterns and structures found in nature. Researching the makeup of organisms brings to light the complexities of recursive algorithms, L systems, and cellular automatae that are all found in the natural world. Bacteria is an element found in nature that is composed of a parametric structure. An algorithm based design process was used to look further into the structure of bacteria and various scripting tools were used to replicate the structure through visual examples. Python language was the most appropriate tool to generate the digital geometry in this example, as well as Rhino and various other 3D modeling software.

The code below generates curves that propagates and scale themselves to generate the recursive structure. The user has to generate the curve guide and the script will autamitcally scale and rotate. The first challenge was to create a 2D visual example of the cell structure; once it was recreated digitally, a laser cutter was used to etch multiple sheets of acrylic which were then laminated within a petri dish to create a layered visual example of the structure. ```
import rhinoscriptsyntax as rs

def InitialCrv():
pts = rs.GetPoints('pick pts',1) # Pick points to generate curve
return curveID

def dividedSpline (input):  # Divides the curve into gements
NewCurve = rs.DivideCurve(input, 50, True,True)
return NewCurve

def bodyShape (Spl):        #This function creates the body
for i in range (0,51):
half =  rs.DivideCurve(body, 2, True, True)

return half
def VectorFind (input):
points = rs.DivideCurve(input, 50, True,True)
vectorList = []
vectorList2 = []
param = 0

for i in points :   #

#print reverseVector
param += 0.02
vectorList.append (unitizedVector)
vectorList2.append(reverseVector)

return [vectorList, vectorList2]

def OffsetPt ( vectors,points):

newPts = []
for i in range(0,51) :
vectors[i] = rs.VectorUnitize(vectors[i])
vectors[i]*=5

endPts = rs.MoveObject(pt, vectors[i])
newPts.append(endPts)

newPts1 = []
for i in range(0,51) :
vectors[i] = rs.VectorUnitize(vectors[i])
vectors[i]*= -5
newPts1.append (pt1)

for i in range(0,51):
result = [ newPts, newPts1, endPts]
return  [ newPts, newPts1, endPts ]

def makeNewWorm():
output = InitialCrv()
pts = dividedSpline (output)
vect = VectorFind(output)
rightPt = OffsetPt(vect, pts)
leftPt = OffsetPt(vect, pts)
bod = bodyShape (pts)
newBody (bod,rightPt,leftPt)

makeNewWorm()
```