Issuu on Google+



Fernando Ghelfi University of Melbourne Semester 2 / 2012






Processing sketch study on timelapsed occupation of screen with particles based on previous particle position. sketch #A2.2

Fountain pen ink studies on wet cardboard. Frei Otto , Occupying and Connecting, (Stuttgart/London, Axel Menges, 2009), 86

“The pattern of energy flow through living forms, and through all the forms of human culture, the networks of cities and states, is subject to many fluctuations and perturbations. The flow is modified by ‘feedbacks’, but occasionally there is such an amplification or inhibition that the system must change, must reorganize or collapse.” Michael Weinstock , The Architecture of Emergence, (West Sussex, John Wiley & Sons, 2010), 29

What is territory? How do mankind go about occupying new spaces - forming villages, towns, cities and expanding them into what is known today as megacities? Throughout history cities and living forms colonies depended on a fundamental element for their own existence: energy. It can be harvested from nature in a variety of sources: solar, wind, water, etc. For their survival, cities rely largely on a combination of available ecological resources. In their absence, cities collapse into extinction, forcing inhabitants to migrate to areas where nature can still provide means of minimal survival1. Conversely, settlements thrive in environments in which are suitable for their liveability; abundance in food, water, suitable air /water temperature, capability for stable reproduction. When the surrounding natural environment becomes too severe or too saturated, species are required to change their behaviour within the same or following generations. In the case of cities growth, architects and urban designers must then embrace other disciplinary aspects in addition to the built environment; the understanding of the complexity of human social condition, ecological and economic systems – as well as their constant evolution – must become a central role to their design process aiming to be effectively sympathetic in form and function to address current concerning issues of overpopulation, oversaturated levels of urbanization and lack of provision for public housing, most specifically in developing and un-developed countries.


Michael Weinstock , The Architecture of Emergence, (West Sussex, John Wiley & Sons, 2010), 186

i Computation and Architecture

From around the 80’s onwards, the architectural creativity - and subsequently its design - was more often than not, being bounded by what was actually possible to achieve in computer aided graphics. With the arrival of CAD software, architectural practices were able to accelerate the process of - arguably improving though - architectural design and facilitate mass development of drawings without having to hire hundreds of draftspersons manually working in drawings boards, which was the case of several large practices. This was a big leap in the construction industry as a whole since engineers had a much quicker calculating tool to play with. Today, architects are facing a equally challenging plunge into the digital world. Parametric and generative design are opening a new door of opportunities to simulate real-world conditions on-screen whilst having real-time interaction with the models. Algorithmic codes can interpret simple forms and repeat simple interactions between those forms and turn them into complex tri-dimensional structural forms. Following this trend, and perhaps not coincidentally, a wave of architects are entering an exciting, yet unknown in terms of creative boundaries, path were the inspiration for these algorithmics codes comes from Nature itself. A relativily new science socalled “emergence” has become a subject of investigation across inter-disciplinary fields; including philosophy, meteorology, topography, biology, physics, chemistry, to name a few; and explores how natural phenomena are, in almost all cases, intertwined as much with its elements than with its surrounding environment. This new framework of complex layers are transforming both the processes and the results in which architectural forms are generated. Whereas only a few were able to provide this type of vision to the architectural scene in the past, with today’s scripting-based software, any architect or designer with interest in this area could learn, contribute and perhaps shape, what it might be, one of the greatest and most significant transformations in built forms over centuries of architecture history.

ABOVE: Parametric modelling generated in Processing by Michael Piasecki [] TOP: Pattern of sea snail shells

Mur Island by Acconci Studio in Graz, Austria Alejandro Bahamon & Patricia Perez, Inspired by Nature, (New York/WW Norton & Company, 2007), 98

Abandoned city of Khara-Khoto, Mongolia. The changes in the local climate generated a full collapse of the city about 700 years ago. Michael Weinstock , The Architecture of Emergence, (West Sussex, John Wiley & Sons, 2010), 202

“City forms are material constructs that are composed of a spatial array of dwellings, a pattern of streets and public spaces together with differentiated buildings of varying sizes associated with a regulation of energy and material flow; and the extension of a metabolic network across the surrounding territory. City forms emerged within different topographies and ecological systems, evolving from regional variations of the founding system and the established patterns of settlements from which they condensed. The forms expanded and developed, strongly coupled to the dynamic changes of climate and ecology within which they were situated.� Michael Weinstock , The Architecture of Emergence, (West Sussex, John Wiley & Sons, 2010), 202

ii Occupying Landscapes In Part A, a series of experimentations with the computational tools of Processing (a Casey Reas / Ben Fry open software project at MIT) will lead to the main project of this journal. Various natural behaviours were tested on-screen and will be discussed in detail in the following chapters. The project: The aim of this project is study the patterns of population (particles) mobility – though in a much simplified way and through computational analysis – through changing its living landscape, in which cities (nodes) are formed, and how they can affect their growth pattern and their connecting network system with neighbouring nodes. Expansion and contraction forces were applied to the nodes to analise the behaviour of a particle population in their outer boundaries; at which point the particles would begin a connecting path to a neighbouring node or lose their attraction force altogether and migrate through the screen. This will be further explained and discussed in the further sections on this journal. As part of this project, a parallel has been drawn into concerning issues of saturation of population and mobility network connections in megacities. In Part B, a discussion regarding these concerns will be further elaborated justifying the projects’ approach and attempt.

StarLogo Slime Mold Aggregation Simulation Casey Reas, Form and Code, (New York/Princeton Architectural Press, 2010), 165


Random particles movement and connecting lines. sketch #A1.3.2

A1.0 Basic behaviours A1.1 Random walker

Randomly created bands of rectangles sketch #A1.1.1

Both sketches aimed to demonstrate the creation of an array of objects at random locations. Sketch #A1.1.2 incorporated a mouse avoid function within a specific radius. Horizontal lines oscillated and moved according to the mouse location.

Random walker/ floating lines following mouse/ mouse avoid particles. sketch #A1.1.2

A1.2 Oscillations

study of grid lines oscillating from points of perspective

Oscillating lines and ellipses sketch #A1.2.1

void draw() { background(255); theta += 0.005; float x = theta; float nval = noise(n)*theta; for (int i=0; i<200; i++) { float y = (tan(x) *width/16);

These floating variables were allocated for both position and sizes of each new lines and ellipses created, therefore at every frame their position (and sizes) will be updated according to these variables.

noFill(); strokeWeight(0.25); stroke(0,55,255); line(theta*x, theta*nval, y+nval, x+nval); stroke(0); ellipse (x+nval, y+nval, n*y, nval*x); x +=2; } }

float theta = 0.005; float n = 2; void setup() { size (800, 400); smooth(); } void draw() { background(255); frameRate(24); theta += 0.05; float x = tan(n)/theta; float nval = noise(n)*theta; for (int i=0; i<200; i++) { float y = (tan(theta)*width/4); strokeWeight(0.25); stroke(0,55,255); line(theta*x, theta*n, y+n, x+n); line(x/theta,y*nval,n*x,nval/y); stroke(0); line (theta/x,theta/y, x-n, y-n); line (x+nval, y+nval, n*y, nval*x); x +=2;

Oscillating lines sketch #A1.2.2

Tangent variables were allocated for both ends of each new line created, therefore at every frame their position (and consequently their arc radius) will be updated according to these variables.

} }

With the results from the previous two sketches, the 3D application of oscillating lines had far more dramatic graphics with vortices intersecting with planes of grid lines. Images were recorded by guided mouse movement.

This allows for ‘DXF’ files to be generated into AutoCad format and modelled in 3D

Oscillating lines in 3D sketch #A1.2.3

if (record == true) { dxf = (RawDXF) createGraphics(height, width, DXF, “output.dxf”); beginRaw(dxf); dxf.setLayer(1); } lights(); background(255); translate(width/3, height/3, -200); rotateZ(map(mouseY, 0, height, 0, PI)); rotateY(map(mouseX, 0, width, 0,HALF_PI)); for (int y = -2; y < 2; y++) { for (int x = -2; x < 2; x++) { for (int z = -2; z < 2; z++) { pushMatrix(); translate(120*x, 120*y, -120*z);; popMatrix(); } } }

A1.3 Forces and Vectors

Graphic representation and simulation of a port town development in various settlement stages. Frei Otto , Occupying and Connecting, (Stuttgart/London, Axel Menges, 2009), 107

Random particles movement and connecting lines. sketch #A1.3.2

class Agents { [...] // rest of code was ommited deliberately //-------subfunctions void separate (float magnitude) { Vec3D steer = new Vec3D(); int count = 0; for (int i = 0; i<agentCollection.size(); i++) { Agents other1 = (Agents) agentCollection.get(i); float distance = loc.distanceTo(other1.loc); if (distance>0 && distance <20) { Vec3D diff = loc.sub(other1.loc); diff.normalizeTo (1.0/distance); steer.addSelf(diff); count ++; } } if (count>0) { steer.scaleSelf(1.0/count); } steer.scaleSelf(1); acc.addSelf(steer); }

Vector forces that determine separation and cohesion between the particles were applied to all existing particles. The lines in between the particles are triggered at any point where the distance is equal or smaller than 150 pixels.

Random walker boxes with connecting lines in between (in 3D) sketch #A1.3.2

Sponge structure project by Marianna Moschella & Kristina Klenner Asterios Agkathidis, Modular Structures in design and Architecture, (Amsterdam, Bispublishers, 2009), 22 Toyo Ito, Pavillion at Serpentine Gallery in London

A1.4 Flocking

â&#x20AC;&#x153;Four boid rules: - avoid flying too close to others; - copy near neighbours; - move towards centre of perceived neighbours; - attempt to maintain clear view.â&#x20AC;? Gary William Flake, The Computational Beauty of Nature, (Cambridge/MIT Press, 1998), 271

Flock of Birds Google stock imagery

Simulation of flocking behaviour using separation, cohesion and alignment as driving forces between the particles. sketch #A1.4.1 sketch #A1.4.2 sketch #A1.4.3

By incorporating a secondary class of particles (whites), as an extension of the primary class (blues), the blue particles flock together across the screen whilst the white ones have a tendency to follow the blue ones or to concentrate at a specific point on the screen - the vector â&#x20AC;&#x153;gravityâ&#x20AC;? was altered to the white particles.

Close-up on the behaviour between white and blue particles. sketch #A1.4.3

A2.0 Tracing Pixels

img1 = loadImage(“lua.png”); image (img1, 0, 0, width, height); loadPixels(); filter(BLUR, 5); ----------------------------void fastSmallBlur(PImage a, PImage b) { int pa[]=a.pixels; int pb[]=b.pixels; int h=a.height; int w=a.width; final int mask=(0xFF&(0xFF<<2))*0x01010101; for (int y=1;y<h-1;y++) { int rowStart=y*w +1; int rowEnd =y*w+w-1; for (int i=rowStart;i<rowEnd;i++) { pb[i]=( ( (pa[i-w]) +(pa[i+w]) +(pa[i-1]) +(pa[i+1]) )>>2);

Alterating image environmentthrough tracing left behind by particles. BELOW: Close-ups LEFT: Overall screen shots sketch # A2.0.1

this calls for the background image to be loaded into the sketch In sketch A2.0.2, the mask was substituted by channels in which the smaller the difference between the channels (within all pixels rows and columns) the more disturbance it will cause to the environment (longer tail and blur). Credits to Open Processing user “Dotlassie” for the function “FastSmallBlur”

sketch # A2.0.2

float channels= random(1,3); for (int y=1;y<h-1;y++) { int rowStart=y*w+1; int rowEnd=y*w+w-1; for (int i=rowStart;i<rowEnd; i+=channels) { -----------------

A2.1 Pixels sprawl

Pixels sprawl. Alterered and added elements from Class particles from sketch “Grow your own garden” by James Frankis. Class Behaviour swarm algorithm implementation based on Daniel Jones’ “AtomSwarm” # A2.1.1

BELOW: High settlement density creates closed path units in the locationsâ&#x20AC;&#x2122; centre. BOTTOM: Arrangement of roads leading to neighbouring locations / central European towns. Frei Otto , Occupying and Connecting, (Stuttgart/London, Axel Menges, 2009), 108

Slums in Rio/ Brazil Google stock imagery


B1.0 Theoretical background Around 5,000 years ago the natural conditions for human settlement were more than favourable in some specific areas of the globe – namely south-west Asia, northern China and north-west coast of South America1. As the physical occupations of these settlements grew over time - as well as their social and cultural complexity - and mostly due to high availability of natural resources, connecting paths and networks between them began to form thus intensifying cultural exchange and altering their occupation density.2 Some when in 2008, a milestone in the history of human settlement was reached: more than 50% of the world’s population lives in cities or urban areas3. Although this is a relative number to address the world population as a whole – with Asia and Africa still being predominantly rural -, it does illustrate a current trend in human settlement. In 2008, the UN released a document on Human Settlements which analysed the population behaviour in more than 2,600 cities across the globe with population numbers higher than 100K (from developing and developed countries). In this document, the cities birth, growth, collapse and success was studied not only through analyzing the population numbers but also the effect of economic fluctuations and political realities that are at play, level of education, public transport and health systems, etc, just to note a few within a wide and complex framework of every city’s “life”. According to the UN report, cities in developing and undeveloped areas are growing at staggering rates in the past 50 years, and are not showing signs of slowing down. Cities in the developed world, on contrary, are slowing down – with some European cities even with population in decline. This raises concerns to human settlements as a whole, since the effects of one booming city is reflected on another prosperous and stable city. A controversial and highly debated issue –in European countries, United States and Australia – such as asylum seeking people from African and Middle Eastern countries (some torn apart by on-going civil war or unbearable political instability), is becoming crucial to social balance and central to political discussion nowadays. In parallel to this issue, lies another social concern of cities with booming economies – India, Bangladesh and China as a prime example – which are driving their cities to fast growth through internal migration and high rates of births. This reflects how undeveloped and developing countries tend to centralize their financial and human resources in capital cities. 4

1 2 3 4

Weinstock , Emergence, 186 Frei Otto , Occupying and Connecting, (Stuttgart/London, Axel Menges, 2009), 58 UN Habitat, State of World’s Cities 2008/ 2009, (London, EarthScan, 2008),11 UN Habitat, State of World’s Cities 2008/ 2009, (London, EarthScan, 2008), Part 1.3

When for political, social or economic issues, part of the population is forced to move to a neighbouring city, the very framework in which both cities are structured, can be severely affected, either positively or negatively. Large migration or internal rapid growth (some cities reaching up to 10% growth per year) could unveil consequences in their urban fabric and therefore create snowball effects that could cripple both socially and economically their capital cities â&#x20AC;&#x201C; and for that matter the entire country - for decades.

Cities growth and decline in the developing world by city size, 1990-2000 UN Habitat, State of Worldâ&#x20AC;&#x2122;s Cities 2008/ 2009, (London, EarthScan, 2008), Part 1.3

Aerial view of Tokyo Photography by http://korepersephoneia.

B1.1 Density and Mobility To illustrate one social effect of saturated cities with lacking in infra-structure to sustain their evergrowing population let’s look at mobility issues: major cities with a population of 10million plus inhabitants need to rely on a quite extensive network of public transport, freeways and roads. Fabio Casiroli – founder and chairman of Systematica, an urban and transport planning consultancy firm based in Milan– studied a few megacities as part of his research project. London, Los Angeles, Sao Paulo and Tokyo amongst others, were subject to an experiment of “mobility patterns” in which the expected travel times between any given residential area to essential urban provisions (shops, hospitals, work, etc). He identified that both Los Angeles and Sao Paulo, seriously lacked in public transport and that the residents heavily relied on private mode of transport. Tokyo and London on the other hand, provide a much larger an extensive network of public transport. See image below. Casiroli’s conclusion highlighted not only a major transport deficiency for the first two cities, but most importantly, a social exclusion effect for millions of people left with hours of their day purely dedicated on moving from point A to B1. This study shows us one of many daily social problems in megacities today. The study above has relevance to this journals’ approach since the mobility of particles in the fringe of the nodal centres only have fine thresholds in which they caneither remain connected to the node they belong, disperse into the screen with tangential direction or create a new path to the neighbouring node. Moving inwards and outwards the nodal centre can be a determining factor since the number of particles within each node can expand other particles to even further edges of the node fringe, similarly to what happens in transport in megacities. The further away from the city centres the population is, the harder it will be to move itself in a inwards and outwards direction. Pattern similarities in bacterial stigmergy. Growing colony of bacillus cereus. Google stock imagery

Fabio Casiroli The mobility DNA of Cities, 2008 DPA Milan Polytechnic


Fabio Casiroli, The mobility DNA of Cities, 2008/ DPA Milan Polytechnic

B1.3 Algorithmic simulation / Experimentation Starting landscape Sketch# B1.3.1

At a given number of particles (population) and trees (nodal points) as a starting landscape, the particles move and expand around the nodes with a given growth rate in diameter. When the expansion radius is sufficiently large, the particles find a connecting path to the neighbouring nodal centre, then creating a new path. Eventually, with adequate population growth and expansion rate, all nodes interconnect.

The following experiments in Processing were based on Gwyllim Jahnâ&#x20AC;&#x2122;s sketch â&#x20AC;&#x153;Orbiting Particlesâ&#x20AC;? and the interactive control window by Generative Gestaltung. A series of variations and new funtions were incorporated and some deleted to better understand the behaviour of the the particles in the nodes fringe, how quickly would they disperse into the screen and connect with the neighbouring node centre.

class Population { --------------------------void update() { vel.normalize(); loc.addSelf(vel); lifespan=-1; if (dropNum%1==0) { if (trail.size()<trailLength) { trail.add(new Vec3D(loc.x, loc.y, loc.z)); } else { trail.remove(0); } dropNum=0; } dropNum++; } void getNearTrees() { //setup variables to set new parent ParticleSystem n = p; float minD = 1000; for (ParticleSystem tree:forest) { //get the distance to the tree float d = loc.distanceTo(tree.loc); if (d<minD) { minD=d; n = tree; } if (d<attractScale) { vel.addSelf(getField(tree)); } } p = n; } Vec3D getField(ParticleSystem t) { Vec3D toAttr = loc.sub(t.loc); Vec3D perp = toAttr.cross(new Vec3D(0, 0, 1)); float d = toAttr.magnitude(); float s = perp.magnitude(); perp.scaleSelf(spin/s); toAttr.scaleSelf(push/d); return(perp.add(toAttr)); -------------------------------class ParticleSystem void spawn() { for (int i = 0; i<numAgents;i++) { Vec3D fringe = new Vec3D(crownRadius + random( (crownRadius/5), (crownRadius/5)),0, 0); fringe.rotateZ(random(0, 2*PI)); fringe.addSelf(loc);//do not alter Vec3D vel = new Vec3D(random(-2, 2), random(-2, 2),0); Population a = new Population(fringe, vel, this); pop.add(a); }

//in main tab// int numAgents = 1500; int numTrees = 15; float lifespan; float crownRadius; int trailLength = 50; float agentSpeed = 12; float attractScale = 250; float spin =3; float push = 0.005; float pull = 0.053;

code main functions and global variables

Similarity in behaviour. Growing colony of bacillus cereus. Google stock imagery

Starting landscape for Sketch# B1.3.2

//in void update// if (dropNum%1==0) { if (trail.size()<trailLength) { trail.add(new Vec3D(loc.x, loc.y, loc.z)); } } dropNum++; int numAgents = 350; int numTrees = 23; float crownRadius; int trailLength = 250; float agentSpeed = 12; float attractScale = 150; float spin = 25;//the smaller the spin quicker the centre of node expands float push = 0.05; float pull = 5;

On Sketch #B1.3.3, The attract scale was reduced and spin growth (from centre) was increased to induce the particles to spin off the nodes perimeter. // in ParticleSystem class// if (numAgents==750){ fringe.invert();// makes agents spin clockwise fringe.sub(loc); //contracts the perimeter of fringe //in Class Population// if (d<=crownRadius){ p = n; vel.sub(getField(tree));

Sketch# B1.3.3

sketch # B1.3.4 Drastically reducing the attraction scale of sketch # B1.3.4 // in Particle System class// if (numAgents==500){ fringe.invert(); fringe.sub(loc); //contracts the perimeter of fringe Vec3D contract = fringe. cross(loc); float spinIn = loc.magnitude(); contract.scale(spinIn*PI);

Particles eventually fly away tangentially due to lack of an adequate attract scale to nodal centre. sketch # B1.3.4

Sketch# B1.3.5

The attract scale and fringe contraction rates were increased and decreased to see the intrinsic behaviour in which the particles find new paths to follow even though the environment has already being changed inittially. sketch # B1.3.5 fringe.sub(loc); //contracts the perimeter of fringe Vec3D contract = fringe.getReciprocal(); float spinIn = fringe.magSquared(); contract.scale(spinIn/crownRadius); void wander() { // new void funtion added for if and when particles are dispersed into screen// float wanderR = 50; float wanderD = 25; float change = 1.0; xval += random(-change, change); Vec3D circleLoc = new Vec3D(vel.x, vel.y, vel.z); circleLoc.normalize(); circleLoc.scaleSelf(wanderD); circleLoc.addSelf(loc); Vec3D circleOffSet = new Vec3D(wanderR*cos(xval), wanderR*sin(yval), 0); Vec3D target = circleLoc.addSelf(circleOffSet);


Vec3D steer = target.sub(loc); steer.normalize(); steer.scaleSelf(5);

Sketch# B1.3.6

// in Population class// Vec3D getField(ParticleSystem t) { Vec3D toAttr = loc.sub(t.loc); Vec3D perp = toAttr.cross(new Vec3D(0, 0, 1)); float d = toAttr.magnitude(); float s = perp.magnitude(); perp.scaleSelf(spin/d); toAttr.scaleSelf(push/s); return(toAttr);

By returning the vector â&#x20AC;&#x2DC;toAttractâ&#x20AC;&#x2122; to the function, the particles circulate within the voids in between the nodes; the larger the attract scale and the push values, the larger the diameter of the node, therefore the smaller the void space in which the particles will float around.

Sketch# B1.3.7 Sculpture by Andreas Fischer, â&#x20AC;&#x2DC;A week in the lifeâ&#x20AC;&#x2122;; Hartmut Bohnacker , Benedikt GroB, Julia Laub & Claudius Lazzeroni Generative Design (Generative Gestaltung), (New York, Princeton Architectural Press/2012), 41

//in Particle System class// // new void funtion to create a more un-even fringe growth behaviour and therefore the path of the particles.// void expansion(){ Vec3D contract = new Vec3D(); Vec3D fringe = new Vec3D(); float interpol=0.05; contract.interpolateTo(fringe, interpol); fringe.reflect(loc); float spinIn = contract.magnitude(); //contract.normalize(); contract.scaleSelf(spinIn/crownRadius); contract.jitter(loc);

Sketch# B1.3.7

The images generated for this sketch were manipulated in realtime - changing the variables parameters as the sketch was running. It is interesting to see how the particles create new pathways and pockets of empty spaces even when the background environment has already been edited previously. The attraction scales and push values dictate to which radius the particles should respond to in and around the main nodal centres.

//in Population class// // new conditions set to variable push (which expands node centres outwards// void update() { vel.normalize(); loc.addSelf(vel); if ((frameCount %25)==0) { float pushRatio = 0.75; push=push*pushRatio; numAgents+=10;

Conclusions Cities tend to generally grow and expand should the economic, geographic and environmental conditions be adequate for human prosperity. What needs to be taken into account is how quickly the human ploriferation (and migration) takes place; the cityâ&#x20AC;&#x2122;s growth need to be - to a certain constraint - controlled within the boundaries of social, political and environmental adaptation: provision for adequate infra-structure and density studies to plan hot the growth will shape the natural landscape in a long-term settlement. The experiments above will be further advanced to incorporate cases when particles with attempt to create paths in and out the nodes (not only in a concentric manner).

TOP: Plan of American and european cities showing rings of expansion BOTTOM: Experiment of top soil occupation of plantation of seeds and growth of trees. Frei Otto , Occupying and Connecting, (Stuttgart/London, Axel Menges, 2009), 32 & 41

References Michael Weinstock , The Architecture of Emergence, (West Sussex, John Wiley & Sons, 2010) Frei Otto , Occupying and Connecting, (Stuttgart/London, Axel Menges, 2009) Alejandro Bahamon & Patricia Perez, Inspired by Nature, (New York/WW Norton & Company, 2007) Casey Reas, Form and Code, (New York/Princeton Architectural Press, 2010) Asterios Agkathidis, Modular Structures in design and Architecture, (Amsterdam, Bispublishers, 2009) Gary William Flake, The Computational Beauty of Nature, (Cambridge/MIT Press, 1998) UN Habitat, State of Worldâ&#x20AC;&#x2122;s Cities 2008/ 2009, (London, EarthScan, 2008) Fabio Casiroli, The mobility DNA of Cities, (Research for DPA Milan Polytechnic,2008) Hartmut Bohnacker , Benedikt GroB, Julia Laub & Claudius Lazzeroni Generative Design (Generative Gestaltung), (New York, Princeton Architectural Press,2012)

Journal 2