aditazz 01-ul

21
Algorithmic Architecture A recipe for buildings.

Upload: michaelsbergin

Post on 18-Jan-2015

292 views

Category:

Documents


1 download

DESCRIPTION

Course One - Algorithmic Architecture - Slides

TRANSCRIPT

Page 1: Aditazz 01-ul

Algorithmic ArchitectureA recipe for buildings.

Page 2: Aditazz 01-ul

Generative Design

Page 3: Aditazz 01-ul

Generative DesignSystem

You will all make your own

Page 4: Aditazz 01-ul

Important Projects

Luisa Caldas – Optimization for Energy Use (GENE_ARCH) 1999

Page 5: Aditazz 01-ul

Important Projects

The Living – Living Light - https://vimeo.com/7408621

Page 6: Aditazz 01-ul

Crafting a Design Space

Page 7: Aditazz 01-ul

xiaoji-chen

Page 8: Aditazz 01-ul

Exploring a Design SpaceWhile scoring the options.

Page 9: Aditazz 01-ul
Page 10: Aditazz 01-ul

Finding the Right SolutionHow to score buildings?

Page 11: Aditazz 01-ul

Learning the Trade

Page 12: Aditazz 01-ul

int switchInterval=60;int counterDown=0;int msize=11;float growingRate=0.4;Unit[][] units;

void setup() {size(600, 600);frameRate(30);

units=new Unit[msize][msize];for (int i=0;i<msize;i++)for (int j=0;j<msize;j++) {

units[i][j]=new Unit(i,j);}

}

void draw() {if (counterDown==0) {

background(0);reMap();translate(60,60);for (int i=0;i<msize;i++)for (int j=0;j<msize;j++) {

units[i][j].display(); //draw plan}generateStair();

}counterDown--;if (counterDown<0) counterDown=switchInterval;

}

void reMap() {int i,j,k;for (i=0;i<msize;i++)for (j=0;j<msize;j++) {

units[i][j].reset();}units[(msize+1)/2][(msize+1)/2].isSolid=true;grow((msize+1)/2,(msize+1)/2,-1,-1);grow((msize+1)/2,(msize+1)/2,-1,1);grow((msize+1)/2,(msize+1)/2,1,-1);grow((msize+1)/2,(msize+1)/2,1,1);

for(k=0;k<6;k++)for (i=0;i<msize;i++)for (j=0;j<msize;j++) {

units[i][j].update();if (units[i][j].neighbors+units[i][j].neighbor_corners<=1) units[i][j].isSolid=false;if (units[i][j].neighbors+units[i][j].neighbor_corners>5) units[i][j].isSolid=true;if (units[i][j].neighbors==2 && units[i][j].neighbor_corners==1) units[i][j].isSolid=true;if (units[i][j].neighbors>=3) units[i][j].isSolid=true;if (units[i][j].neighbors==2 && units[i][j].neighbor_corners==3 && units[i]

[j].isSolid==true) units[i][j].isSolid=false;

}}

void grow(int x, int y, int off_x, int off_y) {if (x+off_x<0 || x+off_x>=msize || y+off_y<0 || y+off_y>=msize) return;if(off_x*off_y!=0) {

if(random(1)<growingRate) {units[x][y+off_y].isSolid=true;grow(x, y+off_y, 0, off_y);

}if(random(1)<growingRate) {

units[x+off_x][y].isSolid=true;grow(x+off_x, y, off_x, 0);

}if (random(1)<growingRate) {

units[x+off_x][y+off_y].isSolid=true;grow(x+off_x, y+off_y, off_x, off_y);if (!(units[x][y+off_y].isSolid && units[x+off_x][y].isSolid)) {

units[x][y+off_y].isSolid=true;grow(x, y+off_y, 0, off_y);units[x+off_x][y].isSolid=true;grow(x+off_x, y, off_x, 0);

}}

}else {

if(random(1)<growingRate) {units[x+off_x][y+off_y].isSolid=true;grow(x+off_x, y+off_y, off_x, off_y);

}}

}

void generateStair() {int k;int maxHCount=0, maxVCount=0;int maxx=0, maxy=0; for (int i=0;i<msize;i++)for (int j=0;j<msize;j++) {

if (units[i][j].isExternal) {k=0;while ((i+k)<msize && units[i+k][j].isExternal) {k++;}if (k>maxHCount) {

maxHCount=k;if (maxHCount>maxVCount) {

maxx=i;maxy=j;

}}k=0;while ((j+k)<msize && units[i][j+k].isExternal) {k++;}if (k>maxVCount) {

maxVCount=k;if (maxVCount>maxHCount) {

maxx=i;maxy=j;

}}

}}if (maxHCount>=maxVCount) {

for (int i=1;i<maxHCount-1;i++) {units[maxx+i][maxy].drawStair(0);

}}else {

for (int i=1;i<maxVCount-1;i++) {units[maxx][maxy+i].drawStair(1);

}}

}

class Unit {int x,y;int neighbors, neighbor_corners; boolean isSolid,hasStair,isExternal;

Unit(int _x,int _y) {x=_x;y=_y;reset();

}

void display() {if (isSolid) {

drawPlan();}

}

void drawPlan() {update();if (neighbors==1) {

if (x>0 && units[x-1][y].isSolid) drawArc(0);if (y>0 && units[x][y-1].isSolid) drawArc(1);if (x<msize-1 && units[x+1][y].isSolid) drawArc(2);if (y<msize-1 && units[x][y+1].isSolid) drawArc(3);

}else {

if ((x>0 && !units[x-1][y].isSolid) || x==0) drawWall(0); if ((y>0 && !units[x][y-1].isSolid) || y==0) drawWall(1);if ((x<msize-1 && !units[x+1][y].isSolid) ||x==msize-1) drawWall(2);if ((y<msize-1 && !units[x][y+1].isSolid) ||y==msize-1) drawWall(3);

}

if (x/2*2==x && y/2*2==y) drawCol();}

void drawCol() {stroke(255);strokeWeight(2);noFill();for(int i=0;i<=1;i++) {

for(int j=0;j<=1;j++) {rect((x+2*i)*40-2,(y+2*j)*40-2,4,4);

}}

}

void drawStair (int dir) {if (!isExternal) return;hasStair=true;pushMatrix();

translate(x*40+20,y*40+20);rotate(PI/2*dir);strokeWeight(1);line(-20,-20,-20,20);line(-15,-20,-15,20);line(-10,-20,-10,20);line(-5,-20,-5,20);line(0,-20,0,20);line(20,-20,20,20);line(15,-20,15,20);line(10,-20,10,20);line(5,-20,5,20);line(-20,-20,20,-20);line(-20,20,20,20);popMatrix();

}

void drawArc (int dir) {stroke(255);strokeWeight(3);noFill();

isExternal=true;pushMatrix();translate(x*40+20,y*40+20);rotate(PI/2*dir);line(-20,-20,0,-20);line(-20,20,0,20);arc(0,0,40,40,-PI/2,PI/2);popMatrix();

}

void drawWall (int dir) {stroke(255);strokeWeight(3);noFill();

isExternal=true;pushMatrix();translate(x*40+20,y*40+20);rotate(PI/2*dir);line(-20,-20,-20,20);popMatrix();

}

void update() {neighbors=0;neighbor_corners=0;for (int i=-1;i<=1;i++)for (int j=-1;j<=1;j++) {

if(i==0 && j==0) continue;if (x+i<0 || x+i>=msize || y+j<0 || y+j>=msize) continue;if (units[x+i][y+j].isSolid) {

if (i*j==0) neighbors++;else neighbor_corners++;

} }

}

void reset() {isSolid=false;isExternal=false;hasStair=false;

}}

void keyPressed() {counterDown=0;

}

void mousePressed() {counterDown=0;

}

Algorithmic Design for Architects

Page 13: Aditazz 01-ul

Algorithmic Design for Architects

Page 14: Aditazz 01-ul

Rhinoceros 3D

Page 15: Aditazz 01-ul

Rhinoceros 3D [ Grasshopper ]Created by Architect turned Bitsmith, David Rutten. Winner of ACADIA (Association of Computer Aided Design in Architecture) Award in 2012.

www.grasshopper3d.com

Used to be called ‘Explicit History’Better name – less catchy.

Page 16: Aditazz 01-ul

Grasshopper is Powerful!It allows you to script visually, and get up to speed quickly.

It integrates with a number of simulation engines and modeling tools.

It integrates with Programming Languages (like Python)

Lots of useful built in functions.

Page 17: Aditazz 01-ul

Grasshopper [ Galapagos ]

Page 18: Aditazz 01-ul

Grasshopper [ Kangaroo, Karamba ]

https://vimeo.com/album/199263/video/8865054

Page 19: Aditazz 01-ul

Grasshopper [ Ecotect, DIVA ]

Page 20: Aditazz 01-ul

Grasshopper [ Lunchbox, Slingshot ]

Page 21: Aditazz 01-ul

Rhino Python

http://matsysdesign.com/2012/04/13/chrysalis-iii/

Even more powerful.

Flexible, easy to use.

Compatible with all GH tools.

Recursion! (without Hoopsnake)

Seamlessly integrates to GH.