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.
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.
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.
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;
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
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;
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;
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;
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:
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))
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:
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
.
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
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)
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
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;
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
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;
/
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.
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;
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;
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
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.
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
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
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
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
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)
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;
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;
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
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)
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).
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
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
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
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
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
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
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).
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
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
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!!!!
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));
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) hk
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
);
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));
5.4 Tugas Bangun Ruang
Buatlah gambar
kerucut terpancung,
paraboloida
dan bangun-bangun lainnya.
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).
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.
Se
le
sa
i…….
Selesai…….
30102012 Komputer Grafik Widjianto versi
Se
le
sa