Curhat, tutorial, tugas kuliah, dll..

untuk menebalkan garis/stroke ada beberapa cara yang dapat dilakukan (tergantung jenis garisnya, melengkung atau lurus). Berikut akan saya jelaskan algoritma untuk menebalkan garis mulai dari garis yang lurus..

garis lurus

Untuk garis lurus sangatlah mudah untuk melakukan penebalan. kita hanya tinggal melakukan penebalan ke arah vertikal atau horizontal tergantung dari delta-x dan delta-y. perhatikan gambar dan penjelasan di bawah ini.

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();
  bresenham(-30,20,185,75,10);
}
void tebal(int x, int y, boolean dx, int tebal){
  if (dx){
    for (int i=0;i<tebal;i++){
      stdPoint(x,y+i);
    }
  }else{
    for (int i=0;i<tebal;i++){
      stdPoint(x+i,y);
    }
  }
}

void bresenham(int x1, int y1, int x2, int y2, int tebal){
  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) {
          tebal(x1++, y1, true, tebal);
          pk=pk+2*dy;
        } else {
          tebal(x1++, y1++, true, tebal);
          pk=pk+2*dy-2*dx;
        }
      }
    }else{
      int pk=2*dx-dy;
      for (int i=0;i<dy;i++) {
        if (pk<0) {
          tebal(x1, y1++, false, tebal);
          pk=pk+2*dx;
        } else {
          tebal(x1++, y1++, false, tebal);
          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) {
          tebal(x1--, y1, true, tebal);
          pk=pk+2*dy;
        } else {
          tebal(x1--, y1++, true, tebal);
          pk=pk+2*dy-2*dx;
        }
      }
    }else{
      int pk=2*dx-dy;
      for (int i=0;i<dy;i++) {
        if (pk<0) {
          tebal(x1, y1++, false, tebal);
          pk=pk+2*dx;
        } else {
          tebal(x1--, y1++, false, tebal);
          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++){
    point((canvasW/2), z);
    point(z, (canvasH/2));
  }
  stroke(0, 0, 0);
}

jika code di atas error maka download original codenya disini

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: