Enter your email address:

Delivered by

Uploud File di Ziddu dan dapat uang broo
Uploud File di Deposit Files

Kelompok 3 Lingkaran Bresenham

Label: , ,

============================================
= 1. MOKHAMAD IRWAN ALIFI (076403020009)
= 2. SLAMET WAHYU UTOMO (076403020005)
= 3. IRWANTO (070403020031)
= 4. M. NURIL ANWAR (070403020013)
= 5. M. RIDHO SANTOSO (070403020020)
= 6. MIEISA PALUPI (086403020002)
= 7. DWI SUGI P. (076403020006)
= 8. ARIF ARDIASYAH (070403020016)
============================================


LINGKARAN BRESENHAM


Algoritma lingkaran bresenham memerlukan menggambar pada octant yang pertama saja sedangkan titik-titik pada kuadran lain dapat diperoleh pada pencerminan titik-titik pada oktan pertama.

Pembuatan suatu lingkaran merupakan salah satu primitive yang berperan dalam grafika komputer. Prinsip yang dipakai pada penelitian ini dalam pembuatan lingkaran adalah menterjemahkan dari bahasa matematika ke dalam bahasa pemrograman untuk metode Bezier dan algoritma Bresenham. Untuk program-program terapan sederhana, lingkaran yang diperoleh dari bentuk dasar kurva cukup memadai, tetapi seringkali diinginginkan bentuk lingkaran yang jauh lebih rumit dan tidak teratur. Bentuk fungsi matematis yang paling utama untuk menggambar kurva sebagai dasar pembuatan bentuk lingkaran adalah fungsi parametrik atau vector-valued function yaitu untuk sembarang titik pada suatu permukaan, lokasinya ditentukan oleh dua buah parameter u dan v biasanya bernilai antara 0 dan 1, dan fungsi parametrik x,y, dan z merupakan lokasi-lokasi titik pada kurva atau permukaan. Algoritma de Casteljau [2] merupakan algoritma untuk membuat kurva menggunakan sejumlah titik kontrol, dan menggunakan teknik in-betweening untuk mendapatkan kurva yang diinginkan. Algoritma ini dikembangkan oleh P. de Casteljau, dan merupakan cikal bakal kurva Bezier, yang secara terpisah dikembangkan lebih lanjut oleh P. Bezier. Algoritma de Casteljau untuk membuat kurva Bezier cukup ampuh secara algoritmik, tetapi tidak secara eksplisit menyatakan bentuk fungsionalnya. Karena alasan ini, kemudian dikembangkan persamaan lain untuk membuat kurva Bezier, yang sangat berguna untuk tujuan analisis.

Algoritma Bresenham dipilih karena merupakan metode dasar grafis yang sangat populer dan terkenal efisiensinya, Bresenham memakai dasar integer arithmetic yang jauh lebih cepat daripada floating-point arithmetic yang biasa dipakai dan menggunakan suatu persamaan matematis untuk mengetahui adanya baris atau kolom baru yang akan dibuat dalam proses pembuatan suatu garis. Tetapi Bresenham juga memiliki kekurangan yaitu timbulnya error jika dua segmen garis yang overlap dibuat, error juga akan timbul jika sebuah segmen garis yang intensitasnya berbeda overlap terhadap suatu segment garis yang sudah ada.

Algoritma Bresenham menggunakan aritmatika integer yang tidak memerlukan perkalian dan pembagian dalam proses perhitungannya didalam seluruh implementasi, yang mana aritmatika integer ini memiliki kecepatan perhitungan yang lebih tinggi daripada aritmatika floating point. Algoritma Bresenham memberikan persamaan umum untuk lingkaran sebagai berikut:

(X – a)2 + (Y – b)2 = R2

Dengan (Xa,Ya) sebagai koordinat awal dan (Zt,Yt) sebagai koordinator akhir. Persamaan umum lingkaran yang diberikan oleh Algoritma Bresenham di atas diturunkan dari persamaan umum lingkaran :

X2 + Y2 = R2

Keterangan:

X = absis ³ 0

Y = ordinat ³ 0

R = bilangan integer ³ 1.

Pada algoritma pembuatan lingkaran dengan arah penggambaran searah jarum arah jarum jam untuk lintasan yang besarnya seperempat lingkaran atau 90˚ memiliki tiga titik perhitungan yaitu m1, m2, dan m3.


Gambar 6. Flowchart Procedure

Bresenham

Fungsi procedure dibawah ini sebagai algoritma utama Bresenham untuk menggambar lingkaran.

begin

x:=0;

y:=100;

xCenter:=150;

yCenter:=150;

plotpoints;

p:=1-y;

while x <>

begin

if p<0>

x:=x+1

else

begin

x:=x+1;

y:=y-1;

end;

if p<0>

p:=p+2*x+1;

else

p:=p+2*(x-y)+1;

plotpoints

end;

end;



Menggambar sebuah lingkaran dengan menggunakan delphi7


Tampilan





unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Panel1: TPanel;

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

CheckBox1: TCheckBox;

procedure Button1Click(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

private

{ Private declarations }

findrawing:boolean;

fjari,xcenter, ycenter:integer;

procedure GambarLingkaran(r:integer);

procedure GambarTitik(xi, yi:integer);

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.GambarTitik(xi,yi:integer);

var

x,y:Integer;

begin

x:=xcenter+xi;

y:=ycenter-yi;

canvas.pixels[x,y]:=clBlack;

//Deklarasi untuk view all

if checkbox1.checked then

begin

x:=xcenter-xi;

y:=ycenter-yi;

canvas.pixels[x,y]:=clBlack;

x:=xcenter-xi;

y:=ycenter+yi;

canvas.pixels[x,y]:=clBlack;

x:=xcenter+xi;

y:=ycenter+yi;

canvas.pixels[x,y]:=clBlack;

end;

end;

procedure TForm1.GambarLingkaran(r:integer);

var

d1, d2:Real;

xi, yi:integer;

mh, md, mv:integer;

begin

xi:=0;

yi:=R;

while yi > 0 do

begin

GambarTitik(xi, yi);

md:=abs(sqr(xi+1)+sqr(yi-1)-sqr(r));

mh:=abs(sqr(xi+1)+sqr(yi)-sqr(r));

mv:=abs(sqr(xi)+sqr(yi-1)-sqr(r));

d1:=sqr(xi+1)+sqr(yi-1)-sqr(r);

if d1<0>

begin

d2:=mh-md;

if d2<=0 then

begin

xi:=xi+1;

yi:=yi;

end

else

begin

xi:=xi+1;

yi:=yi-1;

end;

end

else if d1>0 then

begin

d2:=mv-md;

if d2<=0 then

begin

xi:=xi;

yi:=yi-1;

end

else

begin

xi:=xi+1;

yi:=yi-1;

end;

end

else if d1=0 then

begin

xi:=xi+1;

yi:=yi-1;

end;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

TRY

Canvas.FillRect(Rect(0, Panel1.Height,Width,Height));

xcenter:=width div 2;

ycenter:=height div 2;

GambarLingkaran(strtoint(edit1.Text));

EXCEPT

ShowMessage('ISI!');

end;

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

xcenter:=x;

ycenter:=y;

findrawing:=true;

CheckBox1.Checked:=true;

//tentukan jari2 pertama sama dengan 10

fjari:=10;

//gunakan modus pen pmnotxor

Canvas.Pen.Mode:=pmNotXor;

//gambar lingkaran pertama

GambarLingkaran(fjari);

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

var

dx,dy:integer;

begin

if findrawing then

begin

//hapus lingkaran sebelumnya

GambarLingkaran(fjari);

//hitung jari2 yang baru

dx:=abs(xcenter-x);

dy:=abs(ycenter-y);

if dx>dy then fjari:=dx else fjari:=dy;

//gambar lingkaran yang baru

GambarLingkaran(fjari);

end;

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

dx,dy:integer;

begin

//hapus lingkaran sebelumnya

GambarLingkaran(fjari);

//selesai menggambar

findrawing:=false;

//ubah modus ke pmcopy

Canvas.Pen.Mode:=pmCopy;

//hitung jari2 yang baru

dx:=abs(xcenter-x);

dy:=abs(ycenter-y);

if dx>dy then fjari:=dx else fjari:=dy;

//gambar lingkaran terakhir

GambarLingkaran(fjari);

end;

end.


Download Sample Program
Download Program Source




0 komentar:

Posting Komentar


ShoutMix chat widget