🛣️Road Generation
The street generation algorithm automatically generates a desired total number of streets. The streets are separated into a main road and subsequent smaller road network. The main road is taken from the medial axis of the input boundary curve. A Medial Axis is defined as the collection of points within the polygon that are closest to more than one of the edges. It is an effective descriptor of shape (and it was referred to as the "skeleton" of a figure). To detect the medial axis of a polygon, one method is to use a Voronoi diagram and select all the vertices and edges within the polygon. Afterwards a main direction vector is determined and the vertices that are within the deviation tolerance are selected to generate the main road curve.
After the main curve is determined, the sub-streets network is created through sampling with a tree data structure, where every street segment is a tree node. In every iteration, a node is randomly selected from the tree to be the parent node.
⛲Parcel Extraction
After the streets are generated, closed polygons are extracted from the street pattern. The polygons that are above the minimum area requirement would be used for building generation, while the rest can be treated as parks or other public spaces.
🏢Building Generation
With the appropriate parcels, the building generation used the algorithm proposed in the paper), “Automated Parametric Building Volume Generation: A Case Study for Urban Blocks” by Osintseva et al. (2020). The method starts with an initial building type—in this case I used the “blocks” type—and apply different action rules through a sampling process with a user-defined number of iterations. There are a total of four rules implemented in this project: Setback, Open Edge, Yard Building, and Tower. “Setback” places setbacks on the perimeter of the building to create entrance or plazas; “Open Edge” deletes one edge of the block; “Yard Building” places additional buildings in the inner courtyard of the block; “Tower” places additional floors on the perimeter of the block to form towers.
✨Project Highlights
✏️Takeaways
I was able to implement a generative workflow for approaching urban lots, through which I learned about medial axis and how to implement a tree data structure. Moving into the future, one aspect this project can improve on is establishing more realistic (or goal driven) rule for building generations. Another aspect is how to generate more realistic street conditions, which may involve filtering out irregular shaped lots.