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