Acil durum kampı tasarımı- Parametrik Mimarlık

Mimar Sinan Üniversitesi yüksek lisans-doktora derslerinden biri olan ‘Parametrik Mimarlık’ dersinde seçtiğimiz bir arsa üzerine acil durum kampı tasarlanmamız istendi. Ben Bostancı’da bir otoparkı düzenleyip yarısını kamp alanı haline getirdim. Alanın demografik özelliklerine göre yaşam birimleri tasarladım. Bu birimler kodda yer alan a, b ve c tipleri 2,4 ve 8 kişilik yaşam birimleri. Birimlerimi; ileride birleştirilebilme, çoğaltılabilme, modüler üretim vb. konuları düşünerek 2m kenarlara sahip çokgenler olarak tasarladım. Acil durum kamplarında gerekli olan birimleri arsadan çıkardıktan sonra kalan alana yaşam birimlerini rastgele yerleştiren kod aşağıda. Buraya sadece kodlama serüvenimi kaydettiğim için işin mimari kısmını pek anlatmıyorum. Merak eden olursa mimari tasarımları da paylaşmaya hazırım.

Kodla ilgili açıklamalar:

PushMatrix ve PopMatrix Polygon’u bir bakıma başlatma ve kapatma komutları. Boolean bir komutun doğru ya da yanlış olduğunu kontrol edip hareket etmemize yarıyor. Kodun en zorlayıcı kısmı birbirlerinin üstüne gelmemeleri için şekillerimin çevresini checkAround ile kontrol etmek ve bu alana çizim yapılmamasını sağlayabilmekti. Program; CheckAround ve arkaplanın siyahlığından yararlanarak işliyor. Bu kadar kısa olmasının sebebi ise profesyonel bir programcının saatlerce uğraşıp yazdığım koduma 2 saniye bakarak hmm şu şöyle daha iyi diyerek sihir yapmasından kaynaklanıyor (Büyücü Roman Glass ve Kemal Şahin hocaya teşekkürler).

int aTipi = 37; //10 m2
int bTipi = 14; // 20 m2
int cTipi = 4; // 40 m2

void setup() {
size(500, 700);
noStroke();
background(0);
}

boolean isBlack(int c) {
return c != 0 && c == color(0);
}

boolean checkAround(int x, int y, float radius, int npoints) {
boolean okay = true;
float angle = TWO_PI / npoints;
for (float a = 0; a < TWO_PI; a += angle) {
int sx = round(x + cos(a) * radius);
int sy = round(y + sin(a) * radius);
if (isBlack(get(sx, sy)) == false)
return false;
}
return okay;
}

int drawType(float r, int p, int rColor, int gColor, int bColor, int counter) {
if (counter == 0)
return 0;
int x = int(random(0, width));
int y = int(random(0, height));
while (checkAround(x, y, r, p) == false) {
x = int(random(0, width));
y = int(random(0, height));
}
pushMatrix();
fill(rColor, gColor, bColor);
polygon(x, y, r, p);
popMatrix();
return counter — 1;
}

void draw() {
aTipi = drawType(20, 6, 175, 203, 255, aTipi);
bTipi = drawType(26.2, 8, 249, 251, 242, bTipi);
cTipi = drawType(38.6, 12, 135, 101, 115, cTipi);
}

void polygon(float x, float y, float radius, int npoints) {
float angle = TWO_PI / npoints;
beginShape();
for (float a = 0; a < TWO_PI; a += angle) {
float sx = x + cos(a) * radius;
float sy = y + sin(a) * radius;
vertex(sx, sy);
}
endShape(CLOSE);
}

Mimar Sinan Fine Arts University, Acoustic Consultant in Glass & Sabah / www.akustikmimar.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store