Selasa, 05 April 2011

Algoritma Pembentukan Elips

Elips merupakan modifikasi dari bentuk lingkaran, dengan memasukkan mayor dan minor axis pada prosedur lingkaran. Elips ditentukan oleh satu set titik dengan memperhitungkan jumlah jarak dari kedua posisi(foci). Bila jarak ke kedua foci dari sembarang titik p(x,y) pada elips diberi label d1 dan d2, maka persamaan elips menjadi :
d1+d2=konstan
Untuk menggambarkan jarak d1 dan d2 dengan ketentuan koordinat masing masing F1(1(x1,1,y1) 1) 1) dan F2(2(X2,2,Y2)
Ö((xx1)2+(yy1)2)2+Ö((xx2)2+(yy2)2=konstan
Dimana mayor dan minor axis elips dalam posisi pararel dengan sumbu x dan sumbu y pada contoh ini, parameter rx disebut semi major axis dan ry disebut semi minor axis, sehingga persamaan elips dengan parameter rx dan ry menjadi :
((xrc)/rx)2 + ((yyc)/ry)2=1
Algoritma elips Midpoint
Untuk algoritma pembentukan elips, pendekatan yang dilakukan sama dengan penggunaan pada saat menampilkan lingkaran. Dengan parameter untuk elips pada posisi standar, yaitu rx, ry, dan(xc,yc). Bila elips ditampilkan pada posisi standar, maka dapat dilakukan dengan memutar elips tersebut menurun koordinat titik pusat, dan mendapatkan kembali mayor dan minor axis.

Metode midpoint untuk elips dijalankan pada kuadran pertama dalam dua bagian. Bagian pertama menrut kemiringan elips rx<ry. Penambahan dengan unit step pada arah sumbu x dilakukan bila slope lebih kecil dari 1, dan dengan unit step menurut sumbu y bila kemiringan lebih besar dari 1.

Bagian 1 dan 2 dapat digunakan untuk bermacam macam cara. Pertama dimulai dari posisi (0,ry) dan step searah jarum jam sepanjang jalur elips pada kuadran pertama. Pergeseran dengan unit step dalam x pada saat slope lebih besar dari 1.

Alternatif lain, dimulai dari (rx,0) dan seleksi titik dalam arah berlawanan dengan arah jarum jam. Penggeseran unit step y ke unit step x pada saat kemiringan lebih besar dari 1. dengan prosesor pararel, posisi pixel dapat dihitung dalam dua bagian sekaligus.

Pembentukan elips menurut algoritma Circle midpoint sebagai berikut:
1.Tentukan rx,ry dan pusat elips (xc,yc) kemudian diperoleh (xo,yo)=(0,ry)
2.Hitung nilai parameter P10=ry2rx2 ry+1/4 rx2
3.Tentukan nilai awal k=0, untuk setiap posisi xk k berlaku sebagai berikut :
  • Bila p1k< 0 maka titik selanjutnya adalah (xk+1, yk) 
p1k+1k+1k+1=p1k+2ry2xk+1k+1k+1+ry2
  • Bila tidak, maka titik selanjutnya adalah (xk+!,yk1) dan
p1k+1k+1k+1=p1k+2ry2xk+1k+1k+12rx yk+1k+1k+1+ry2
dengan
2ry2xk+1k+1k+1=2ry2xk k +2ry2
Dan
2rx yk+1k+1k+1=2rx2 yk k +2rx2
Teruskan sampai 2ry2x >= 2rx2 y
4.Tentukan nilai parameter pada bagian kedua menggunakan titik terakhir (x0,y0) yang telah dihitung pada bagian pertama, sebagai berikut
P2k+1=k+1=k+1=k+1=2ry2 2 (xo+1/2)2+2rx2 2 (yo1)2rx2 ry2
5.Setiap posisi yk k pada bagian kedua, dimulai dengan k=0
  • Bila p2k> 0 maka titik selanjutnya adalah (xk, yk1)
p2k+1k+1k+1=p2k+2rx2yk+1k+1k+1+rx2
  • Bila tidak, maka titik selanjutnya adalah (xk+1,yk1) dan
p2k+1k+1k+1=pk+2ry2xk+1k+1k+12rx yk+1k+1k+1+ry2
6.Tentukan titik simetris pada ketiga kuadran lainnya
7.Gerakkan setiap posisi(x,y) pada garis melingkar dari elisp dengan titik pusat(xc,yc) dan tentukan nilai koordinat
x=x+xc y=y+yc
8.Ulangi langkah untuk bagian pertama di atas, sehingga 2ry2x >= 2rx2 y
Contoh algoritma elips Midpoint
Untuk menggambarkan algoritma midpoint dalam pembentukan elips dengan titik pusat(0,0) dan mayor axis rx=6, serta minor axis ry=8, perhitungan berdasarkan pada kuadran pertama sebagai berikut:, nilai parameter dapat ditentukan
        2ry2x=0
        2ry2x=2rx2 ry
        p1o= ry2 2 2 + rx2 ry y 1/4 rx2
              =-215

Koordinat titik awal (x,r) =(0,8)

Prosedur algoritma elips MidpointProsedur berikut menampilkan posisi pixel pada monitor dengan algorima Midpoint. Input yang digunakan adalah koordinat titik pusat mayor axis, dan minor axis. Posisi pixel ditentukan dengan rutin setPixel.
uses graph,crt;
   {tambahkan pada bagian ini prosedur penginisialisasian device, lihat pada bab 1}
     procedure elipsPlotPoints(xCenter,yCenter,x,y:integer);
begin
       putPixel(xCenter+x, yCenter+y,30);
       putPixel(xCenter-x, yCenter+y,30);
       putPixel(xCenter+x, yCenter-y,30);
       putPixel(xCenter-x, yCenter-y,30);
end;
procedure elipsMidPoint(xCenter,yCenter,Rx, Ry:integer);
var
      Rx2,Ry2,x,y,twoRx2,twoRy2,py,px,p:integer;
begin
      Rx2:=Rx*Rx;
      Ry2:=Ry*Ry;
      x:=0;
      y:=Ry;
      twoRx2:=2*Rx2;
      twoRy2:=2*Ry2;
      px:=0;
      py:=twoRx2*y;
      elipsPlotPoints(xCenter,yCenter,x,y);
        //bagian1
        p:=round(Ry2-(Rx2*Ry)+(0.25*Rx2));
        while px<py do
        begin
               x:=x+1;
               px:=px+twoRy2;
               if p<0 then
                    p:= p+(Ry2+px)
              else
              begin
                    y:=y-1;
                    py:=py-twoRx2;
                    p:=p+(Ry2+px-py);
              end;
       elipsPlotPoints(xCenter,yCenter,x,y);
       end
    //bagian 2
    p:=round(Ry2*(x+0.5) *(x+0.5)+Rx2*(y-1) *(y-1)-Rx2*Ry2);
    while y>0 do
    begin
           y:=y-1;
           py:=py-twoRx2;
           if p>0 then
                   p:=p+(Rx2-py)
                  else
                  begin
                           x:=x+1;
                           px:=px+twoRy2;
                           p:=p+Ry2+px-py;
                  end;
           elipsPlotPoints(xCenter,yCenter,x,y);
    end;
end;
begin
        init;
        elipsMidPoint(130,120,120,190);
        readkey;
       destroy;
end.

* Sumber : Modul Praktikum Grafika Komputer 2D oleh Muhammad Fuad DR, Fakultas MIPA
                 Universitas  Gajah Mada Yogyakarta

(edited by : erni mahdalena)

Tidak ada komentar:

Posting Komentar