Monday, January 2, 2017

Grafika Komputer dengan Processing-[Ornamen]-(bagian IV)

السلام عليكم ورحمة الله وبركا ته

Apa kabar sobat semua?
Setelah kita membahas 3 (tiga) materi sebelumnya

Grafika Komputer dengan Processing-[Pengenalan Grafika Komputer]
Grafika Komputer dengan Processing-[Bentuk Dasar]
Grafika Komputer dengan Processing-[Gradasi Warna]

Kini saatnya kita melangkahkan kaki dan mengayunkan tangan menuju materi selanjutnya, yaitu tentang "Ornamen" (ciee bahasanya kayak mau pigi kerja bakti aja.. hehehe).

Apa itu ornamen? 


Mungkin sobat sudah tidak asing dengan kata tersebut. Yap.. ornamen itu istilah lainnya adalah "hiasan" atau bisa juga "ukiran" atau.. ahh terserah deh, yang jelas ornamen itu identik dengan "indah" (bukan si indah anak pak somad ya bro.. hehehe)

Namun kali ini kita mau bikin yang "indah-indah" pakai coding, dan tentu saja agak sedikit pusing.

Dari segi unsur pembentukannya ornamen dibagi menjadi 2 (dua) jenis, yaitu :
  1. Ornamen Garis
  2. Ornamen Lingkaran
Dari namanya jelas kalau ornamen garis dibentuk dari garis-garis (lha iya lah..), eh, jangan salah.. Instruksi dasar yang digunakan adalah line() dan rect();

Lalu bagaimana dengan Ornamen Lingkaran?
Dari namanya juga, jelas kalau ornamen lingkaran dibentuk dari garis melengkung dan instruksi dasar yang digunakan adalah ellipse() dan arc()

Bagi yang baru bangun tidur dan nggak "ngeh" dengan instruksi line(), rect(), ellipse() dan arc() tersebut silahkan baca lagi artikel sebelumya tentang Bentuk Dasar.

Okelah kalau begitu, kita langsung saja ke inti permasalahannya. Cekidot..

1. Ornamen Garis
  • Bentuk Jaring (1)
Ane nggak tau mau kasi nama apa sama ini bentuk, mau dikasi nama si udin keknya nggak cocok. Mending sobat liat aja sendiri en kasi nama sendiri..

 Ornamen Garis Bentuk Jaring (1)

Untuk membentuk jaring, hal pertama yang harus kita lakukan adalah mengambil nilai lebar layar(w), kemudian menentukan jumlah frekwensi (f) dari jaring, kemudian kita cari nilai jarak antar jaring (a) dengan cara membagi lebar layar(w) dengan nilai frekwensi (f).

Kemudian kita buat perulangan - count(i) sebanyak jumlah frekwensi (f), nilai (i) tersebut dikalikan dengan nilai (a) agar jarak berikutnya sebesar kelipatan dari nilai (a). Kemudian tarik garis dengan instruksi line() dari titik awal (bagian atas layar) menuju titik kedua (bagian kanan layar), tarik lagi garis dari titik kedua menuju titik ketiga (bagian bawah layar), dari titik ketiga menuju titik keempat (bagian kiri layar), terakhir dari titik keempat kembali ke titik pertama. Semua garis diberi jarak sebanyak nilai (a) dan jumlah garis yang terbentuk tentu saja sebanyak (f).

Gambar berikut mungkin lebih mampu menjelaskan dari pada seribu kalimat yang saya ketik.. :)




Agar lebih menarik, beri warna yang berbeda untuk setiap garis yang akan dibentuk dengan cara mengganti warna pen dengan instruksi stroke() sebelum instruksi line().

Berikut coding nya.

 size(400,400);  //Atur ukuran layar = 400x400 pixels
 background(0);  //Atur warna latar = hitam
 int f=50;  //Deklarasikan variable f dengan nilai 50
 int w=width;  //Deklarasikan variable w dengan nilai = lebar layar
 int a=(w/f);  //Deklarasikan variable a dengan nilai w/f
 for(int i=1;i<=f;i++){  //buat perulangan i ==> count(i)
  stroke(255,0,0);  //Ganti warna pena = merah
  line(a*i,0,w,a*i);  //tarik garis dari koordinat pertama(a,0) ke koordinat kedua(w,a)
  stroke(0,255,0);  //Ganti warna pena = hijau
  line(w,a*i,w-a*i,w);  //tarik garis dari koordinat kedua(w,a) ke koordinat ketiga(w-a,w)
  stroke(0,0,255);  //Ganti warna pena = biru
  line(w-a*i,w,0,w-a*i);  //tarik garis dari koordinat ketiga(w-a,w) ke koordinat keempat(0,w-a)
  stroke(255,0,255);  //Ganti warna pena = jingga
  line(0,w-a*i,a*i,0);  //tarik garis dari koordinat keempat(0,w-a) ke koordinat pertama(a,0)
 }  

nb : karena nilai lebar(width)=tinggi(height) yaitu 400px, maka kita tidak perlu mendeklarasikan keduanya, jadi cukup deklarasikan nilai width(w) saja atau height(h) saja.
  • Bentuk Jaring (2)
Sama halnya dengan bentuk jaring (1), hal pertama yang harus kita lakukan adalah mengambil nilai lebar layar(w), menentukan jumlah frekwensi (f) dan mencari nilai jarak antar jaring (a). Hanya saja pada bentuk (2) ini dibutuhkan nilai tengah(c) yang diambil dari setengah nilai width (w/2) dan nilai (a) didapatkan dari nilai tengah(c) dibagi frekwensi(f) ==> (c/f).

Setelah itu buat perulangan-count(i) sebanyak nilai(f). Kemudian tarik garis menggunakan instruksi line() seperti yang terlihat pada gambar.
Garis berwarna merah menunjukkan arah pergerakan count(i) yang dikalikan dengan nilai(a).

Berikut program lengkapnya..

 size(400,400);  
 background(255);  
 int f=50;  
 int w=width;  
 int c=(w/2);  
 int a=(c/f);  
 for(int i=1;i<=f;i++){  
  stroke(255,0,0);  
  line(c,a*i,c+a*i,c);  
  stroke(0,255,0);  
  line(c+a*i,c,c,w-a*i);  
  stroke(0,0,255);  
  line(c,w-a*i,c-a*i,c);  
  stroke(255,0,255);  
  line(c-a*i,c,c,a*i);    
 }  

  • Bentuk Gabungan

Setelah membuat bentuk jaring(1) dan (2), mudah-mudahan sobat semua nggak kesulitan untuk mengetahui logika pembentukan tampilan seperti gambar diatas. :) Langsung aja sedot kodingnya sob..

 size(400,400);  
 background(0);  
 int f=50;  
 int w=width;  
 int c=(w/2);  
 int a=(c/f);  
 int k=(w/f);  //Maksudnya sama dengan nilai(a) pada jaring(1).
 int fc=255,hc=128;  //ini hanya variable bantu untuk memudahkan mengetik 255 dan 128
 for(int i=1;i<=f;i++){  
  stroke(fc,0,0);  
  line(a*i,a*i,c,c-a*i);  
  stroke(hc,hc,fc);  
  line(c,c-a*i,w-a*i,a*i);  
  stroke(0,fc,0);  
  line(w-a*i,a*i,c+a*i,c);  
  stroke(fc,fc,hc);  
  line(c+a*i,c,w-a*i,w-j*i);  
  stroke(0,0,fc);  
  line(w-a*i,w-a*i,c-a*i,c+a*i);  
  stroke(fc,fc,0);  
  line(c-a*i,c+a*i,a*i,a*i);  
  stroke(fc,0,fc);  
  line(k*i,0,w,k*i);  
  stroke(0,fc,fc);  
  line(w,k*i,w-k*i,w);  
  stroke(fc,hc,hc);  
  line(w-k*i,w,0,w-k*i);  
  stroke(hc,fc,hc);  
  line(0,w-k*i,k*i,0);  
 }  

  • Bentuk Papan Catur
Papan catur dibentuk dari 8x8 kotak warna hitam dan putih (dah tau kan?)
Ngemeng-ngemeng soal kotak, berarti instruksi dasar yang digunakan adalah rect(). Untuk mengganti warna ini (fill) pada kotak(rect) digunakan instruksi fill(x) atau fill(r,g,b). Karena warna kotaknya cuma hitam dan putih, maka yang kita gunakan adalah instruksi fill(x) saja.


Bagaimana logika pembentukannya?

Ini mah gampang, di baris ganjil dan kolom genap atau di baris genap dan kolom ganjil set warna kotak = hitam (fill(0)), selain itu set warna kotak = putih (fill(255)). (lihat instruksi berwarna merah)

Setelah itu tampilkan deh kotaknya.. Jadi deh..

 size(400,400);  
 background(255);  
 int s=50;  
 for(int y=0;y<8;y++){  
  for(int x=0;x<8;x++){  
  if(((y%2==1) && (x%2==0)) || ((y%2==0) && (x%2==1))) fill(0);  
  else fill(255);  
  rect(s*x,s*y,s,s);  
  }  
 }  


2. Ornamen Lingkaran
  • Permen Lolipop


 size(400,400);  
 background(0);  
 strokeWeight(2);  
 noFill();  
 int f=10,w=width,c=w/2,j=w/f,k=j/2;  
 stroke(255,0,0);  
 for(int i=1;i<=f;i++){  
  arc(c,k*i,j*i,j*i,-PI/2,PI/2);  
  arc(c,w-k*i,j*i,j*i,PI/2,3*PI/2);  
 }  

  • Lingkaran Nyamuk(1)


 size(400,400);  
 background(0);  
 strokeWeight(2);  
 noFill();  
 int f=10,w=width,c=w/2,j=c/f,k=j*2,l=j/2;  
 stroke(0,255,0);  
 for(int i=1;i<=f;i++){  
  arc(c,c-l,k*i,j*i,PI/2,1.5*PI);  
  arc(c,c,k*i,j*i,-PI/2,PI/2);  
 }  

  • Lingkaran Nyamuk(2)

 size(400,400);  
 background(0);  
 strokeWeight(2);  
 noFill();  
 int f=10,w=width,c=w/2,j=c/f,k=j*2,l=j/2;  
 stroke(0,255,0);  
 for(int i=1;i<=f;i++){  
  arc(c,c-l,k*i,j+k*(i-1),PI/2,1.5*PI);  
  arc(c,c,k*i,k*i,-PI/2,PI/2);   
 }  

  • Hot Spot

 size(400,400);   
 background(0);     
 int w=width,c=w/2,f=7,a=c/f;   
 stroke(255);  
 ellipse(c,c,40,40);  
 strokeWeight(10);  
 line(c,c,c,w);  
 noFill();  
 for(int i=1;i<=f;i++){  
  arc(c,c,a*2*i,a*2*i,-5*PI/4,PI/4);  
 }  

    • Wifi

 size(400,400);  
 background(0);  
 int w=width,c=w/2,f=7,a=w/f,b=a/2;  
 stroke(255);  
 strokeWeight(10);  
 ellipse(c,w-b,30,30);  
 noFill();  
 for(int i=2;i<=f+1;i++){  
  arc(c,w-b*i,a*i,b*i,5*PI/4,7*PI/4);   
 }  

Sebenarnya masih banyak lagi bentuk ornamen garis dan lingkaran yang dapat dibuat, namun karena masalah waktu dan "mood" maka pembahsan ornamen cukup sampai disini saja. Jika ada yang kurang jelas silahkan tanyakan di kolom komentar. :)

Terimakasih atas kunjungannya..

Materi kita berikutnya adalah tentang Translation, Rotate dan Scalling.

0 comments:

Post a Comment