Poligon Dan Kurva

download Poligon Dan Kurva

of 19

  • date post

    28-Feb-2018
  • Category

    Documents

  • view

    224
  • download

    0

Embed Size (px)

Transcript of Poligon Dan Kurva

  • 7/25/2019 Poligon Dan Kurva

    1/19

    GrafikaKomputerPertemuanKe-10

    BAB-9POLIGON

    dan

    KURVA

    Poligonadalahbentukyangdisusundariserangkiangaris.Kurva

    Bezier

    digunakan

    untuk

    membentuk

    garis

    lengkung

    menggunakanalgoritmaBiezer.

    By:IGustiNgurahSuryantara,S.Kom.,M.Kom

    9.1.PENDAHUUANPoligonadalahbentukyangdisusundariserangkaiangaris.Gam!ar9.1memperlihatkanbeberapabentukpoligon.Titiksudutdaripoligondisebutvertexsedangkangar

    ispenyusunpoligondisebutedge.

    Gam!ar9.1.Gambarsebuahpoligon.

    DariGam!ar9.1.dapatdisimpulkanbahwasebuahpoligonselalumempunyaidasar:1.Jumlahvertex.

    2.Koordinatvertex.

    3.Datalokasitiapvertex.

    11

  • 7/25/2019 Poligon Dan Kurva

    2/19

    GrafikaKomputerPertemuanKe-10

    Poligondigambardenganmenggambarkanmasing!masingedgedengansetiapedge

    merupakanpasangandarivertexi"vertexi#1ke$ualiuntukedgeterakhirmerupaka

    n

    pasangandarivertexn"vertex1.

    %perasi

    yang

    dapat

    dikenakan

    pada

    sebuah

    poligon

    antara

    lain:1.

    &enginisialisasi

    poligon.

    'nisialisasi

    terhadap

    poligon

    perlu

    dilakukan

    untu

    kmengaturagarfieldvertnumberisi(.

    2.&enyisipkanvertex.&enyimpanin)ormasitentangvertexdanmenyesuaikan

    in)ormasitentang*umlahvertexdenganmenambahkansatukevertnum.

    3.&enggambarpoligon.&engun*ungivertexsatupersatudanmenggambaredge

    dengankoordinat+vertexi.x,vertexi.y-"+vertexi#1.x"vertexi#1.y-darivertexnomorsatusampaivertnum!1.khususuntukedgeterakhirmempunyaikoordinat

    +vertexvertnum.x,vertexvertnum.y-"+vertex1.x"vertex1.y-..mewarnaipoligon.&engisiareayangdibatasiolehedgepoligondenganwarna

    tertentu.

    9.".

    MENGISI

    P#IG#N/dabeberapaalgoritmayangdapatdigunakanuntukmengisiareadidalamsebuahpoligon./lgoritmatersebutantaralain:

    1./lgoritmaFloodFill.

    2./lgoritmaScanLineFill.3.nside!"utside#est.

    .$lgoritmaBoundray!Fill.

    Pada

    materi

    ini

    akan

    dibahas

    0lood

    0ill

    dan

    oundray

    0ill.

    9.".1.A$goritmaFloodFill/lgoritmayangpalingmudahuntukmengisipoligonadalahalgoritmaFloodfill./lgoritma inibeker*adengan$arapemakaimenentukanwarnapoligonserta lokasi titik

    yangmen*adititikawaldankemudianalgoritmaakanmemeriksatitik!titiktetangga

    ,

    apabilawarnatitiktetanggatidaksamadenganwarnaisipoligonmakatitiktersebutakandiubahwarnanya,prosestersebutdilan*utkansampaiseluruhtitikyangberadadidalam

    poligonselesaidiproses.Penentuan titik tetanggadapatmenggunakanmetode!koneksi

    atau

    !koneksi

    seperti

    pada

    gam!ar

    9.".

    +a-.!Koneksi +b-.!Koneksi

  • 7/25/2019 Poligon Dan Kurva

    3/19

    Gam!ar9.".%!koneksidan&!koneksi

    11

    GrafikaKomputerPertemuanKe-10

    /lgoritma mengisi poligon menggunakan )lood )ill dengan koneksi yang

    diimplementasikan

    se$ara

    rekursi)

    diperlihatkan

    pada

    listing

    berikut.

    VoidFloodFill(intx,inty,intfillColor,intoldColor)

    {

    If(getPixel(x,y)==oldColor)

    {

    setColor(fillColor);

    setPixel(x,y);

    FloodFill(x+1,y,fillColor,oldColor);

    FloodFill(x-1,y,fillColor,oldColor);

    FloodFill(x,y+1,fillColor,oldColor);

    FloodFill(x,y-1,fillColor,oldColor);

    }

    }

    Ketepatanalgoritma)loo)0illditentukanolehtitikawaldanapakahpoligonya

    ng

    diwarnaimerupakanpoligontertutup./pabilatidaktertutup,meskipunhanyasatutitik

    yangterbukamakapengisianakanmelebarkeareadiluarpoligon.

    9.".".A$goritmaS%anin&'i$$

    Void

    BoundaryFill(

    int

    x,

    int

    y,

    int

    fill,

    int

    Boundray)

    {

    Int

    current

    Current=getPixel(x,y);

    If

    ((current

    !=Boundray)

    &&

    (current

    !=

    fill))

    {

    setColor(fill);

    setPixel(x,y);

    Boundray

    (x+1,y,fill,

    Boundray);

    Boundray

    (x-1,y,fill,

    Boundray);

    Boundray

    (x,y+1,fill,

    Boundray);

    Boundray(x,y-1,fill,Boundray);

    }

    }

  • 7/25/2019 Poligon Dan Kurva

    4/19

    11

    GrafikaKomputerPertemuanKe-10

    9.(.

    KU)*AKali

    ini

    kita

    akan

    mempela*ari

    bagaimana

    membuat

    kurva

    menggunakan

    algoritmae4ier./lgoritmamembuatkurvabe4ierdiusulkanolehseorangahlimesindariperan$is

    yangbeker*adiperusahaan5enaultdandigunakanuntukmeran$angbadanmobil.

    9.(.1.Kur+aB&i&rKitasudahmempela*aribagaimanamembentukgarislurus,sepertidenganmenggunakanalgoritmaDD/danalgoritmaresenham.Padabab inikitaakanmembahaspembuatan

    kurva.Pembuatankurvayangakandibahasdenganmenggunakanalgoritmayan

    g

    diusulkan

    oleh

    e4ier.Pierre

    e4ier

    seorang

    ahli

    mesin

    peran$is

    yang

    beker*

    a

    diperusahaanrenult.e4ierlahirpadatanggal16eptember171(danmeninggalpadatgl289ovmber1777.e4ie

    r

    memperolehgelardalambidangmekanikaldari'cole

    (ationaleSuperieured)Seniet*etierstahun173(.elar

    keduadibidangelektropadatahun1731di'coleSuperieured)'lectricite,dandoktorpadatahun17bidang

    matematik

    dari

    +niversitas

    Paris.

    'a

    beker*a

    untuk

    renult

    dari

    1733!178,di

    mana

    dia

    mengembangkan

    ;9'6;50

    ;6D

  • 7/25/2019 Poligon Dan Kurva

    5/19

    Dank0

    n

    xk

    Bk/n

    ,u-

    y,u- >ykBk/n,u-k0

    rumus

    !

    6alahsatukelemahankurvae4ieradalahkurvayangdihasilkantidakdapatse$araketatmengikutibentukdarititikkontrolsehinggadapatmerepotkanbilakitainginmembuat

    bentukkurvatertentukarenamembutuhkantitikkontrolyanglokasinyaber*auhan.

    A/IHAN=itung+x,y-koordinatkurvabe4ieryangmemiliki titikkontrolyaitup(+(,(-,p1+1,2-,p2++3,3-danp3+,(-.

    0AAB;ntukempatpointkontrol,n@3

    Aangkahpertamahitungseluruh)ungsiblending,knuntukk!(,...,nmenggunaka

    nrumus:

    n?k

    k?.+n!k-?

    3?

    (3+u-@!!!!!!!!u(+1!u-

    3@1.u

    (+1!u-

    3@213u4

    (

    (?.3?

    3?

    13+u-@!!!!!!!!u1+1!u-

    2@3.u

    1+1!u-

    2@(u.213u4

    "

    1?.2?

    3?

    kn+u-@

  • 7/25/2019 Poligon Dan Kurva

    6/19

    23+u-@!!!!!!!!u2+1!u-

    1@3.u

    2+1!u-

    1@(u

    "213u4

    2?.1?

    3?

    33+u-@!!!!!!!!u3+1!u-

    (@1.u

    3+1!u-

    (@u

    (

    3?.(?

    12(

    GrafikaKomputerPertemuanKe-10

    Kitadapatmelihatbahwa)ungsi!)ungsiinisangatsederhana.6emuanyainiidentikuntuksemuabelokanpadakurvabe4ierdenganptitikkontrol.6ekarangkitasiapunt

    uk

    menghitungpadapointmelengkung.Parameteruselalumengalamiperubahandari(

    sampaidengan1.u@(berkitandengantitikawallengkungan+titikkontrolpertama-Bu1

    berkaitan

    dengan

    titik

    akhir

    lengkungan

    +titik

    kontrol

    terakhir-.

    Kita

    hanya

    memutuskanpada*umlahlangkah!langkahanaranilai(samapi1,dandarinilaiuntukmenghitun

    gpeningkatanDu,

    yang1C+*umlahlangkah"1-.&akinbesar+banyak-*umlahlangkah!

    langkahyangdiker*akankurvamakinhalusakantetapisemakinlambatdalamproses

    perhitungan+menggambar-.

    Pada$ontohini*umlahlangkahyangharusdiker*akansebanyak,makadu@1C+!1-@

    1C8@(,2.(,2sebaginilaistepsyangbergerakdai(.(,(.2,(.sCd1.Denganlangkahbelokan

    +lengkung-

    akanmemiliki

    koordinat.Kordinat!kordinatyang

    dihasilkan

    akan

    digabungdengansegmengaris.

    &arikitamenghitungtitikkontrolberdasarkanalgoritmayangsederhanaini.

  • 7/25/2019 Poligon Dan Kurva

    7/19

    121

    GrafikaKomputerPertemuanKe-10

  • 7/25/2019 Poligon Dan Kurva

    8/19

    122

    GrafikaKomputerPertemuanKe-10

    Mo5u$Untu6Kur+aB&i&rD&ngan*BPublic

    Type

    POINTAPIX

    As

    Long

    YAsLong

    EndType

    PublicDeclareFunctionPolyBezierLib"gdi32"(ByValhdcAsLong,lppt

    As

    POINTAPI,

    ByVal

    cPoints

    As

    Long)

    As

    Long

    Public

    P(0

    To

    3)

    As

    POINTAPI

    'draws

    a

    single

    Bezier

    curve

    segment

    with

    4

    control

    points

    FunctionDrawBezierCurve(CanvasAsPictureBox,P()AsPOINTAPI,Steps

    AsInteger)

    Dim

    i

    As

    Integer

    Dim

    j

    As

    Integer

  • 7/25/2019 Poligon Dan Kurva

    9/19

    DimuAsSingle

    Dim

    B(0

    To

    3)

    As

    Single

    Dim

    Q()

    As

    POINTAPI

    'calculateBeziercurve'Steps=Form1.SlidNilaiU.Value

    ReDimQ(0ToSteps)

    Fori=0ToSteps

    u

    =

    i

    /

    Steps

    'Bernstein

    cubic

    polynomials

    123

    GrafikaKomputerPertemuanKe-10

    B(0)

    =

    (1

    -

    u)

    ^

    3

    B(1)=3*u*(1-u)^2

    B(2)

    =

    3

    *

    u

    ^

    2

    *

    (1

    -

    u)

    B(3)

    =

    u

    ^

    3

    For

    j

    =

    0

    To

    3

    Q(i).X

    =

    Q(i).X

    +

    P(j).X

    *

    B(j)Q(i).Y

    =

    Q(i).Y

    +

    P(j).Y

    *

    B(j)

    Next

    j

    Form1.ListView2.ListItems.Add

    ,

    ,

    Format(u,

    "0.##")

    Form1.ListView2.ListItems(Form1.ListView2.ListItems.Count).SubItems(1)=

    Q(i).X

    Form1.ListView2.ListItems(Form1.ListView2.ListItems.Count).SubItems(2)=Q(i).Y

    Next

    i

    'draw

    Bezier

    curveCanvas.CurrentX

    =

    Q(0).X

    Canvas.CurrentY=Q(0).Y

    Fori=0ToSteps

    Canvas.Line(Canvas.CurrentX,Canvas.CurrentY)-(Q(i).X,Q(i).Y)