• Tidak ada hasil yang ditemukan

Bab II Konversi Scan

N/A
N/A
Protected

Academic year: 2017

Membagikan "Bab II Konversi Scan"

Copied!
51
0
0

Teks penuh

(1)
(2)

Bahasa pemrograman telah memberikan fungsi untuk menggambar: garis, lingkaran, ellips, persegi pajang atau polygon.

Tetapi fungsi tersebut hanya mengandung satu warna saja, sehingga tampilannya tidak menarik.

Bahasa pemrograman tidak membentuk fungsi untuk menggambar grafik garis atau kurva persamaan atau relasi matematika lainnya seperti parabola, hiperbola, sinus dan lainnya.

Akan dibahas cara membuat grafik dengan menggunakan pixel dan variasi warna.

Garis atau kurva dapat dibentuk dari sederetan pixel yang disambung secara kontinyu.

Sehingga pixel dapat dikatakan sebagai penyusun garis atau kurva.

(3)

Menggambar Garis

Untuk menggambar garis dikenal ada 3 metode yaitu: - metode DDA (Digital Defferensial Analizer),

- metode Polinom dan

- metode Bresenham.

DDA dan Polinom menggunakan perhitungan dengan bilangan real, Bresenham menggunakan perhitungan dengan bilangan integer.

Menggambar Garis

Untuk menggambar garis dikenal ada 3 metode yaitu: - metode DDA (Digital Defferensial Analizer),

- metode Polinom dan

- metode Bresenham.

DDA dan Polinom menggunakan perhitungan dengan bilangan real, Bresenham menggunakan perhitungan dengan bilangan integer.

(4)

1.1 Metode DDA

Menggunakan prinsip menggambar garis yang melalui 2 titik dengan mengikuti persamaan:

Y – Y1 = (Y2-Y1)/(X2-X1). (X – X1)

Acuan grafik adalah koordinat kartesius tangan kanan dengan titik awal tengah monitor.

Penggambaran oleh komputer harus dikonversikan ke koordinat kartesius tangan kanan.

1.1 Metode DDA

Menggunakan prinsip menggambar garis yang melalui 2 titik dengan mengikuti persamaan:

Y – Y1 = (Y2-Y1)/(X2-X1). (X – X1)

Acuan grafik adalah koordinat kartesius tangan kanan dengan titik awal tengah monitor.

Penggambaran oleh komputer harus dikonversikan ke koordinat kartesius tangan kanan.

(5)

Procedure GarisDDA; Begin

{x0, y0 adalah titik awal sumbu koordinat human, ambil tengah2 monitor (x1, y1), ( x2, y2) adalah titik ujung garis yang diinputkan melalui edit}

x1 := StrToInt(editx1.Text); x2 := StrToInt(editx2.Text);

y1 := StrToInt(edity1.Text); y2 := StrToInt(edity2.Text);

delta := abs(x2 – x1);

if abs(y2-y1) > delta then delta := abs(y2-y1);

xNaik := (x2 – x1)/delta; yNaik := (y2 - y1)/ delta;

x := x1; y := y1;

For k := 1 to delta do Begin

Canvas.Pixels[trunc(x0 + x), trunc(y0 – y)] := warna; x := x + xNaik;

y := y + yNaik; End;

End;

Procedure GarisDDA; Begin

{x0, y0 adalah titik awal sumbu koordinat human, ambil tengah2 monitor (x1, y1), ( x2, y2) adalah titik ujung garis yang diinputkan melalui edit}

x1 := StrToInt(editx1.Text); x2 := StrToInt(editx2.Text);

y1 := StrToInt(edity1.Text); y2 := StrToInt(edity2.Text);

delta := abs(x2 – x1);

if abs(y2-y1) > delta then delta := abs(y2-y1);

xNaik := (x2 – x1)/delta; yNaik := (y2 - y1)/ delta;

x := x1; y := y1;

For k := 1 to delta do Begin

Canvas.Pixels[trunc(x0 + x), trunc(y0 – y)] := warna; x := x + xNaik;

y := y + yNaik; End;

End;

(6)

1.2 Metode Bresenham

Metode ini hanya menggunakan bilangan integer saja, sehingga penggunaan memori lebih sedikit.

Dasar Bresenham adalah menggambar garis dengan slope positip ≤ 1. Untuk garis dengan slope selain itu harus dilakukan transformasi nilai. Hasilnya ditransformasikan balik dan kemudian baru digambarkan.

Nilai x2 harus selalu lebih besar dari nilai x1. Nilai x dan y berubah dengan nilai 1 atau nol.

Perubahan ini berdasarkan pada nilai faktor Bresenham (e) dengan nilai awal:

e = 2 * DeltaY – DeltaX

1.2 Metode Bresenham

Metode ini hanya menggunakan bilangan integer saja, sehingga penggunaan memori lebih sedikit.

Dasar Bresenham adalah menggambar garis dengan slope positip ≤ 1. Untuk garis dengan slope selain itu harus dilakukan transformasi nilai. Hasilnya ditransformasikan balik dan kemudian baru digambarkan.

Nilai x2 harus selalu lebih besar dari nilai x1. Nilai x dan y berubah dengan nilai 1 atau nol.

Perubahan ini berdasarkan pada nilai faktor Bresenham (e) dengan nilai awal:

e = 2 * DeltaY – DeltaX

Jika e > 0 maka y naik 1 dan e = e + 2 * (DeltaY – DeltaX). Jika e <= 0 maka y tetap dan e = e + 2 * DeltaY

(7)

Procedure GarisBresenham; Begin

{(x1, y1), ( x2, y2) adalah koordinat titik ujung garis komponen edit}

x1 := StrToInt(editx1.Text); x2 := StrToInt(editx2.Text); y1 := StrToInt(edity1.Text); y2 := StrToInt(edity2.Text);

//Konversi ke Bresenham Dasar

if x2 < x1 then begin tukar(x1,x2); tukar (y1,y2); end;

DeltaX := x2 – x1; DeltaY := y2 – y1; e := 2* DeltaY – DeltaX;

x := x1; y := y1;

For k := 1 to DeltaX do Begin

Canvas.Pixels[x0 + x, y0 – y] := clWarna; If e > 0 then

Begin

y := y + 1;

e := e + 2 * (DeltaY – DeltaX); End

Else e := e + 2 * DeltaY; x := x + 1;

End; End;

Procedure GarisBresenham; Begin

{(x1, y1), ( x2, y2) adalah koordinat titik ujung garis komponen edit}

x1 := StrToInt(editx1.Text); x2 := StrToInt(editx2.Text); y1 := StrToInt(edity1.Text); y2 := StrToInt(edity2.Text);

//Konversi ke Bresenham Dasar

if x2 < x1 then begin tukar(x1,x2); tukar (y1,y2); end;

DeltaX := x2 – x1; DeltaY := y2 – y1; e := 2* DeltaY – DeltaX;

x := x1; y := y1;

For k := 1 to DeltaX do Begin

Canvas.Pixels[x0 + x, y0 – y] := clWarna; If e > 0 then

Begin

y := y + 1;

e := e + 2 * (DeltaY – DeltaX); End

Else e := e + 2 * DeltaY; x := x + 1;

End; End;

(8)

1.3 Metode Polinom

Metode ini menggunakan persamaan y = a x + b,

a adalah slope garis dan

b adalah titik potong garis dengan sumbu y.

Menggambar garis dengan metode ini cukup diketahui

nilai a, b,

nilai x awal dan nilai x akhir,

dimana x awal < x akhir.

1.3 Metode Polinom

Metode ini menggunakan persamaan y = a x + b,

a adalah slope garis dan

b adalah titik potong garis dengan sumbu y.

Menggambar garis dengan metode ini cukup diketahui

nilai a, b,

nilai x awal dan nilai x akhir,

dimana x awal < x akhir.

Jika XAwal > XAkhir maka lakukan pertukaran.

Caranya:

Temp := XAwal;

XAwal := XAkhir;

(9)

Procedure GarisPolinom;

Var

x, temp : integer;

Begin

//a dan b adalah besaran tetap,

//Xawal dan Xakhir koordinat-x ujung garis diinputkan melalui edit

if xAkhir < xAwal then

begin

Temp := XAwal; XAwal := XAkhir; XAkhir := Temp; end;

for x := xawal to xakhir do Begin

y := a * x + b;

Canvas.Pixels[x0 + x, y0 –Round( y)] := clWarna; End;

End;

Procedure GarisPolinom;

Var

x, temp : integer;

Begin

//a dan b adalah besaran tetap,

//Xawal dan Xakhir koordinat-x ujung garis diinputkan melalui edit

if xAkhir < xAwal then

begin

Temp := XAwal; XAwal := XAkhir; XAkhir := Temp; end;

for x := xawal to xakhir do Begin

y := a * x + b;

Canvas.Pixels[x0 + x, y0 –Round( y)] := clWarna; End;

(10)

2. Menggambar Lingkaran

Menggambar lingkaran dengan pixel dapat menghasilkan lingkaran 8 warna, 4 warna,

2 warna atau 1 warna.

Lingkaran mempunyai 8 simitris putar,

lingkaran dapat dibagi menjadi 8 bagian yang simetris sama

bagian tersebut dapat diputar sehingga membentuk lingkaran penuh. Sehingga untuk menggambar lingkaran cukup menscan 1/8 bagian saja, sedangkan bagian lainnya dicopikan dari bagian tersebut.

Keuntungan cara ini adalah kita dapat memilih warna yang berbeda dari tiap bagian tersebut.

2. Menggambar Lingkaran

Menggambar lingkaran dengan pixel dapat menghasilkan lingkaran 8 warna, 4 warna,

2 warna atau 1 warna.

Lingkaran mempunyai 8 simitris putar,

lingkaran dapat dibagi menjadi 8 bagian yang simetris sama

bagian tersebut dapat diputar sehingga membentuk lingkaran penuh. Sehingga untuk menggambar lingkaran cukup menscan 1/8 bagian saja, sedangkan bagian lainnya dicopikan dari bagian tersebut.

Keuntungan cara ini adalah kita dapat memilih warna yang berbeda dari tiap bagian tersebut.

Ada 2 metode:

(11)

2.1 Metode Polinom

Acuan : Koordinat Human.

a. Lingkaran Dengan Pusat (0,0) dan Radius r.

Persamaannya:

x

2

+ y

2

= r

2

.

Persamaan diatas dapat diubah dalam bentuk eksplisit:

y = √(r

2

- x

2

)

Atau dalam bentuk bahasa pemrograman:

y := sqrt(sqr(r) – sqr(x))

2.1 Metode Polinom

Acuan : Koordinat Human.

a. Lingkaran Dengan Pusat (0,0) dan Radius r.

Persamaannya:

x

2

+ y

2

= r

2

.

Persamaan diatas dapat diubah dalam bentuk eksplisit:

y = √(r

2

- x

2

)

Atau dalam bentuk bahasa pemrograman:

y := sqrt(sqr(r) – sqr(x))

(12)

Titik (x,y) dicopykan maka akan didapatkan 7 titik pada

bagian simetris lainnya:

(x,-y), (-x,y), (-x,-y), (y, x), (y,-x), (-y, x) dan (-y,-x).

Dengan demikian sekali scan kita mendapatkan 8 titik

yang dapat diberi warna berbeda.

Batas scan dapat dipilih:

dari x = 0 sampai x = r * cos 45 atau x = 0.707 * r.

(y, x) (-x, y)

(x, -y) (y, -x)

(-y, -x)

(-x, -y)

(-y, x) (x, y)

(0,0)

Titik (x,y) dicopykan maka akan didapatkan 7 titik pada

bagian simetris lainnya:

(x,-y), (-x,y), (-x,-y), (y, x), (y,-x), (-y, x) dan (-y,-x).

Dengan demikian sekali scan kita mendapatkan 8 titik

yang dapat diberi warna berbeda.

Batas scan dapat dipilih:

(13)

Agar diperoleh grafik yang halus dan kontinyu,

maka kenaikkan nilai x harus lebih kecil dari 1,

misalnya 0,5 atau lebih kecil lagi.

Kenaikkan x yang besar menyebabkan gambar

lingkaran berlubang-lubang.

Perintah

for to do tidak cocok untuk lingkaran !!!!!!

Dapat menggunakan perintah:

repeat – until

atau

while –do

.

Agar diperoleh grafik yang halus dan kontinyu,

maka kenaikkan nilai x harus lebih kecil dari 1,

misalnya 0,5 atau lebih kecil lagi.

Kenaikkan x yang besar menyebabkan gambar

lingkaran berlubang-lubang.

Perintah

for to do tidak cocok untuk lingkaran !!!!!!

Dapat menggunakan perintah:

repeat – until

atau

while –do

.

(14)

procedure LingkPolinomPusat00Warna8;

begin

r := StrToInt(eR.Text); x := 0;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +x), trunc(y0-y)] := clRed; Canvas.Pixels[trunc(x0 +x), trunc(y0+y)] := clBlue; Canvas.Pixels[trunc(x0 -x), trunc(y0-y)] := clPurple; Canvas.Pixels[trunc(x0 -x), trunc(y0+y)] := clNavy; Canvas.Pixels[trunc(x0 +y), trunc(y0-x)] := clBlack; Canvas.Pixels[trunc(x0 +y), trunc(y0+x)] := clGreen; Canvas.Pixels[trunc(x0 -y), trunc(y0-x)] := clYellow; Canvas.Pixels[trunc(x0 -y), trunc(y0+x)] := clTeal; x := x + 0.5;

Until x > = 0.707 * r; end;

(0,0)

(y, x) (x, y)

(x, -y) (-x, y)

(y, -x)

(-y, -x) (-y, x)

(-x, -y)

procedure LingkPolinomPusat00Warna8;

begin

r := StrToInt(eR.Text); x := 0;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +x), trunc(y0-y)] := clRed; Canvas.Pixels[trunc(x0 +x), trunc(y0+y)] := clBlue; Canvas.Pixels[trunc(x0 -x), trunc(y0-y)] := clPurple; Canvas.Pixels[trunc(x0 -x), trunc(y0+y)] := clNavy; Canvas.Pixels[trunc(x0 +y), trunc(y0-x)] := clBlack; Canvas.Pixels[trunc(x0 +y), trunc(y0+x)] := clGreen; Canvas.Pixels[trunc(x0 -y), trunc(y0-x)] := clYellow; Canvas.Pixels[trunc(x0 -y), trunc(y0+x)] := clTeal; x := x + 0.5;

Until x > = 0.707 * r;

end; Program

(15)

b. Lingkaran Dengan Pusat (a,b) dan Radius r

Persamaannya: (x – a)2 + (y – b)2 = r2

Persamaan ini diperoleh dengan menggeser titik pusat (0,0) ke (a,b) dan titik-titik lainnya berubah seperti tampak pada gambar berikut ini.

(-x+a, y+b)

(x+a, y+b)

(y+a, x+b)

(x+a, -y+b) (y+a, -x+b)

(-y+a, -x+b)

(-x+a, -y+b)

(-y+a, x+b) (a,b)

(16)

procedure LingkPolinomPusatABWarna8; begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); x := 0;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(y+b))] := clPurple; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(-y+b))] := clNavy; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(-x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(x+b))] := clYellow; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(-x+b))] := clTeal; x := x + 0.5;

Until x >= 0.707 * r; end;

(a,b)

(x+a, y+b) (-x+a, y+b)

(y+a, -x+b) (y+a, x+b)

(-y+a, -x+b)

(-y+a, x+b)

(-x+a, -y+b) (x+a, -y+b)

procedure LingkPolinomPusatABWarna8; begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); x := 0;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(y+b))] := clPurple; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(-y+b))] := clNavy; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(-x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(x+b))] := clYellow; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(-x+b))] := clTeal; x := x + 0.5;

Until x >= 0.707 * r; end;

Program

(17)

Menggambarkan lingkaran 4 warna

Mengatur warna yang berdekatan dibuat sama. Pemilihan warna bebas.

procedure LingkPolinomPusatABWarna4); begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); x := 0;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(-y+b))] := clRed; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(-x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(-x+b))] := clBlack; x := x + 0.5;

Until x > 0.707 * r; end; (a,b) (x+a, y+b) (-x+a, y+b) (y+a, -x+b) (-y+a, -x+b)

(-x+a, -y+b) (x+a, -y+b)

(-y+a, x+b) (y+a, x+b)

procedure LingkPolinomPusatABWarna4); begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); x := 0;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(-y+b))] := clRed; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(-x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(-x+b))] := clBlack; x := x + 0.5;

Until x > 0.707 * r;

(18)

procedure LingkPolinomPusatABWarna2; begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); x := 0;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(-x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(-x+b))] := clBlack; x := x + 0.5;

Until x > 0.707 * r; end;

(a,b)

(x+a, y+b) (-x+a, y+b)

(y+a, -x+b) (y+a, x+b)

(-y+a, -x+b)

(-x+a, -y+b) (x+a, -y+b)

(-y+a, x+b)

Menggambarkan lingkaran 2 warna

procedure LingkPolinomPusatABWarna2; begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); x := 0;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(-x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(-x+b))] := clBlack; x := x + 0.5;

Until x > 0.707 * r; end;

Program

(19)

procedure LingkPolinomPusatABWarna1; begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); x := -r;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clBlue; x := x + 0.5;

Until x > = r ; // separo lingkaran

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clBlue; x := x - 0.5;

Until x<= -r ;

end;

/

(a,b)

(x+a, y+b) (-x+a, y+b)

(y+a, -x+b) (y+a, x+b)

(-y+a, -x+b)

(-x+a, -y+b) (x+a, -y+b)

(-y+a, x+b)

Menggambarkan lingkaran 1 warna

procedure LingkPolinomPusatABWarna1; begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); x := -r;

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clBlue; x := x + 0.5;

Until x > = r ; // separo lingkaran

Repeat

y := sqrt(sqr(r) - sqr(x));

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clBlue; x := x - 0.5;

Until x<= -r ;

end;

/

(20)

2.2 Metode Trigonometri

a. Lingkaran Dengan Pusat (0,0) dan Radius r.

Persamaan lingkaran dengan pusat (0,0) dalam bentuk trigonometri: x = r cos α dan y = r sin α

Bentuk simetris sama dengan lingkaran polinom.

Batas scan dapat dipilih mulai dari sudut = 0 sampai 45 derajad. Agar diperoleh grafik yang halus dan kontinyu,

maka kenaikkan nilai sudut harus kecil < 1, misalnya 0,5. Perintah for to do tidak cocok.

Dapat menggunakan perintah repeat – until atau while –do.

2.2 Metode Trigonometri

a. Lingkaran Dengan Pusat (0,0) dan Radius r.

Persamaan lingkaran dengan pusat (0,0) dalam bentuk trigonometri: x = r cos α dan y = r sin α

Bentuk simetris sama dengan lingkaran polinom.

Batas scan dapat dipilih mulai dari sudut = 0 sampai 45 derajad. Agar diperoleh grafik yang halus dan kontinyu,

maka kenaikkan nilai sudut harus kecil < 1, misalnya 0,5. Perintah for to do tidak cocok.

Dapat menggunakan perintah repeat – until atau while –do.

(21)

procedure LingkTrigonoPusat00Warna8;

begin

r := StrToInt(eR.Text);

sudut := 0;

Repeat

radian := sudut/180 * 3.14; x := r * cos(radian);

y := r * sin(radian);

Canvas.Pixels[trunc(x0 +x), trunc(y0-y)] := clRed; Canvas.Pixels[trunc(x0 +x), trunc(y0+y)] := clBlue; Canvas.Pixels[trunc(x0 -x), trunc(y0-y)] := clPurple; Canvas.Pixels[trunc(x0 -x), trunc(y0+y)] := clNavy; Canvas.Pixels[trunc(x0 +y), trunc(y0-x)] := clBlack; Canvas.Pixels[trunc(x0 +y), trunc(y0+x)] := clGreen; Canvas.Pixels[trunc(x0 -y), trunc(y0-x)] := clYellow; Canvas.Pixels[trunc(x0 -y), trunc(y0+x)] := clTeal;

sudut := sudut + 0.5; Until sudut > = 45;

end; (0,0) (y, x) (x, y) (x, -y) (-x, y) (y, -x)

(-y, -x) (-y, x)

(-x, -y)

procedure LingkTrigonoPusat00Warna8;

begin

r := StrToInt(eR.Text);

sudut := 0;

Repeat

radian := sudut/180 * 3.14; x := r * cos(radian);

y := r * sin(radian);

Canvas.Pixels[trunc(x0 +x), trunc(y0-y)] := clRed; Canvas.Pixels[trunc(x0 +x), trunc(y0+y)] := clBlue; Canvas.Pixels[trunc(x0 -x), trunc(y0-y)] := clPurple; Canvas.Pixels[trunc(x0 -x), trunc(y0+y)] := clNavy; Canvas.Pixels[trunc(x0 +y), trunc(y0-x)] := clBlack; Canvas.Pixels[trunc(x0 +y), trunc(y0+x)] := clGreen; Canvas.Pixels[trunc(x0 -y), trunc(y0-x)] := clYellow; Canvas.Pixels[trunc(x0 -y), trunc(y0+x)] := clTeal;

sudut := sudut + 0.5; Until sudut > = 45;

(22)

Menggambarkan lingkaran 4 warna

Mengatur warna yang berdekatan dibuat sama.

procedure LingkTrigonoPusatABWarna4); begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); sudut:= 0;

Repeat

radian := sudut/180 * 3.14; x := r * Cos(radian);

y := r * sin(radian);

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(-y+b))] := clRed; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(-x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(-x+b))] := clBlack; sudut := sudut + 0.5;

Until sudut > = 45;

(a,b)

(x+a, y+b) (-x+a, y+b)

(y+a, -x+b)

(-y+a, -x+b)

(-x+a, -y+b) (x+a, -y+b)

(-y+a, x+b) (y+a, x+b)

procedure LingkTrigonoPusatABWarna4); begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); sudut:= 0;

Repeat

radian := sudut/180 * 3.14; x := r * Cos(radian);

y := r * sin(radian);

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(y+b))] := clBlue; Canvas.Pixels[trunc(x0 +(-x+a)), trunc(y0-(-y+b))] := clRed; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(x+b))] := clBlack; Canvas.Pixels[trunc(x0 +(y+a)), trunc(y0-(-x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(x+b))] := clGreen; Canvas.Pixels[trunc(x0 +(-y+a)), trunc(y0-(-x+b))] := clBlack; sudut := sudut + 0.5;

(23)

Menggambarkan lingkaran 1 warna

Mengatur warna yang berdekatan dibuat sama.

procedure LingkTrigonoPusatABWarna1); begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); sudut:= 0;

Repeat

radian := sudut/180 * 3.14; x := r * Cos(radian);

y := r * sin(radian);

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; sudut := sudut + 0.5;

Until sudut > = 360; end;

(a,b)

(x+a, y+b) (-x+a, y+b)

(y+a, -x+b)

(-y+a, -x+b)

(-x+a, -y+b) (x+a, -y+b)

(-y+a, x+b) (y+a, x+b)

procedure LingkTrigonoPusatABWarna1); begin

a := StrToInt(eA.Text); b := StrToInt(eB.Text); r := StrToInt(eR.Text); sudut:= 0;

Repeat

radian := sudut/180 * 3.14; x := r * Cos(radian);

y := r * sin(radian);

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; sudut := sudut + 0.5;

Until sudut > = 360; end;

Program

(24)

3. Menggambar Ellips

Menggambar ellips dengan pixel dapat menghasilkan ellips dengan 4 warna, 2 warna atau 1 warna pilihan.

Ellips mempunyai 4 simitris putar, ellips dapat dibagi menjadi 4 bagian simetris sama dan satu bagian tersebut dapat diputar sehingga

membentuk sebuah ellips penuh.

Menggambar sebuah ellips cukup menscan 1/4 bagian, sedangkan bagian lainnya dicopykan dari bagian tersebut

3. Menggambar Ellips

Menggambar ellips dengan pixel dapat menghasilkan ellips dengan 4 warna, 2 warna atau 1 warna pilihan.

Ellips mempunyai 4 simitris putar, ellips dapat dibagi menjadi 4 bagian simetris sama dan satu bagian tersebut dapat diputar sehingga

membentuk sebuah ellips penuh.

Menggambar sebuah ellips cukup menscan 1/4 bagian, sedangkan bagian lainnya dicopykan dari bagian tersebut

Keuntungan cara ini adalah kita dapat memilih warna yang berbeda dari tiap bagian tersebut.

Untuk menggambar ellips dapat digunakan 2 metode, yaitu metode polinom dan metode trigonometri.

(25)

3.1 Metode Polinom

a. Ellips Dengan Pusat (0,0) dgn Sumbu-sumbu h dan k.

Persamaannya x2 + y2 = 1

h2 k2

Dalam bentuk eksplisit dapat ditulis: y = k√( 1 – (x / h)2 ).

(x,y) (-x,y)

(0,0)

Sebuah titik (x,y) menghasilkan 3 titik pada bagian simetris lainnya,

yaitu (x,-y), (-x,y) dan (-x,-y). (-x,-y) (x,-y)

Sebuah titik (x,y) menghasilkan 3 titik pada bagian simetris lainnya, yaitu (x,-y), (-x,y) dan (-x,-y).

Batas scan diambil sepanjang sumbu datar (dari x = 0 sampai x =h). Kenaikkan nilai x harus < 1, misalnya 0,1.

Jangan pakai for to do

(26)

procedure EllipsPolinomPusat00Warna4; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); x := 0;

Repeat

y := k*sqrt(1 - sqr(x/h));

Canvas.Pixels[trunc(x0 +x), trunc(y0-y)] := clRed; Canvas.Pixels[trunc(x0 +x), trunc(y0+y)] := clBlue; Canvas.Pixels[trunc(x0 -x), trunc(y0-y)] := clYellow; Canvas.Pixels[trunc(x0 -x), trunc(y0+y)] := clGreen; x := x + 0.5

Until x > = h; end;

procedure EllipsPolinomPusat00Warna4; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); x := 0;

Repeat

y := k*sqrt(1 - sqr(x/h));

Canvas.Pixels[trunc(x0 +x), trunc(y0-y)] := clRed; Canvas.Pixels[trunc(x0 +x), trunc(y0+y)] := clBlue; Canvas.Pixels[trunc(x0 -x), trunc(y0-y)] := clYellow; Canvas.Pixels[trunc(x0 -x), trunc(y0+y)] := clGreen; x := x + 0.5

Until x > = h; end;

(0,0)

(x,y)

(x,-y) (-x,-y)

(-x,y)

Program

(27)

b. Ellips Dengan Pusat (a,b) dan Sumbu-sumbu h dan k.

Persamaannya:

(x – a)2 + (y – b)2 = 1

h2 k2

Untuk membentuk persamaan ini dapat dilakukan dengan

menggeser titik pusat (0,0) ke (a,b) dan koordinat titik-titik lainnya berubah sebagai berikut ini.

b. Ellips Dengan Pusat (a,b) dan Sumbu-sumbu h dan k.

Persamaannya:

(x – a)2 + (y – b)2 = 1

h2 k2

Untuk membentuk persamaan ini dapat dilakukan dengan

menggeser titik pusat (0,0) ke (a,b) dan koordinat titik-titik lainnya berubah sebagai berikut ini.

(x+a,y+b) (-x+a,y+b)

(x+a,-y+b) (-x+a,-y+b)

(a,b)

Batas scan dapat dipilih mulai dari x = 0 sampai x = h

(28)

procedure EllipsPolinomPusatABWarna4; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); a := StrToInt(eA.Text); b := StrToInt(eB.Text); x := 0;

Repeat

y := k*sqrt(1 - sqr(x/h));

Canvas.Pixels[trunc(x0 +(x+a), trunc(y0-(y+b)] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 - (x+a)), trunc(y0-(y+b))] := clYellow; Canvas.Pixels[trunc(x0 - (x+a)), trunc(y0-(-y+b))] := clGreen; x := x + 0.5;

Until x > = h; end;

(a,b)

(x+a,y+b)

(x+a,-y+b) (-x+a-y+b)

(-x+a,y+b)

procedure EllipsPolinomPusatABWarna4; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); a := StrToInt(eA.Text); b := StrToInt(eB.Text); x := 0;

Repeat

y := k*sqrt(1 - sqr(x/h));

Canvas.Pixels[trunc(x0 +(x+a), trunc(y0-(y+b)] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clBlue; Canvas.Pixels[trunc(x0 - (x+a)), trunc(y0-(y+b))] := clYellow; Canvas.Pixels[trunc(x0 - (x+a)), trunc(y0-(-y+b))] := clGreen; x := x + 0.5;

Until x > = h; end;

Program

(29)

3.2 Metode Trigonometri

Persamaan ellips dengan pusat (0,0) dgn sumbu-sumbu h & k adalah: x = h cos α dan y = k sin α

Batas scan dapat dipilih mulai dari sudut = 0 sampai 90 derajad. Kenaikkan nilai sudut harus kecil < 1, misalnya 0,1.

Tidak dapat menggunakan perintah for to do

Menggunakan perintah repeat – until atau while –do.

3.2 Metode Trigonometri

Persamaan ellips dengan pusat (0,0) dgn sumbu-sumbu h & k adalah: x = h cos α dan y = k sin α

Batas scan dapat dipilih mulai dari sudut = 0 sampai 90 derajad. Kenaikkan nilai sudut harus kecil < 1, misalnya 0,1.

Tidak dapat menggunakan perintah for to do

Menggunakan perintah repeat – until atau while –do.

(x,y) (-x,y)

(x,-y) (-x,-y)

(0,0)

(30)

procedure EllipsTrigonoPusat00Warna4;

begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); sudut := 0;

Repeat

radian := sudut /180 * 3.14; x := h * cos(radian);

y := k* sin(radian);

Canvas.Pixels[trunc(x0 +x), trunc(y0-y)] := clRed; Canvas.Pixels[trunc(x0 +x), trunc(y0+y)] := clBlue; Canvas.Pixels[trunc(x0 -x), trunc(y0-y)] := clYellow; Canvas.Pixels[trunc(x0 -x), trunc(y0+y)] := clGreen; sudut := sudut + 0.5

Until sudut > = 90; end;

(0,0)

(x,y)

(x,-y) (-x,-y)

(-x,y)

procedure EllipsTrigonoPusat00Warna4;

begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); sudut := 0;

Repeat

radian := sudut /180 * 3.14; x := h * cos(radian);

y := k* sin(radian);

Canvas.Pixels[trunc(x0 +x), trunc(y0-y)] := clRed; Canvas.Pixels[trunc(x0 +x), trunc(y0+y)] := clBlue; Canvas.Pixels[trunc(x0 -x), trunc(y0-y)] := clYellow; Canvas.Pixels[trunc(x0 -x), trunc(y0+y)] := clGreen; sudut := sudut + 0.5

Until sudut > = 90; end;

(31)

procedure EllipsTrigonoPusatABWarna4; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); a := StrToInt(eA.Text); b := StrToInt(eB.Text); sudut := 0;

Repeat

radian := sudut/180 * 3.14; x := h * cos(radian);

y := k* sin(radian);

Canvas.Pixels[trunc(x0 + (x+a)), trunc(y0 - (y+b))] := clRed; Canvas.Pixels[trunc(x0 + (x+a)), trunc(y0 - (-y + b))] := clBlue; Canvas.Pixels[trunc(x0 + (-x+a)), trunc(y0- (y + b))] := clYellow; Canvas.Pixels[trunc(x0 + (-x+a)), trunc(y0 - (-y + b))] := clGreen; sudut := sudut + 0.5

Until sudut > = 90; end;

(a,b)

(x+a,y+b)

(x+a,-y+b) (-x+a,-y+b)

(-x+a,y+b)

procedure EllipsTrigonoPusatABWarna4; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); a := StrToInt(eA.Text); b := StrToInt(eB.Text); sudut := 0;

Repeat

radian := sudut/180 * 3.14; x := h * cos(radian);

y := k* sin(radian);

Canvas.Pixels[trunc(x0 + (x+a)), trunc(y0 - (y+b))] := clRed; Canvas.Pixels[trunc(x0 + (x+a)), trunc(y0 - (-y + b))] := clBlue; Canvas.Pixels[trunc(x0 + (-x+a)), trunc(y0- (y + b))] := clYellow; Canvas.Pixels[trunc(x0 + (-x+a)), trunc(y0 - (-y + b))] := clGreen; sudut := sudut + 0.5

Until sudut > = 90; end;

(32)

procedure EllipsTrigonoPusatABWarna2; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); a := StrToInt(eA.Text); b := StrToInt(eB.Text); sudut := 0;

Repeat

radian := sudut / 180 * 3.14; x := h * cos(radian);

y := k* sin(radian);

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clRed; Canvas.Pixels[trunc(x0 - (x+a)), trunc(y0-(y+b))] := clYellow; Canvas.Pixels[trunc(x0 - (x+a)), trunc(y0-(-y+b)] := clYellow; sudut := sudut+ 0.5

Until sudut >= 90; end;

(a,b)

(x+a,y+b)

(-x+a,-yb)

(-x+a,y+b)

procedure EllipsTrigonoPusatABWarna2; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); a := StrToInt(eA.Text); b := StrToInt(eB.Text); sudut := 0;

Repeat

radian := sudut / 180 * 3.14; x := h * cos(radian);

y := k* sin(radian);

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(-y+b))] := clRed; Canvas.Pixels[trunc(x0 - (x+a)), trunc(y0-(y+b))] := clYellow; Canvas.Pixels[trunc(x0 - (x+a)), trunc(y0-(-y+b)] := clYellow; sudut := sudut+ 0.5

Until sudut >= 90; end;

(x+a,-y+b

(33)

procedure EllipsTrigonoPusatABWarna1; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); sudut := 0;

Repeat

radian := sudut / 180 * 3.14; x := h * cos(radian);

y := k* sin(radian);

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; sudut := sudut+ 0.5

Until sudut >=360; end;

procedure EllipsTrigonoPusatABWarna1; begin

h := StrToInt(eH.Text); k := StrToInt(eK.Text); sudut := 0;

Repeat

radian := sudut / 180 * 3.14; x := h * cos(radian);

y := k* sin(radian);

Canvas.Pixels[trunc(x0 +(x+a)), trunc(y0-(y+b))] := clRed; sudut := sudut+ 0.5

Until sudut >=360; end;

(a,b)

(x+a,y+b)

(x+a,-y+b (-x+a,-yb)

(-x+a,y+b)

(34)

4. Menggambar Fungsi Trigonometri

Menggambar fungsi trigonometri 

mengkonversikan besaran sudut ke besaran sumbu datar (x). Sumbu datar dapat dikonversikan dengan beberapa ukuran. Jika setengah sumbu x diinginkan untuk 1 gambar penuh, konversi sudut 360 derajad setara dengan ClientWidth div 2. Jika setengah sumbu x diinginkan untuk 2 gambar penuh,

maka konversinya sudut 360 derajad setara dengan ClientWidth div 4, dan seterusnya.

Amplitudo fungsi ditentukan sendiri dengan nilai tertentu > 1

(umumnya diambil cukup besar agar bentuk grafik tampak jelas).

4. Menggambar Fungsi Trigonometri

Menggambar fungsi trigonometri 

mengkonversikan besaran sudut ke besaran sumbu datar (x). Sumbu datar dapat dikonversikan dengan beberapa ukuran. Jika setengah sumbu x diinginkan untuk 1 gambar penuh, konversi sudut 360 derajad setara dengan ClientWidth div 2. Jika setengah sumbu x diinginkan untuk 2 gambar penuh,

maka konversinya sudut 360 derajad setara dengan ClientWidth div 4, dan seterusnya.

Amplitudo fungsi ditentukan sendiri dengan nilai tertentu > 1

(umumnya diambil cukup besar agar bentuk grafik tampak jelas).

(35)

4.1 Menggambar Fungsi Sinus

Bentuk umum fungsi sinus adalah y = A. sin α , di mana α dalam satuan radian dan

A bilangan yang cukup besar.

Batas penggambaran grafik dapat ditentukan sendiri.

procedure Sinus; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli * sin(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir; end;

Program

procedure Sinus; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli * sin(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir; end;

Program

(36)

4.2 Menggambar Fungsi Cosinus

Bentuk umum fungsi cosinus adalah y = A. scos α , di mana α dalam satuan radian dan

A bilangan yang cukup besar.

Batas penggambaran grafik dapat ditentukan sendiri.

procedure Cosinus; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli * cos(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir;

Program

procedure Cosinus; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli * cos(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir;

Program

(37)

4.3 Menggambar Fungsi Tangent

Bentuk umum fungsi tangent adalah y = A. sin α / cos α,

di mana α dalam satuan radian dan A bilangan yang cukup besar.

Batas penggambaran grafik dapat ditentukan sendiri.

procedure Tangent; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli * sin(radian)/ cos(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir; end;

Program

procedure Tangent; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli * sin(radian)/ cos(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir; end;

Program

(38)

4.4 Menggambar Fungsi CoTangent

Bentuk umum fungsi cotangent adalah y = A. cos α / sin α,

di mana α dalam satuan radian dan A bilangan yang cukup besar.

Batas penggambaran grafik dapat ditentukan sendiri.

procedure CoTangent; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli * cos(radian)/ sin(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir;

Program

procedure CoTangent; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli * cos(radian)/ sin(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir;

Program

(39)

4.5 Menggambar Fungsi Secant

Bentuk umum fungsi secant adalah y = A / cos α,

di mana α dalam satuan radian dan A bilangan yang cukup besar.

Batas penggambaran grafik dapat ditentukan sendiri.

procedure Secant; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli / cos(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir; end;

Program

procedure Secant; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli / cos(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir; end;

Program

(40)

4.6 Menggambar Fungsi CoSecant

Bentuk umum fungsi tangent adalah y = A / sin α , di mana α dalam satuan radian dan

A bilangan yang cukup besar.

Batas penggambaran grafik dapat ditentukan sendiri.

procedure CoSecant; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli / sin(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir;

Program

procedure CoSecant; Begin

n := StrToInt(ebanyakGrafik.Text); ampli := StrToInt(eAmpli.Text);

SudutAwal := StrToFloat(eSdtAwal.Text); SudutAkhir := StrToFloat(eSdtAkhir.Text); sudut := SudutAwal;

Repeat

radian := sudut/180 * 3.14;

x := sudut/360 * (ClientWidth div n); //1layar n grafik

y := Ampli / sin(radian);

Canvas.Pixels[trunc(x0 + x), trunc(y0 - y)] := clBlue; Sudut := sudut + 0.1;

Until sudut >= SudutAkhir;

Program

(41)

4.7 Menggambar Fungsi Umum

Konsep yang harus diperhatikan adalah : - bentuk persamaan fungsi

- sifat-sifat khusus fungsi

- nilai batas variabel bebas (x).

Misalnya kita akan menggambar grafik fungsi kuadrat (parabola). Bentuk persamaan : y = a x 2 + b x + c.

Nilai a tidak boleh nol.

Jika nilai a < 0 maka grafiknya menghadap ke bawah dan jika nilai a > 0 grafiknya menghadap keatas.

Karena perubahan y sangat besar terhadap perubahan x maka nilai perubahan x sebaiknya kecil saja (misalnya 0.1 atau 0.05). Fungsi ini mempunyai sumbu simetris xsim = -b/(2a).

Sehingga batas gambar fungsi ada di kiri dan kanan sumbu simetris

4.7 Menggambar Fungsi Umum

Konsep yang harus diperhatikan adalah : - bentuk persamaan fungsi

- sifat-sifat khusus fungsi

- nilai batas variabel bebas (x).

Misalnya kita akan menggambar grafik fungsi kuadrat (parabola). Bentuk persamaan : y = a x 2 + b x + c.

Nilai a tidak boleh nol.

Jika nilai a < 0 maka grafiknya menghadap ke bawah dan jika nilai a > 0 grafiknya menghadap keatas.

Karena perubahan y sangat besar terhadap perubahan x maka nilai perubahan x sebaiknya kecil saja (misalnya 0.1 atau 0.05). Fungsi ini mempunyai sumbu simetris xsim = -b/(2a).

(42)

procedure Parabola; begin

a := StrToFloat(eA.Text); b := StrToFloat(eB.Text); c := StrToFloat(eC.Text); lbr := StrToInt(eLbr.Text); if a = 0 then

begin

ePeringatan.Text := ‘Nilai a tidak boleh = 0 Ulangi……’; eA.Clear;

exit; end;

xsim := -b/(2*a); x := 0;

while x <= lbr do begin

x1 := xsim - x; x2 := xsim + x;

y := a * sqr(x1) + b * x1 + c;

Canvas.Pixels[trunc(x0 + x1),trunc(y0 - y)] := clRed; Canvas.Pixels[trunc(x0 + x2),trunc(y0 - y)] := clBlue; x := x + 0.1;

end; end;

Program

procedure Parabola; begin

a := StrToFloat(eA.Text); b := StrToFloat(eB.Text); c := StrToFloat(eC.Text); lbr := StrToInt(eLbr.Text); if a = 0 then

begin

ePeringatan.Text := ‘Nilai a tidak boleh = 0 Ulangi……’; eA.Clear;

exit; end;

xsim := -b/(2*a); x := 0;

while x <= lbr do begin

x1 := xsim - x; x2 := xsim + x;

y := a * sqr(x1) + b * x1 + c;

Canvas.Pixels[trunc(x0 + x1),trunc(y0 - y)] := clRed; Canvas.Pixels[trunc(x0 + x2),trunc(y0 - y)] := clBlue; x := x + 0.1;

end; end;

Program

(43)

4.8 Tugas Grafik Fungsi Umum

Buatlah grafik fungsi umum yang belum dibahas

Y = A log x

Y = A ln x

Y = K.exp(x)

Y = x + log x

Y = x

3

+ 3x - 6

Y = x

4

+ 4 x

2

+ 8

4.8 Tugas Grafik Fungsi Umum

Buatlah grafik fungsi umum yang belum dibahas

Y = A log x

Y = A ln x

Y = K.exp(x)

Y = x + log x

Y = x

3

+ 3x - 6

Y = x

4

+ 4 x

2

+ 8

(44)

5. Menggambar Bangun Ruang

Bangun ruang dapat dibentuk dengan menggabung beberapa bentuk seperti garis, lingkaran, ellips, parabola, sinusoida dan lainnya.

Untuk menggambar bangun ruang dapat digunakan

- procedure standar yang ada di dalam delphi (satu warna) atau - procedure yang dibuat sendiri.

Permasalahan yang harus diperhatikan dalam membuat bangun ruang adalah penentuan titik-titik hubung antar bangun penyusunnya.

Sebaiknya selalu berorientasi pada istem koordinat human!!! Perhitungannya agak rumit!!!!

5. Menggambar Bangun Ruang

Bangun ruang dapat dibentuk dengan menggabung beberapa bentuk seperti garis, lingkaran, ellips, parabola, sinusoida dan lainnya.

Untuk menggambar bangun ruang dapat digunakan

- procedure standar yang ada di dalam delphi (satu warna) atau - procedure yang dibuat sendiri.

Permasalahan yang harus diperhatikan dalam membuat bangun ruang adalah penentuan titik-titik hubung antar bangun penyusunnya.

Sebaiknya selalu berorientasi pada istem koordinat human!!! Perhitungannya agak rumit!!!!

(45)

5.1 Menggambar Silinder Tegak

Silinder terdiri dari:

2 ellips sebagai dasar dan atas

2 garis lurus yang melalui titik-titik ujung ellips sebagai selimut.

Procedure standar dari Delphi, perintahnya adalah:

Canvas.Ellipse(x0+(a-h), y0 – (b-k), x0 + (a+h), y0 – (b+k)); //bawah Canvas.Ellipse(x0+(a-h), y0 – (b-k+t), x0 + (a+h), y0 – (b+k+t)); //atas //Menggambar garis tegak kiri

Canvas. MoveTo(x0 + (a-h), y0 - b); Canvas.LineTo(x0 + (a-h), y0 - (b+t));

//Menggambar garis tegak kanan

Canvas. MoveTo(x0 + (a+h), y0 - b); Canvas.LineTo(x0 + (a+h), y0 - (b+t));

t

.

(a,b)

h

k

.

(a,b+t)

(a–h,b)

(a–h,b+t) (a+h,b+t)

(a+h,b)

Procedure standar dari Delphi, perintahnya adalah:

Canvas.Ellipse(x0+(a-h), y0 – (b-k), x0 + (a+h), y0 – (b+k)); //bawah Canvas.Ellipse(x0+(a-h), y0 – (b-k+t), x0 + (a+h), y0 – (b+k+t)); //atas //Menggambar garis tegak kiri

Canvas. MoveTo(x0 + (a-h), y0 - b); Canvas.LineTo(x0 + (a-h), y0 - (b+t));

//Menggambar garis tegak kanan

Canvas. MoveTo(x0 + (a+h), y0 - b); Canvas.LineTo(x0 + (a+h), y0 - (b+t));

(46)

5.2 Menggambar Bola

Bola terdiri dari

-

sebuah lingkaran dan

-

sebuah ellips yang melalui sumbu datarnya.

Menggunakan procedure standar Delphi

dengan acuan koordinat human, perintahnya adalah:

//lingkaran

Canvas.Ellipse(

x0 +(a-h), y0 – (b-h), x0 + (a+h), y0 – (b+h

);

//ellips

Canvas.Ellipse(

x0 +(a-h), y0 – (b-k), x0 + (a+h), y0 – (b+hk

);

.

(a,b) h

k

Menggunakan procedure standar Delphi

dengan acuan koordinat human, perintahnya adalah:

//lingkaran

Canvas.Ellipse(

x0 +(a-h), y0 – (b-h), x0 + (a+h), y0 – (b+h

);

//ellips

Canvas.Ellipse(

x0 +(a-h), y0 – (b-k), x0 + (a+h), y0 – (b+hk

);

(47)

5.3 Menggambar Kerucut Tegak

Menggunakan procedure standar dari Delphi, perintahnya adalah: //ellips

Canvas.Ellipse(x0 +(a-h), y0 – (b-k), x0 + (a+h), y0 – (b+hk) //Menggambar garis miring kiri

Canvas. MoveTo(x0 + (a-h), y0 - b); Canvas.LineTo(x0 + a, y0 – (b+t));

//Menggambar garis miring kanan

Canvas. MoveTo(x0 + (a+h),y0 - b); Canvas.LineTo(x0 + (a, y0 – (b + t));

.

(a,b)

t

h

k

(a–h,b) (a+h,b)

Kerucut terdiri dari:

-

sebuah ellips dan

-

dua garis lurus yang melalui

titik ujung ellips

- Kedua garis berpotongan di atas

titik pusat ellips dengan jarak t.

(a,b+t)

Menggunakan procedure standar dari Delphi, perintahnya adalah: //ellips

Canvas.Ellipse(x0 +(a-h), y0 – (b-k), x0 + (a+h), y0 – (b+hk) //Menggambar garis miring kiri

Canvas. MoveTo(x0 + (a-h), y0 - b); Canvas.LineTo(x0 + a, y0 – (b+t));

//Menggambar garis miring kanan

Canvas. MoveTo(x0 + (a+h),y0 - b); Canvas.LineTo(x0 + (a, y0 – (b + t));

(48)

5.4 Tugas Bangun Ruang

Buatlah gambar

kerucut terpancung,

paraboloida

dan bangun-bangun lainnya.

(49)

6. Menggambar Obyek Bergerak

Bangun geometri seperti:

garis, segitiga, lingkaran, ellips dan sebagainya dapat dibuat bergerak. Obyek dapat disusun dari beberapa bangun.

Lintasan: - lurus datar - lurus miring

- kurva sinus,parabola, dsb

Ada 2 cara menggerakkan obyek tersebut yaitu:

Cara manual (biasa) dengan mengubah koordinat obyeksecara manual. Cara transformasi dengan kaidah transformasi (dibahas di bab III).

6. Menggambar Obyek Bergerak

Bangun geometri seperti:

garis, segitiga, lingkaran, ellips dan sebagainya dapat dibuat bergerak. Obyek dapat disusun dari beberapa bangun.

Lintasan: - lurus datar - lurus miring

- kurva sinus,parabola, dsb

Ada 2 cara menggerakkan obyek tersebut yaitu:

Cara manual (biasa) dengan mengubah koordinat obyeksecara manual. Cara transformasi dengan kaidah transformasi (dibahas di bab III).

(50)

Cara Manual

Bangun geometri dibuat dalam suatu procedure tak standar buatan sendiri. Procedure ini dilengkapi dengan parsing parameter

(untuk pemanggilan procedure dengan nilai koordinat yang berbeda). Procedure dibuat dalam 2 bentuk, yaitu

procedure dengan warna tertentu dan

procedure yang sama dengan warna clear (untuk menghapus jejak grafik sebelumnya).

Jika menggunakan procedure library grafik yang disediakan oleh DELPHI maka kita tidak perlu membuat procedure tak standar.

Procedure yang mengggerakan bangun dibuat di dalam ClickButton.

Contoh program1

Cara Manual

Bangun geometri dibuat dalam suatu procedure tak standar buatan sendiri. Procedure ini dilengkapi dengan parsing parameter

(untuk pemanggilan procedure dengan nilai koordinat yang berbeda). Procedure dibuat dalam 2 bentuk, yaitu

procedure dengan warna tertentu dan

procedure yang sama dengan warna clear (untuk menghapus jejak grafik sebelumnya).

Jika menggunakan procedure library grafik yang disediakan oleh DELPHI maka kita tidak perlu membuat procedure tak standar.

Procedure yang mengggerakan bangun dibuat di dalam ClickButton.

(51)

Se

le

sa

i…….

Selesai…….

30102012 Komputer Grafik Widjianto versi

Se

le

sa

Referensi

Garis besar

Dokumen terkait

Penjaminan Kredit Usaha Rakyat, yaitu penjaminan kredit/ pembiayaan modal kerja dan atau investasi yang diberikan kepada Usaha Mikro, Kecil, Menengah dan Koperasi

Angin dominan pada bulan April bertiup dari arah Timur dimungkinkan karena pusat tekanan rendah yang berada di bumi bagian utara yang menyebabkan bertiup dari

Yang positif, adalah patut disyukuri bahwa seluruh peserta kuliah stukon4 tahun 2015 ini sebanyak 86% menyukai bentuk pembelajaran SCL, artinya kalaupun masih ada yang

Dari Ibnu Umar Radliyallaahu 'anhu bahwa Abbas Ibnu Abdul Mutthalib memohon izin kepada Rasulullah Shallallaahu 'alaihi wa Sallam untuk menginap di Mekkah pada malam-malam yang

Berhubungan dengan hal tersebut dilaksanakan penelitian penggunaan pupuk vermikompos sampah organik pada tanaman ubi jalar (Ipomoea batatas), dengan tujuan mengetahui

(2) Pemberlakuan SKKNI sebagaimana dimaksud pada ayat (1) dilakukan oleh instansi teknis pembina sektor untuk penyelenggaraan program pelatihan berbasis kompetensi

Oleh karena itu, Tugas Akhir ini akan menganalisis metode penerjemahan yang digunakan oleh WEB inclebabies.com untuk menerjemahkan lirik lagu milik Mino dan Zico berjudul “

3. jumlah rugi penurunan nilai atas aset revaluasian yang diakui dalam laporan laba rugi komprehensif lainnya selama periode itu. jumlah pembalikan rugi penurunan nilai atas