Curhat, tutorial, tugas kuliah, dll..

Algoritma untuk membuat kotak sebenarnya ada banyak sekali, tergantung anda suka yang mana.. Disini saya akan menjelaskan algoritma pembuatan kotak dengan mengacu pada algoritma pembuatan garis. Mengapa harus dengan algoritma garis? ya karena kotak juga merupakan garis vertikal dan horizontal yang saling terhubung bukan? Jika anda lupa lagi cara bagaimana membuat garis, silakan lihat postingan saya yang ini https://rifaniponk.wordpress.com/2012/01/13/algoritma-garis-bresenham-implementasi-dgn-processing/

konsep kotak

Untuk membuat lingkaran dari garis-garis, perhatikan dulu gambar di bawah ini
kotak
(x1,y1) dan (x2,y2) ialah parameter yang dibutuhkan ketika kita hendak membuat garis. dari parameter itu juga kita mampu membuat kotak seperti pada gambar di atas. titik a dan b dapat di tentukan dengan cara mencari selisih antara nilai kedua titik.. Setelah kita menemukan titik a dan titik b, maka kita hanya tinggal mengambar garis yang terhubung antara titik-titik. gimana? mudah kan? selanjutnya pasti anda sudah mengerti sendiri 🙂

implementasi dengan processing

static int canvasW = 600;
static int canvasH = 600;
void setup() {
  size(canvasW, canvasH);
  background(255);
}

//--------------------------------- variable global ditulis disini

//--------------------------------- disini mulai codingnya
void draw() {
  drawHelpLines();
  kotak(10,10,200,100);
}
void kotak(int x1, int y1, int x2, int y2){
  bresenham(x1,y1,x1,y2);
  bresenham(x1,y2,x2,y2);
  bresenham(x2,y1,x2,y2);
  bresenham(x2,y1,x1,y1);
}
void bresenham(int x1, int y1, int x2, int y2){
  stdPoint(x1,y1);
  stdPoint(x2,y2);
  int dy=abs(y2-y1);
  int dx=abs(x2-x1);
  if (x1<=x2 && y1<=y2){
    if (dx>=dy){
      int pk=2*dy-dx;
      for (int i=0;i<dx;i++) {
        if (pk<0) {
          stdPoint(x1++, y1);
          pk=pk+2*dy;
        } else {
          stdPoint(x1++, y1++);
          pk=pk+2*dy-2*dx;
        }
      }
    }else{
      int pk=2*dx-dy;
      for (int i=0;i<dy;i++) {
        if (pk<0) {
          stdPoint(x1, y1++);
          pk=pk+2*dx;
        } else {
          stdPoint(x1++, y1++);
          pk=pk+2*dx-2*dy;
        }
      }

    }
  }else {
    if (dx>=dy){
      int pk=2*dy-dx;
      for (int i=0;i<dx;i++) {
        if (pk<0) {
          stdPoint(x1--, y1);
          pk=pk+2*dy;
        } else {
          stdPoint(x1--, y1++);
          pk=pk+2*dy-2*dx;
        }
      }
    }else{
      int pk=2*dx-dy;
      for (int i=0;i<dy;i++) {
        if (pk<0) {
          stdPoint(x1, y1++);
          pk=pk+2*dx;
        } else {
          stdPoint(x1--, y1++);
          pk=pk+2*dx-2*dy;
        }
      }

    }

  }
}

//-------------------------------

// -------------------------------- normalisasi, ga perlu dirubah

void stdPoint(int xxx, int yyy)
{
  point(xxx+(canvasW/2), (yyy*-1)+(canvasH/2));
}

void drawHelpLines()
{
  stroke(0, 0, 255);
  for (int z=0; z<canvasW; z=z+1) {
    point((canvasW/2), z);
    point(z, (canvasH/2));
  }
  stroke(0, 0, 0);
}

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s

%d bloggers like this: