algoritma line equation (autosaved)

18
LINE EQUATION (PERSAMAAN GARIS) Gradien suatu garis adalah perbandingan antara !"p!nen # (!rdinat) dan ! $ (absis) antara dua titi pada garis itu% Gradien suatu garis biasan#a din!tasi huru& e'il m % Perhatian ga"bar diba ah ini !"p!nen # dari garis A* + # , - # . / !"p!nen $ dari garis A* + $ , - $ .0 "aa 1 2atatan 1 gradien sebuah garis sering disebut e'!nd!ngan sebuah garis atau !e& sebuah garis% Persa"aan garis lurus ditulis dengan ru"us 1 # + M $ 3 b 1.1 Garis dengan gradien m dan melalui 1 titik Perhatian ga"bar diba ah ini

Upload: syahril

Post on 07-Oct-2015

273 views

Category:

Documents


0 download

DESCRIPTION

Gradien suatu garis adalah perbandingan antara komponen y (kordinat) dan komponen x (absis) antara dua titik pada garis itu. Gradien suatu garis biasanya dinotasikan dengan huruf kecil m.

TRANSCRIPT

LINE EQUATION (PERSAMAAN GARIS) Gradien suatu garis adalah perbandingan antara komponen y (kordinat) dan komponen x (absis) antara dua titik pada garis itu. Gradien suatu garis biasanya dinotasikan dengan huruf kecil m. Perhatikan gambar dibawah ini !

komponen y dari garis AB = y2- y1; komponen x dari garis AB = x2- x1,maka : Catatan : gradien sebuah garis sering disebut kecondongan sebuah garis atau koefisien arah sebuah garis. Persamaan garis lurus ditulis dengan rumus : y = Mx + b1.1 Garis dengan gradien m dan melalui 1 titikPerhatikan gambar dibawah ini !

Pada garis l terdapat titik A dengan koordinat (x1, y1) dan titik B dengan koordinat bebas, yaitu (x , y), bila gradien garis l dinyatakan dengan m, maka AB terdiri atas semua titik (x,y) dengan hubungan berikut ini : y - y1= m (x - x1)Kesimpulan :Persamaan garis dengan gradien m dan melalui sebuah titik (x1, y1), adalah :y - y1= m (x - x1)1.2 Persamaan garis yang melalui dua titikGradien garis yang melalui titik (x1, y1) dan (x2, y2) yaituseperti pada gambar di bawah ini,

Selanjutnya dengan menggunakan rumus persamaan garis dengan gradient m dan melalui sebuah titik (x1, y1), yaitu y - y1= m ( x - x1) dapat diperoleh rumus berikut :y - y1= m ( x - x1)y - y1y - y1= y2- y1=

Kesimpulan :Persamaan garis yang melalui titik (x1, y1) dan (x2, y2) yaitu :

FLOWCHART ALGORITMA LINE EQUATION

IMPLEMENNTASI PROGRAM ALGORITMA LINE EQUATION

program hitung_gradien_dan_persamaan garis ;uses wincrt;varx1,y1,x2,y2,m,xy:real;beginwriteln('-------------------------------------------------------------');writeln('PROGRAM HITUNG GRADIEN');writeln('DAN PERSAMAAN GARIS LURUS');writeln('-------------------------------------------------------------');writeln;write('Koordinat x1=');readln(x1);writeln;write('Koordinat y1=');readln(y1);writeln;write('Koordinat x2=');readln(x2);writeln;write('Koordinat y2=');readln(y2);writeln;m:=(y2-y1)/(x2-x1);writeln('Gradien Garis=',m:0:0);writeln;xy:=-1*m*x1+y1;writeln('Persamaan Garis =y:',m:0:0,'x',xy:0:0);writeln;writeln('------------------------------------------------------------');end.

LINE CLIPPING

Kliping sebuah garis P1 dan P2 dengan jendela L, R, T, dan B akan berhubungan dengan garis yang terletak di dalam jendela dan garis di luar jendela. Garis yang berada di dalam jendela adalah garis yang akan ditampilkan (P1 P2), sedangkan garis yang terletak di luar jendela dibuat tidak tampak (P1 P1 dan P2 P2)

Untuk menentukan letak sebuah garis di dalam jendela kliping dilakukan analisis letak titik yang menentukan garis tersebut dan memastikan bahwa titik-titik tersebut berada di dalam jendela kliping.

Titik AsliTitik SemuKondisi XKondisi Y

P1(x,y)P1(x,y)P1(x) LP1(y) T

P2(x,y)P2(x,y)P2(x) RP2(x) B

Kondisi garis terhadap jendela kliping :

Invisible: Tidak kelihatan, terletak di luar jendela kliping Visible: Terletak di dalm jendela kliping Halfpartial: Terpotong sebagian oleh jendela kliping, bisa hanya dnegan bagian atas, bawah, kiri atau kanan Vollpartial: Terpotong penuh oleh jendela kliping. Garis melintasi jendela kliping

FLOWCHART ALGORITMA LINE CLIPPING

LINE CLIPPING MENGGUNAKAN COHEN-SUTHERLAND ALGORITHM

Hubungan antara sebuah garis dengan jendela kliping dapat ditulis seperti hubungan antara titik awal dan titik akhir sebuah garis dengan jendela klipingP1(x,y) dan P2(x,y) W(L,R,T,B) Untuk menentukan relasi tersebut diperlukan suatu struktur data pembantu yang disebut pointcode. Dengan pointcode kita dapat mengidentifikasi posisi titik terhadap jendela kliping. Nilai untuk pointcode l, r, t dan b adalah 1 dan 0 yang merupakan nilai logika yang dapat dimengerti dengan nilai true dan false. Suatu titik yang visible berarti titik tersebut terletak di dalam jendela kliping, dan invisible jika terletak di luar jendela kliping. Suatu titik itu visible dengan pointcode jika nilai l, r, t dan b adalah nol, artinya jika salah satu nilai dari l, r, t dan b tidak sama degan nol maka dapat diketahui bahwa titik tersebut terletak di luar jendela kliping dan diketahui pada posisi mana. Berdasarkan urutan kode, pointcode ditentukan :

PointcodeArti Kode

0000Terletak di dalam jendela kliping

0001Terletak di sebelah kiri jendela kliping

0010Terletak di sebelah kanan jendela kliping

0100Terletak di sebelah bawah jendela kliping

0101Terletak di sebelah kiri bawah jendela kliping

0110Terletak di sebelah kanan bawah jendela kliping

1000Terletak di sebelah atas jendela klipig

1001Terletak di sebelah kiri atas jendela kliping

1010Terleak di sebelah kanan atas jendela kliping

Titik terletak di dalam jendela kliping jika jumlah keempat pointcode adalah nol :L + R + T + B = 0 Titik terletak di luar jendela kliping jika jumlah keempat pointcode lebih besar dari nol. L + R + T + B > 0 Visibilitas suatu garis tergantung dari pointcode pada kedua titik yang membentuk garis tersebut, yaitu P1 dan P2. Jika P1 dan P2 di dalam jendela kliping maka garis adalah visible Jika salah satu dari titik P1 atau P2 di uar jendela kliping, artinya garis adalah halfpartial Jika titik P1 dan P2 di luar jendela kliping, artinya garis adalah invisible. Jika P1 dan P2 melintasi jendela kliping, artinya garis adalah vollpartial

Algoritma Kliping Cohen Sutherland :1. Tentukan regioncode dari setiap endpoint2. Jika kedua endpoint memiliki regioncode 0000, maka garis berada di dalam jendela kliping. Gambar garis tersebut3. Jika tidak, lakukan operasi logika AND untuk kedua regioncode3.1. Jika hasilnya 0000, maka buang garis tersebut (tolak)3.2. Jika tidak (hasilnya 000), maka dibutuhkan kliping3.2.1 Pilih salah satu endpoint yang berada di luar jendela kliping3.2.2 Cari titik persinggungan pada batas jendela (berdasarkan regioncode)3.2.3 Ganti endpoint dengan titik persinggungan dan update regioncode3.2.4 Ulangi langkah 2 hingga diperoleh garis klipping yang diterima dan yang ditolak4. Ulangi langkah 2 untuk garis yang lain.

Daerah titik persinggungan dapat dilihat dari nilai bit : Jika bit 1 = 1, titik persinggungan ada di atas Jika bit 2 = 1, titik persinggungan ada di bawah Jika bit 3 = 1, titik persinggungan ada di kanan Jika bit 4 = 1, titik persinggungan ada di kiri

Titik persinggungan dapat dicari dengan persamaan garis : Persinggungan antara batas KIRI dan KANAN

Persinggungan antara batas ATAS dan BAWAH

IMPLEMENTASI PROGRAM LINE CLIPPING MENGGUNAKAN COHEN-SUTHERLAND ALGORITHM

#define OutCode int

const int INSIDE = 0; // 0000const int LEFT = 1; // 0001const int RIGHT = 2; // 0010const int BOTTOM = 4; // 0100const int TOP = 8; // 1000

// Compute the bit code for a point (x, y) using the clip rectangle// bounded diagonally by (xmin, ymin), and (xmax, ymax)OutCode ComputeOutCode(double x, double y){ OutCode code;

code = INSIDE; // initialized as being inside of clip window

if (x < xmin) // to the left of clip window code |= LEFT; else if (x > xmax) // to the right of clip window code |= RIGHT; if (y < ymin) // below the clip window code |= BOTTOM; else if (y > ymax) // above the clip window code |= TOP;

return code;}// CohenSutherland clipping algorithm clips a line from// P0 = (x0, y0) to P1 = (x1, y1) against a rectangle with// diagonal from (xmin, ymin) to (xmax, ymax).void CohenSutherlandLineClipAndDraw(double x0, double y0, double x1, double y1){ // compute outcodes for P0, P1, and whatever point lies outside the clip rectangle OutCode outcode0 = ComputeOutCode(x0, y0); OutCode outcode1 = ComputeOutCode(x1, y1); bool accept = false; while (true) { if (!(outcode0 | outcode1)) { //logical or is 0. Trivially accept and get out of loop accept = true; break; } else if (outcode0 & outcode1) { //logical and is not 0. Trivially reject and get out of loop break; } else { // failed both tests, so calculate the line segment to clip // from an outside point to an intersection with clip edge double x, y;

// At least one endpoint is outside the clip rectangle; pick it. OutCode outcodeOut = outcode0? outcode0 : outcode1; // Now find the intersection point; // use formulas y = y0 + slope * (x - x0), x = x0 + (1 / slope) * (y - y0) if (outcodeOut & TOP) { // point is above the clip rectangle x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0); y = ymax; } else if (outcodeOut & BOTTOM) { // point is below the clip rectangle x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0); y = ymin; } else if (outcodeOut & RIGHT) { // point is to the right of clip rectangle y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0); x = xmax; } else if (outcodeOut & LEFT) { // point is to the left of clip rectangle y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0); x = xmin; } // Now we move outside point to intersection point to clip // and get ready for next pass. if (outcodeOut == outcode0) { x0 = x; y0 = y; outcode0 = ComputeOutCode(x0, y0); } else { x1 = x; y1 = y; outcode1 = ComputeOutCode(x1, y1); } } } if (accept) { // Following functions are left for implementation by user based on his platform(OpenGL/graphics.h etc.) DrawRectangle(xmin, ymin, xmax, ymax); LineSegment(x0, y0, x1, y1); }}

ALGORITMA MIDPOINT UNTUK PENGGAMBARAN GARIS

Algoritma midpoint dikembangkan oleh Pitteway pada tahun 1967. Pada gambar di atas, titik abu-abu menyatakan posisi piksel, titik hitam menyatakan posisi piksel yang telah digambar. Berdasarkan piksel ke n yang telah digambar, diperlukan metode untuk menentukan piksel berikut yang akan digambar, karena penggambaran dilakukan dari kiri ke kanan, maka piksel berikutnya harus pada kolom n+1. Karena gradien diantara 0 dan 1, maka piksel berikutnya adalah pada posisi titik p atau titik q.

Persamaan garis lurus dalam persamaan y = mx + c dapat dinyatakan dalam fungsi x,y berikut.f(x, y) = ax + by + c = 0 ..(1)

Fungsi f(x,y) dalam persamaan di atas, akan memberikan nilai 0 pada setiap titik yang terletak pada garis, dan bernilai positip pada setiap titik yang terletak dibawah garis, dan bernilai negatif pada setiap titik yang terletak diatas garis.Maka untuk menentukan apakah titik P atau Q sebagai koordinat piksel berikutnya, maka dilakukan dengan cara menghitung nilai fungsi f(x,y) dalam persamaan di atas pada titik P dan titik Q . Jika fungsi f(x,y) tersebut memberikan nilai positif, maka piksel berikutnya adalah Q, sebaliknya piksel berikutnya adalah P.

g(x, y) = f (xn+ 1, yn+ 1/2)

Fungsi g(x,y) persamaan di atas merupakan variabel penentu, dengan mengevaluasi g (x, y) dapat ditentukan piksel berikutnya yang mana berdasarkan tanda plus atau minus dari hasil fungsi g(x,y).Untuk mempercepat komputasi fungsi g(x,y), dilakukan dengan cara incremental berdasarkan nilai sebelumnya. Untuk setiap piksel, increment sederhana (DeltaG) dipakai sebagai variabel penentu. Karena hanya ada 2 pilihan piksel pada setiap tahap, maka hanya ada 2 increment yang dapat digunakan. Hal ini dilakukan dengan cara pengurangan nilai g(x,y) yang berurutan dengan menggunakan persamaan 1 dan persamaan 2.

DeltaG = a * DeltaX + b * DeltaY(3)

Dimana DeltaX dan DeltaY adalah increment yang dipakai pada x dan y, yang bernilai 0 atau 1. Bila bergeser 1 piksel ke kanan :DeltaG1 = a(4)Bila bergeser 1 piksel ke kanan dan 1 piksel ke atas.DeltaG2 = a + b(5)Jadi nilai dari variable penentu dapat dihitung dari nilai sebelumnya dengan cara menambah dengan (a) atau (a+b). Algoritma untuk menggambar garis lurus dari (x1, y1) sampai (x2, y2) dilakukan dengan langkah-langkah sebagai-berikut:1. Gambar piksel pertama (x1,y1). Hitung variabel penentu dengan persamaanc = y1 m* x1.2. Tentukan tanda variabel penentu. Jika variabel penentu bernilai positif, increment x dan y dan tambahkan (a+b) pada vaiabel penentu, sebaliknya increment x dan y dan tambahkan (a) pada variabel penentu.3. Plot piksel pada posisi (x, y).4. Ulangi langkah mulai langkah kedua, sampai piksel terakhir (x2,y2).

IMPLEMENTASI PROGRAM ALGORITMA MIDPOINT

#include #include #include #include #include #include int line_mid(int x1,int y1,int x2,int y2,int color);int main(void){int elapse;struct time t1,t2;/* request auto detection */int gdriver = DETECT, gmode, errorcode;int xmax, ymax;/* initialize graphics and local variables */initgraph(&gdriver, &gmode, "");/* read result of initialization */errorcode = graphresult();/* an error occurred */if (errorcode != grOk){printf("Graphics error: %s\n", grapherrormsg(errorcode));printf("Press any key to halt:");getch();exit(1);}setcolor(getmaxcolor());xmax = getmaxx();ymax = getmaxy();// get start timegettime(&t1);printf("The Start time is: %2d:%02d:%02d.%02d\n",t1.ti_hour, t1.ti_min, t1.ti_sec, t1.ti_hund);// draw line graphics// line_mid(0,0,xmax*1,ymax*1,1);// get finish timegettime(&t2);printf("The Finish time is: %2d:%02d:%02d.%02d\n", t2.ti_hour, t2.ti_min, t2.ti_sec, t2.ti_hund);// elapse timeelapse = (t2.ti_hour*60*60*100+t2.ti_min*60*100+t2.ti_sec*100+t2.ti_hund)- \ (t1.ti_hour*60*60*100+t1.ti_min*60*100+t1.ti_sec*100+t1.ti_hund);printf("The Elapse time is: %d x 1/100 second \n",elapse);/* clean up */getch();closegraph();return 0;}int line_mid(int x1,int y1,int x2,int y2,int color)// Algorith midpoint// It is assumed that x1 < x2 and the gradient is less than 1.{ int x,y=y1;int a = y2 - y1;int b = x2 - x1;int G = 2 * a - b; // Decision variableint DeltaG1 = 2 * (a - b);int DeltaG2 = 2 * a;for (x = x1; x 0) { G += DeltaG1; y++; ; // Next column and row. putpixel(x,y,color); } else { G += DeltaG2;// y not changed // Next column. putpixel(x,y,color); }}return (0);}

DAFTAR PUSTAKA

http://genius.smpn1mgl.sch.id/file.php/1/animasi/matematika/persamaan%20garis%20lurus/index.htmlhttp://courses.wccnet.edu/~palay/precalc/218601.htmhttp://blogaanwati.files.wordpress.com/2013/02/grafik-komputer-clipping.pdf.http://selametsubu.blogspot.com/2010/10/cohensutherland-line-clipping-algorithm.htmlhttp://faculty.petra.ac.id/kgunadi/midpoint.html