modul praktikum grafika komputer 2d · pdf filecontoh penerapan jika kita ingin ... koordinat...

Click here to load reader

Post on 06-Feb-2018

214 views

Category:

Documents

1 download

Embed Size (px)

TRANSCRIPT

  • MODUL PRAKTIKUMGRAFIKA KOMPUTER 2D

    Disusunoleh:MuhammadFuadDR03/165203/PA/9277

    LABORATORIUM KOMPUTASI

    JURUSAN MATEMATIKAFAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

    UNIVERSITAS GADJAH MADAYOGYAKARTA

    2006

  • BAB I

    SoftwareUntukGrafikaKomputer

    Softwareuntukmenggambargrafikpadakomputeradaduajenisyaitusoftware

    yangbebentuklibraryataupustakapadasuatubahasapemrograman(paketpemrograman

    grafika)dansoftwareyangberbentukaplikasikhusus.Padasoftwareyangberbentuk

    librarysuatubahasapemrogramanakandilengkapifungsifungsigrafikyangberasaldari

    paketsoftwaregrafiktersebutyangtermasukcontohdarijenisiniadalahOpenGlyang

    dibuatSiliconGraphics.Sedangpadapaketaplikasikhususgambargrafikdibuattanpa

    mengetahuibagaiamanahalitudapatterjadi,contohdarijenisiniadalahBlenderataupun

    Qcad. PadaModuliniyangdigunakanadalahsoftwarejenispertamadengan

    menggunakanfungsigrafikpadaBahasaPemrogramanPascal.

    Note:Semuakodepadamodulinimenggunakanprosedurprosedurdi

    bawah.tambahkanpadasetiapawalkodeprogram!.

    procedureinit;

    vargd,gm:integer;

    begin

    gm:=detect;gd:=0;

    InitGraph(gd,gm,'');

    ifGraphResultgrOkthen

    begin

    Writeln('Graphdriver',gd,'graphmode',gm,'not

    supported');

    Halt(1);

    end;

    end;

    proceduredestroy;

    begin

    closegraph;

    end;

  • BABII

    OutputPrimitif

    1.TITIK

    Titik dalamGrafika Komputer bisa didefinisikan sebagai suatu posisi tertentu dalam

    suatu sistem koordinat. Sistem koordinat yang dipakai bisa Polar Coordinates atau

    Cartesian Coordinates. Biasanya dalam pemrograman grafis, yang paling umum

    digunakanadalahCartesianCoordinates.

    Dalam CartesianCoordinates,titikdidefinisikansebagaikombinasiduabilanganyang

    menentukanposisitersebutdalamkoordinatxdany(2D)

    ContohPenerapan

    Jikakita inginmenempatkantitiktitikA(2,4), B(1,1), C(4,1.5), D(4,2), E(4,3)

    Kitabisamenggambarkansebagaiberikut:

    A

    B

    CD

    E

    GAMBAR 1 : TITIK DALAM CARTESIAN COORDINATESAda 2 definisi

    koordinat dalam komputer terutama dalam Sistem Operasi Windows, yaitu Screen

    Coordinate, danCartesianCoordinate, keduanyaseringmembingungkan. Untuk lebih

    jelasnyamarikitalihatgambarberikut:

  • Screen Coordinat esCart esian Coordinat es

    X

    Y

    Y

    X

    GAMBAR2:PERBEDAANSCREENDANCARTESIANCOORDINATES

    Prinsipnya,karenamonitordidesainuntukmenggambardariataskebawah,makasumbu

    y pada Screen Coordinates dan Cartesian Coordinates berbeda arah, untuk Screen

    Coordinates,sumbuYarahnyakebawah,sedangkanpadaCartesianCoordinates,sumbu

    Y arahnya ke atas. Biasanya dalam rendering pipeline, hal yang terakhir dilakukan

    adalahmengkonversiCartesianCoordinateskeScreenCoordinates.

    DalamSistemOperasiLinux,koordinatyangdipakaiantaraCartesiandanScreensama,

    yaituYpositifkeatas.

    Untukkoordinate3D,samadengan2D,hanyasajaditambah1sumbuyaitusumbuz

    (axisz). Adabeberapacarauntuk menggambarkansumbuX, YdanZ, ini. Pertama

    dengansumbuzmengarahkeatas(gambar3).

    X

    Y

    Z

    GAMBAR3:KOORDINATDENGANZMENGARAHKEATAS

    dankoordinatdengankoordinatymengarakkeatas.

  • X

    Y

    Z

    X

    Z

    Y

    GAMBAR4:KOORDINATDENGANYMENGARAHKEATAS

    2.Garis

    Umumnyapersamaangarisluruspadakoordinatkartesiusdiwujudkandalam

    persamaangaris:y=m.x+b

    jikadimisalkanpadaduatitik(x0,y0danx1,y1)akandibuatsebuahgarislurus,kitadapat

    menentukannilaim'danbdenganpersamaanberikut:

    y1y0

    m=______

    x1x0

    b=y1m.x1

    algoritmauntukmenggambargarispadakomputerdidasarkanpadaduapersamaandi

    atas.dimanamadalahgradienataukemiringangaristersebut.

    1. Algoritmadigitaldifferentialanalyzer(DDA),

    Prinsipalgoritmainiadalahmengambilnilaiintegerterdekatdenganjalurgaris

    berdasarkanatassebuahtitikyangtelahditentukansebelumnya(titikawalgaris).

    AlgoritmapembentukangarisDDA:

    1. Tentukanduatitikyangakandihubungkandalampembentukangaris.

    2. Tentukansalahsatutitiksebagaiawal(x0,y0)dantitikakhir(x1,y1).

    3. Hitungdx=x1x0,dandy=y1y0.

  • 4. Tentukanlangkah,yaitudengancarajarakmaksimumjumlahpenambahannilai

    xmaupunnilaiy,dengancara:

    Bilanilaiabsolutdaridxlebihbesardariabsolutdy,makalangkah=absolut

    daridx.

    Bilatidakmakalangkah=absolutdaridy

    5. Hitungpenambahankoordinatpixelyaitux_increment=dx/langkah,dan

    y_increment=dy/langkah

    6. Koordinatselanjutnya(x+x_increment,y+y_increment)

    7. Posisipixelpadalayarditentukandenganpembulatannilaikoordinattersebut.

    8. Ulanginomor6dan7untukmenentukanposisipixelselanjutnya,sampaix=x1

    dany=y1.

    ContohProsedurDDAdalampascal:uses graph,crt;

    {tambahkan pada bagian ini prosedur penginisialisasian device,

    lihat pada bab 1}

    procedure drawLine(xstart,ystart,xend,yend:integer);

    var

    step,k:integer;

    dx,dy:real;

    x_inc,y_inc,x,y:real;

    begin

    dx:=xend-xstart;

    dy:=yend-ystart;

    x:=xstart;

    y:=ystart;

    if abs(dx) > abs(dy) then

    step:=round(abs(dx))

    else

    step:=round(abs(dy));

    x_inc:=dx/step;

    y_inc:=dy/step;

    putPixel(round(x),round(y),30);

    for k:=1 to step do

  • begin

    x:=x+x_inc;

    y:=y+y_inc;

    putPixel(round(x),round(y),30);

    end;

    end;

    begin

    init;

    {menggambar garis dari titik 10,10 ke 500,10}

    drawLine(10,10,500,10);

    readkey;

    destroy;

    end.

    2. AlgoritmagarisBressenham

    TidaksepertiAlgoritmaDDA,AlgoritmaBressenhamtidakmembulatkannilai

    posisipixelsetiapwaktu.AlgoritmaBressenhamhanyamenggunakan

    penambahannilaiintegeryangjugadapatdiadaptasiuntukmenggambar

    lingkaran.

    Berikutinilangkahlangkahuntukmembentukgarismenurutalgoritma

    Bressenham:

    1.Tentukanduatitikyangakandihubungkan

    2.Tentukansalahsatutitikdisebelahkirisebagaititikawalyaitu(x0,y0)dan

    titiklainnyasebagaititikakhir(x1,y1).

    3. Hitungdx,dy,2dxdan2dy2dx.

    4. Hitungparameter

    p0=2dydx

    5. Untuksetiapxksepanjangjalurgaris,dimulaidengank=0,

    Bilapk

  • Bilatidak,makatitikselanjutnyaadalah(xk+1,yk+1),danpk+1=pk+2dy

    2dx.

    6. Ulangilangkahnomor5untukmenentukanposisipixelselanjutnya,samapai

    x=x1dany=y1.

    ContohProseduralgoritmaBressenhamuntukmenggambargarisdarititik(10,10)

    ke(500,10).uses graph,crt;

    {tambahkan pada bagian ini prosedur penginisialisasian device,

    lihat pada bab 1}

    procedure DrawBressLine(xa,ya,xb,yb:integer);

    var

    dx,p,dy,xEnd:integer;

    x,y:real;

    begin

    dx:= abs(xb-xa);

    dy:= abs(yb-ya);

    p:=2*dy-dx;

    if xa > xb then

    begin

    x:=xb;

    y:=yb;

    xEnd:=xa;

    end

    else

    begin

    x:=xa;

    y:=ya;

    xEnd:=xb;

    end;

    putPixel(round(x),round(y),30);

    while x < xEnd do

    begin

    x:=x+1;

    if p < 0 then

  • p:=p+(2*dy)

    else

    begin

    y:=y+1;

    p:=p+(2*(dy-dx));

    end;

    putPixel(round(x),round(y),30);

    end;

    end;

    begin

    init;

    DrawBressLine(10,10,500,10);

    readkey;

    destroy;

    end.

    4.AlgoritmaPembentukLingkaran

    Secaraumumprosedurpembentuklingkarandibuatdenganrumusdasar

    x2+y2=R2.Terdapatbeberapacarauntukmembentuksuatulingkarannamuntidak

    efisien.Lingkarandapatdibuatdenganmenggambarkanseperempatlingkarankarena

    bagianlaindapatdibuatsebagaibagianyangsimetris.

    a. AlgoritmaSimetrisdelapantitik

    Padaalgoritmainipembuatanlingkarandilakukandenganmenentukansatutitik

    awal.Bilatitikawalpadalingkaran(x,y)makaterdapattigaposisilain,sehingga

    dapatdiperolehdelapantitik.Dengandemikiansebenarnyahanyadiperlukan

    untukmenghitungsegmen45dalamamenentukanlingkaranselengkapnya.

    Dengantitikpusatlingkarantertentu,delapantitiksimetrisdapatditampilkan

    denganprosedurCirclePointSebagaiberikut:

    procedure CirclePoints(x, y, value:integer);

    begin

    putPixel(x,y,value);

    putPixel(-x,y,value);

  • putPixel(x,-y,value);

    putPixel(-x,-y,value);

    putPixel(y,x,value);

    putPixel(-y,x,value);

    putPixel(y,-x,value);

    putPixel(-y,-x,value);

    end;

    b. AlgoritmaLingkaranMidpoint

    AlgoritmaLingkaranMidpointjugadisebutalgoritmalingkaran

    Bressenham.Bressenhammengembangkangeneratorlingkaranyangcukupefisien.

    Algoritmayangdigunakanmembentuksemuatitikberdasarkantitikpusatdengan

    penambahansemuajalursekelilinglingkaran.Algoritmainiditurunkandarialgoritma

    Midpointuntukpembentukangaris.Dalamhalinihanyadiperhatikanbagian45dari

    suatulingkaran,yaituoktankeduadarix=0kex=R/2,danmenggunakanCirclePoints

    untukmenampilkantitikdariseluruhlingkaran.

    LangkahlangkahuntukmembentuklingkaranalgoritmaCircleMidpoint:

    1. Tentukanradiusrdengantitkpusatlingkaran(xc,yc)kemudiandiperoleh

    (x0,y0)=(0,r)

    2. Hitungnilaidariparameter

    P0=5/4r

    3. Tentukannilaiawalk=0,untuksetiapposisixkberlakusebagaiberikut:

    o BilaPk

  • 5. Gerakkansetiapposisipixel(x,y)padagarismelingkardarilingkarandengan

    titikpusat(xc,yc)dantentukannilaikoordinat:

    x=x+xc y=y+yc

    6. Ulangilangkahke3sampai5,sehinggax>=y

    Contohalgoritmalingkaranmidpoint

    UntukmenggambarkanalgoritmaBressenhamdalampembentukansuatu

    lingkarandengantitikpusat(0,0)danradius10,perhitunganberdasarkanpadaoktandari

    kuadranpertamadimanax=0sampaix=y.Nilaiparameterdapatditentukandengan

    P0=1r=110=9

    Koordinattitkawaladalah(x,r)=(0,8).

    K Pk (Xk+1,Yk+1)oktan1(0,8)