Enter your email address:

Delivered by

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

kelompok 2 Program 2 dimensi

Label:

Transformasi dua dimensi
Dasar Teori

Viewport
Objek yang akan digambar pada layar biasanya memiliki ukuran yang jauh lebih besar dibanding ukuran layar, sehingga perlu dilakukan pemetaan/transformasi yang memungkinkan objek tersebut bisa digambar pada layar. Meskipun demikian, objek seringkali terlalu rumit untuk ditampilkan pada layar dengan koordinat yang sangat terbatas. Sehingga biasanya kita memilih bagian tertentu dari objek untuk ditampilkan pada layar. Didalam memilih objek yang akan ditampilkan biasanya dibatasi oleh sebuah kotak yang disebut dengan jendela (window).
Dalam praktek kita bisa menggunakan seluruh atau sebagian lebar layar untuk menmpilkan objek yang berada pada sebuah jendela. Daerah layar yang dipilih untuk menampilkan objek yang dimaksud disebut viewport. Dalam keadaan normal, viewport akan meliputi seluruh layar lebar. Meskipun demikian, kita bisa memilih bagian tertentu dari layar untuk dijadikan sebuah viewport.
Transformasi
Sejumlah objek seringkali mempunyai sifat simetri. Sehingga untuk menggambar seluruh objek, cukup dilaksanakan dengan melakukan manipulasi terhadap objek yang sudah ada, misalnya dengan pencerminan, pergeseran, atau pemutaran objek yang sudah digambar terlebih dahulu.
Kita akan mempelajari cara mentransformasikan objek grafis khususnya objek grafis 2D sebagai salah satu cara untuk memanipulasi objek grafis dan sistem koordinat yang dipakai dengan cara yang lebih terorganisir dan efisien. Salah satu contoh penting untuk diketahui adalah pemakaian transformasi jendela ke viewport.
Ada dua cara untuk melakukan transformasi, yaitu transformasi objek dan transformasi kordinat. Pada transformasi objek semua titik pada sembarang objek akan dirubah sesuai dengan aturan tertentu sementara kordinatnya tetap. Pada transformasi sistem koordinat, objek tetap tetapi karena sistem koordinatnya diganti maka kedudukan objek harus disesuaikan dengan kedudukan sistem kordinat yangbaru.
Jenis-jenis transformasi
1. Translasi
Sembarang titik pada bidang xy bisa digeser ke sembarang tempat dengan menambahkan besaran pada absis x dan ordinat y. Translasi adalah transformasi dengan bentuk tetap memindahkan objek apa adanya. Dengan menggunakan persamaan Q = PM + tr, maka hasil pergeseran bisa dinyatakan sbb:
(Qx, Qy) = (Px +trx, Py+try)
dimana trx adalah vektor translasi menurut sumbu x sedang try adalah vektor translasi menurut sumbu y, dan matrik M bisa dikatakan sebagai matrix identitas.
Sembarang objek bisa digeser ke posisinya yang baru dengan mengoperasikan persamaan diatas pada setiap titik dari objek tersebut. Hal ini karena setiap garis dari objek tersebut terdiri dari titik-titik yang jumlahnya tak terbatas, maka proses penggeseran bisa berlangsung sangat lama. Tetapi pada kenyataannya kita cukup menggeser dua titik ujungnya saja dan kemudian menggandeng dua titik tersebut untuk membentuk garis hasil pergeseran.
Contoh translasi:
Untuk menggambarkan translasi objek yang berupa garis dengan koordinat A(10,10), B(30,10) dengan vektor translasi (10,20)

Titik A Qx=Px +trx =10 + 10 =20
Qy=Py + try =10+20=30
Hasil translasi A = (20, 30)
Titik B Qx=Px + trx = 30+10 = 40
Qy=Py + try = 10+20 =30
Hasil translasi B = (40, 30)

2. Rotasi
Kita bisa memutar objek searah dengan arah perputaran jarum jam(dinyatakan dengan sudut negatif) atau berlawanan arah dengan arah jarum jam(dinyatakan sebagai sudut positif).
Dengan menganggap bahwa besarnya sudut putar adalah sama dengan , maka posisi sebuah titik yang baru adalah:
Qx = Pxcos( ) - Pysin( )
Qy = Pxsin( ) + Pycos( )
Dengan menggunakan notasi matrix, maka besaran M bisa dikatakan sbb:
M = cos(0) sin(0)
-sin(0) cos(0)

3. Skala
Penskalaan adalah proses untuk memperbesar atau memperkecil suatu gambar. Dengan faktor absolut yang lebih besar dari 1, akan diperoleh gambar yang lebih besar dan semakin menjauh dari titik(0,0). Sebaliknya dengan faktor skala yang mempunyai nilai absolut lebih kecill dari 1, akan diperoleh gambar yang lebih kecil dan mendekat ke titik (0,0).
Dengan menggunakan persamaan Q=PM+tr, maka hasil penggeseran bisa dinyatakan sebagai:
(Qx, Qy)=(SxPx, SyPy)
Dengan Sx adalah faktor skala ke arah mendatar dan Sy adalah faktor skala arah tegak dan ofset vektor tr bernilainol. Dengan menggunakan notasi matrix, maka matrixM bisa dinyatakan sbb:
M= (sx 0)
(0 sy)

Download Artikel Lengkap (pdf)





unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls,Math;

const
MAX_VERTEX = 3;
type
TPointFloat = record
x,y:real;
end;

TMainFrm = class(TForm)
Panel1: TPanel;
GroupBox3: TGroupBox;
Label7: TLabel;
Label9: TLabel;
Label10: TLabel;
EDeg: TEdit;
RotasiBtn: TButton;
ECRX: TEdit;
ECRY: TEdit;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
ETrx: TEdit;
ETry: TEdit;
TranslasiBtn: TButton;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure TranslasiBtnClick(Sender: TObject);
procedure PenskalaanBtnClick(Sender: TObject);
procedure RotasiBtnClick(Sender: TObject);
private
{ Private declarations }
Segitiga:array[1..MAX_VERTEX] of TPointFloat;
xcenter,ycenter:integer;
procedure GambarSegitiga;
procedure IsiSegitiga;
procedure Translasi(px,py,tr_x,tr_y:real;var qx,qy:real);
procedure Skala(px,py,sx,sy:real;var qx,qy:real);
procedure Rotasi(px,py,deg:real;var qx,qy:real);
public
{ Public declarations }
end;

var
MainFrm: TMainFrm;

implementation

{$R *.DFM}
procedure TMainFrm.IsiSegitiga;
begin
segitiga[1].x:= 100;
segitiga[1].y:= -100;
segitiga[2].x:= 300;
segitiga[2].y:= -100;
segitiga[3].x:= 300;
segitiga[3].y:= 150;
end;

procedure TMainFrm.Translasi(px,py,tr_x,tr_y:real;var qx,qy:real);
begin
qx:=px+tr_x;
qy:=py+tr_y;
end;

procedure TMainFrm.Skala(px,py,sx,sy:real;var qx,qy:real);
begin
qx:=px*sx;
qy:=py*sy;
end;

procedure TMainFrm.Rotasi(px,py,deg:real;var qx,qy:real);
var
radian:real;
cosdeg,sindeg:real;
begin
radian:=degtorad(deg) ; //deg * Pi / 180;
cosdeg:=cos(radian);
sindeg:=sin(radian);
qx:=px * cosdeg - py * sindeg;
qy:=py * cosdeg + px * sindeg;
end;

procedure TMainFrm.GambarSegitiga;
var
index:integer;
x,y:real;
begin
Canvas.Rectangle(0,Panel1.Height,Width,Height);
Canvas.Pen.Style:=psSolid;
for index:=1 to MAX_VERTEX+1 do
begin
if index = MAX_VERTEX+1 then
begin
x:=xcenter+Segitiga[1].x;
y:=ycenter-Segitiga[1].y;
end
else
begin
x:=xcenter+Segitiga[index].x;
y:=ycenter-Segitiga[index].y;
end;
if index = 1 then
Canvas.MoveTo(round(x),round(y))
else
Canvas.LineTo(round(x),round(y));
end;
Canvas.Pen.Style:=psDot;
Canvas.MoveTo(xcenter,0);
Canvas.LineTo(xcenter,Height);
Canvas.MoveTo(0,ycenter);
Canvas.LineTo(Width,ycenter);
end;

procedure TMainFrm.FormCreate(Sender: TObject);
begin
xcenter:=Width div 2;
ycenter:=Panel1.Height+((Height-Panel1.Height) div 2);

IsiSegitiga;
GambarSegitiga;
end;

procedure TMainFrm.FormPaint(Sender: TObject);
begin
GambarSegitiga;
end;

procedure TMainFrm.FormResize(Sender: TObject);
begin
xcenter:=Width div 2;
ycenter:=Panel1.Height+((Height-Panel1.Height) div 2);
GambarSegitiga;
end;

procedure TMainFrm.TranslasiBtnClick(Sender: TObject);
var
px,py:real;
tr_x,tr_y:integer;
index:integer;
qx,qy:real;
begin
//ambil nilai trx,try
tr_x:=StrToInt(ETrx.Text);
tr_y:=StrToInt(ETry.Text);
for index:=1 to 3 do
begin
//ambil lokasi titik
px:=Segitiga[index].x;
py:=Segitiga[index].y;
//translasikan
Translasi(px,py,tr_x,tr_y,qx,qy);
//simpan kembali
Segitiga[index].x:=qx;
Segitiga[index].y:=qy;
end;
GambarSegitiga;
end;

procedure TMainFrm.PenskalaanBtnClick(Sender: TObject);

begin

end;

procedure TMainFrm.RotasiBtnClick(Sender: TObject);
var
px,py,xt,yt:real;
qx,qy,deg:real;
index:integer;
begin
//ambil sx,sy
deg:=StrToFloat(EDeg.Text);
//ambil pusat transformasi
xt:=StrToFloat(ECRx.Text);
yt:=StrToFloat(ECRy.Text);
for index:=1 to MAX_VERTEX do
begin
//ambil lokasi
px:=Segitiga[index].x;
py:=Segitiga[index].y;
if (xt <> 0 ) and (yt <> 0 ) then
begin
//translasi -trx,-try
Translasi(px,py,-xt,-yt,qx,qy);
end
else
begin
qx:=px;
qy:=py;
end;
//skalakan sx,sy
Rotasi(qx,qy,deg,qx,qy);
if (xt <> 0 ) and (yt <> 0 ) then
begin
//translasi trx,try
Translasi(qx,qy,xt,yt,qx,qy);
end;
//simpan
Segitiga[index].x:=qx;
Segitiga[index].y:=qy;
end;
//gambar ulang
GambarSegitiga;
end;

end.


Download Program 2 Dimensi




0 komentar:

Posting Komentar


ShoutMix chat widget