Precision and Recursion

Peiling Jiang

It has relegated architects to producing representations of architectural intent while handing over the responsibility of means and methods of making to builders. With recent advances in digital technologies, this relationship is once again becoming entangled. In doing so, it brings into question the renewed roles of architects, designers, computers, and makers. This course disputes the compartmentalization present in architectural practice today. Through the tools of computation and fabrication, it empowers students to design as architect, engineer, and craftsman. (MIT 4.118 Creative Computation, Brandon Clifford)


This solver focus on recursive balance, with which digital software could compute and solve physical problems nearly impossible for human beings to calculate. The goal is to make the Center of Mass of the whole project right above (or below) the hanging point with dynamic modeling.

All Start with Points

Points Connected Points

The whole challenge is based on the position and relationships between 9 points (6 moving points and 3 bases). At the beginning of the challenge, a Random( ) function is implemented to shift the points vertically to make non-copyable different initial settings. The COM (Center of Mass) is starting to change from this phase.

Random Moves

Then the computation steps into the Recursive part. The whole computation is inside Grasshopper / HoopSnake function, I also wrote a few python elements to meet some other needs.

Grasshopper Overview
Vecter Compare

The function will first compare the six angles between COM-to-Goal-Point Vector with six other vectors pointing to the direction of Moving Points. As geometries proved for us long time ago, the smaller the sin(α) (α is the angle) is, the greater the particular vector will affect the main vector. So did I calculate the responsive moving distance: the smaller angle is, the longer to move. After each move, COM will come closer to the goal point, and the moving directions and distance will adjust each time based on the latest computation.

First Two Row: same Goal Point, random height.
Second Two Row: same arbitrary height, different Goal Point.

After several sample moves shown above, I tried to understand the effect caused by the vertical height and the position of Goal Point. Obviously, the Goal hanging point affect the whole system the most.

Model One
Model One
Model Two
Model Two

Experiment One: Move Only One Level of Points

The whole moving-point system can be divided into two sets of points: Inner Lower Level (1), and Outer Higher Level (2). In this extra experiment, I try to move only one set of points, and see how will the final form change.

Level Explaination
Levels of Moving Points
Experiment One
Initial Status / Move Only Level 1 Points / Move Only Level 2 Points
Model Three
Model Three

Experiment Two: x + y + n

x + y

The HoopSnake Recursion is using “x + y + n” (x: Feedback from HoopSnake, y: Weighted Moving Distance, n = 0 initially) as a necessary component to compute the future feedbacks. And during this experiment I’m gonna to reveal the relationship between n and final object’s formation.

Experiment Two Model Four
Model Four: x + y - 0.8

Experiment Three: Recursively Move Twice

Since the whole geometry is centro-symmetric, there are actually only two equivalent areas of Goal Point, and the rest are just repeating. However, as this is dynamic modeling, why not try to move Goal Point at the end of first Recursion and let the solver run a second round? Through this way, 22 different situations are created.

Experiment Three Move Model Five
Model Five: Move Twice (A6 - B4)

This exercise focuses on curvature and continuous precision. I abstract a G2 continuous curvature from raw Electrocardiography (ECG) curves and turned it into an assembly that could self-locked when loaded in one direction.

From Heart Beats

Initial Curves

Then I started to refine and abstract the curve, beginning with converting the noisy curve into G0 straight polygon lines, and match new G2 control points on those lines or their extension lines. To avoid straight none-curvature lines in the final abstraction, I didn't simply cut the corners and blend the lines. Addition to that, I didn't directly use intersection points as control points which could cause a great loss of information.

Refine 1

Then I started to laser cut the first set of assembly models and check if they could be successfully loaded when press on the side. The result was positive. Thus, I continued to simplify and made the final assembly curvature.

Final Curve
2D Assembly

When implementing the curve to the final 2D assembly, I opened a small gap on the “shield” side to make sure the structure can be effortlessly assembled on the same plane. Then, two parts will “bite” each other and fixed when press on one side, while easily open when loaded on the other side.


FAKE Circle

You can never draw a perfect circle with control-point curve, but an infinitely close one. When control points n = 32, the radial error in the approximation will be about 0.0273% of the circle’s radius, which is, under tolerance, the same as a real circle.


Imagine made out of solid materials, when lifted, because of gravity, the circle will always be on the tendency of expand. I think I find a perfect way to deploy “one-side-load” assembly system…


Rotating the polygon for 30 degrees (n = 12), and connecting two sides, I created a front-to-end recursive system in which every part can connect and feed each other in the circle.

Framing and Mesh through Waverbird
When hanging, each part is dragging itself out.

Ideally, parts will finally form a fixed sturdy ring. However, due to the sturdiness and friction factor of material used for printing, the physical model finally survived to 7 and… crashed.


Exercise 2 in PDF Exercise 1a in PDF Exercise 1b in PDF Learn about Weaverbird