Processing’te fonksiyon yaratmak

Processing’te kendi fonksiyonumuzu yaratmak ve onu çağırarak kullanmak, programlayarak tasarlayabilmek için önemli bir adım. Tasarımcıları çizim yükünden kurtarmanın yanısıra, dijital bir eskiz defterinin sonsuz olanaklarını bizlere sunuyor. Örnek olarak bir ev çizelim.

//eskiz alanımızı belirleyelim
void setup() {
size(400, 400);
}
//çizimimizi yapalım
void draw() {
background(255);
//ev çeperi
line (150,150,150,250);
line (250,150,250,250);
line (150,250,250,250);
line (150,150,200,100);
line (200,100,250,150);
//pencereler
rect (165,160,30,30);
rect (205,160,30,30);
//kapı
rect (182,203,35,47);
}

İki ev çizelim:

Aşağıdaki iki evi, yukarıda belirttiğim koddaki gibi, koordinatları belirterek çizgi ve dikdörtgenlerle de çizebilirdik. Bu çözümleme, kodumuzu ve çalışma süremizi biraz uzatırdı, üstünde de pek çok işlemi yapamayacağımız için verimsiz bir işlem sayılabilirdi. Bu nedenle, aşağıdaki kodda belirttiğim gibi, bir ev fonksiyonu oluşturarak ilerledik. Dikkat ederseniz, çizim yukarıdaki kodda draw fonksiyonunda, aşağıda ise void ev olarak tanımladığım başka bir fonksiyon bulunmakta.

void setup() {
size(400, 400);
}
void draw() {
background(255);
ev(-50,50);
ev(75,50);
}

void ev (int x , int y) {
pushMatrix();
translate (x, y);
//ev çeperi
line (150,150,150,250);
line (250,150,250,250);
line (150,250,250,250);
line (150,150,200,100);
line (200,100,250,150);
//pencereler
rect (165,160,30,30);
rect (205,160,30,30);
//kapı
rect (182,203,35,47);
popMatrix();
}

Evleri çoğaltalım ve biraz hareket katalım:

Çok sayıda ev istediğimizde, loop özelliğinden yararlanabiliriz. Aşağıdaki kodda, rastgelelik anlamına gelen random ve randomSeed özelliğini de ekledim. Değişkenlerde ise int yerine float kullandım. Int, tam sayıları, float ise virgüllü sayıları tanımlamamıza olanak sağlıyor. Aşağıdaki kodda, randomSeed satırını kapatarak, frameRate satırını açtığımızda, linkte paylaştığım gibi (https://www.youtube.com/watch?v=IYe1GwDNJfo&feature=youtu.be) hareketli ve rastgele boyutlarda evlerle çalışabiliyoruz.

void setup() {
size(1000, 500);
}

void draw() {
background(255);
randomSeed(0);
//frameRate(10);
//loop özelliğini kullanıyoruz
for (float x =-130; x < width; x +=80){
//Rastgelelik özelliğini kullanıyoruz
float s = random (0.01, 1.2);
ev(x,50, s);
}
}

//ev fonksiyonu
void ev (float x , float y, float s) {
pushMatrix();
translate (x, y);
scale(s);
//ev çeperi
line (150,150,150,250);
line (250,150,250,250);
line (150,250,250,250);
line (150,150,200,100);
line (200,100,250,150);
//pencereler
rect (165,160,30,30);
rect (205,160,30,30);
//kapı
rect (182,203,35,47);
popMatrix();
}

Umarım paylaşımım projelerinize faydalı olur. Herkese sevgiler :)

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

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