Blossom of Triangle Form and Algorithm Project PennDesign Arch 743 Research Seminar: Form & Algorithm Fall 2016 University of Pennsylvania Dept of Architecture critics: Cecil Balmond Ezio Blasetti student group: Yijia Wang Fangjie Guo Xi Chen Kaikang Shen Siyang Lv

Nature has its specific growing logic. Inspired by the molecule binding and combination logic, our project explores a novel ruleset. Our ruleset contains both two dimensional and three dimensional transformation, the original form is a single triangle and it grows and transforms according to our ruleset, this has resulted in a beautiful blossom-like flower which is composed of large numbers of triangles, and the form of our project hasformal languages, surface articulations, complex space.

0.0. 0.1. 0.2. 0.3. 0.4.

Blossom of Triangle

1

Inspiration of project 2D ruleset Computational drawing Codes and GH script Photographs of model

Inspiration of project

Water molecule structure, the angle of molecule chain.

( Referenced photos are from websites.)

Nature has its specific growing logic. Inspired by the molecule binding and combination logic, our project explores a novel ruleset. Our ruleset contains both two dimensional and three dimensional transformation, the original form is a single triangle and it grows and transforms according to our ruleset, this has resulted in a beautiful blossom-like flower which is composed of large numbers of triangles, and the form of our project hasformal languages, surface articulations, complex space.

2

2

Blossom of Triangle

2D ruleset

V1 (v1,j)

midpoint create next generation

Our ruleset starts with three points and the triangle made up by those points. We pick up the center of the triangle, then connect it to midpoint of every edge. Now we get 3 vectors. We push the center point out along those vectors, using a variable x to control the lenth of vector, as a result, we get 3 new points. By connecting them to points of old generation, 3 triangles of new generation are created. Making it to loops is our ruleset in 2 dimension.

Blossom of Triangle

3

Computational drawing - 2D

n: step number j: length of vector connecting midpt and newpt

n=0, j=1

n=1, j=1

n=2, j=1

4

4

n=3, j=1

Blossom of Triangle

n=4, j=1

n=5, j=1

Blossom of Triangle

n=6, j=1

5

n=7, j=1

n=0, j=1

n=1, j=1

n=2, j=1

6

6

n=3, j=1

Blossom of Triangle

n=4, j=1

n=5, j=1

Blossom of Triangle

n=6, j=1

7

n=7, j=1

n=0, j=2

n=1, j=2

n=2, j=2

8

8

n=3, j=2

Blossom of Triangle

n=4, j=2

n=5, j=2

Blossom of Triangle

n=6, j=2

9

n=7, j=2

n=0, j=2

n=1, j=2

n=2, j=2

10

10

n=3, j=2

Blossom of Triangle

n=4, j=2

n=5, j=2

Blossom of Triangle

n=6, j=2

11

n=7, j=2

n=0, j=3

n=1, j=3

n=2, j=3

12

12

n=3, j=3

Blossom of Triangle

n=4, j=3

n=5, j=3

Blossom of Triangle

n=6, j=3

13

n=7, j=3

n=0, j=3

n=1, j=3

n=2, j=3

14

14

n=3, j=3

Blossom of Triangle

n=4, j=3

n=5, j=3

Blossom of Triangle

n=6, j=3

15

n=7, j=3

n=0, j=4

n=1, j=4

n=2, j=4

16

16

n=3, j=4

Blossom of Triangle

n=4, j=4

n=5, j=4

Blossom of Triangle

n=6, j=4

17

n=7, j=4

n=0, j=4

n=1, j=4

n=2, j=4

18

18

n=3, j=4

Blossom of Triangle

n=4, j=4

n=5, j=4

Blossom of Triangle

n=6, j=4

19

n=7, j=4

n=0, j=4

n=1, j=4

n=2, j=4

20

20

n=3, j=4

Blossom of Triangle

n=4, j=4

n=5, j=4

Blossom of Triangle

n=6, j=4

21

n=7, j=4

n=0, j=4

n=1, j=4

n=2, j=4

22

22

n=3, j=4

Blossom of Triangle

n=4, j=4

n=5, j=4

Blossom of Triangle

n=6, j=4

23

n=7, j=4

Computational drawing - 3D To make it three dimensional, we employ a vector in normal direction of triangles of old generation, using a variable j to control it. By changing the value of x and j, triangles are able to grow larger or smaller by generations, as well as to spread thicker or flatter.

x: distance in Z direction

n=0, j=2, x=-10, x/2j=1

n=3, j=2, x=-10, x/2j=1

n=1, j=2, x=-10, x/2j=1

n=2, j=2, x=-10, x/2j=1

n=4, j=2, x=-10, x/2j=1

24

24

Blossom of Triangle

n=0, j=2, x=-5, x/2j=1

n=3, j=2, x=-5, x/2j=1

Blossom of Triangle

n=1, j=2, x=-5, x/2j=1

n=2, j=2, x=-5, x/2j=1

n=4, j=2, x=-5, x/2j=1

25

Different patterns of flowers

26

26

Blossom of Triangle

Blossom of Triangle

27

Trajectory of points and lines

28

28

Blossom of Triangle

Blossom of Triangle

29

Sections of front view

30

30

Blossom of Triangle

Blossom of Triangle

31

Codes and GH script

32

32

Blossom of Triangle

Blossom of Triangle

33

mport rhinoscriptsyntax as rs import math def push(line,center,tri,j,x): newpts=[] midpt=rs.CurveMidPoint(line) v1 =rs.VectorCreate(midpt,center) v1 =rs.VectorScale(v1,j) normal = rs.CurveNormal(tri) normal = rs.VectorScale(normal,x) v2 = rs.VectorAdd (v1,normal) print v2 midpt=rs.PointAdd(midpt,v2) newpts.append(rs.CurveEndPoint(line)) newpts.append(midpt) newpts.append(rs.CurveStartPoint(line)) newpts.append(newpts[0]) newtri=rs.AddPolyline(newpts) return newtri

alltri=[] curgen=[] oldgen=[] pts.append(pts[0])

for i in range(n):

tri1=rs.AddPolyline(pts) alltri.append(tri1) center1=rs.CurveAreaCentroid(tri1) center1=center1[0] lines=rs.ExplodeCurves(tri1) for line in lines: oldgen.append(rs.CurveMidPoint(line)) newtri=push(line,center1,tri1,j,x) alltri.append(newtri) curgen.append(newtri)

34

newgen=[] oldmidpts=[] for tri in curgen: lines=rs.ExplodeCurves(tri) center=rs.CurveAreaCentroid(tri)[0] for line in lines: midpt=rs.CurveMidPoint(line) a=0 for oldmidpt in oldgen: if midpt!=oldmidpt: a=a

34

else: a=a+1 if a==0: newtri=push(line,center,tri,j,x) alltri.append(newtri) newgen.append(newtri) oldmidpts.append(rs.CurveMidPoint(line)) j = j/(i+1) x = x*x2jRatio/(i+1) curgen=newgen oldgen=oldmidpts

Blossom of Triangle

Photographs of model

Blossom of Triangle

35

36

36

Blossom of Triangle

Blossom of Triangle

37