Dalam pelajaran ini kita menggunaka visual ++
jika belum punya softwarenya silahkan download disini
Menggambar busur lingkaran dan elips (arc)
Untuk menggambar busur lingkaran atau elips (arc), kita dapat mengggunakan perintah DrawArc().
Pada dasarnya, perintah DrawArc() di Visual C++ bisa dianggap sebagai pengembangan dari perintah DrawEllipse() untuk menggambar lingkaran atau elips.
Penjelasan mengenai cara menggambar lingkaran dan elips serta cara penggunaan perintah DrawEllipse() dapat dibaca di
http://groups.google.com/group/grafikakomputer2009/web/menggambar-lingkaran-dan-elips?hl=en
Busur (arc) bisa dianggap sebagai bagian dari suatu elips. Karena itu sebagian parameter yang digunakan untuk menggambar busur adalah sama dengan parameter yang digunakan untuk menggambar elips.
Parameter untuk perintah DrawEllipse() adalah: pen, x, y, width, height
sedangkan parameter untuk perintah DrawArc() adalah: pen, x, y, width, height, startangle, sweepangle
di mana:
pen adalah objek Pen ^,
x dan y adalah titik sudut kiri atas dari persegi panjang yang melingkupi elips,
width adalah lebar persegi panjang yang melingkupi elips,
height adalah tinggi persegi panjang yang melingkupi elips,
startangle adalah besar sudut (searah jarum jam) yang diukur dari sumbu x ke titik awal busur,
sweepangle adalah besar sudut (searah jarum jam) yang diukur dari titik awal busur ke titik akhir busur.
Contoh kode program dan gambar busur yang dihasilkan:
Busur 1:
g->DrawArc(p, 0,0, 100,100, 0, 90);
Busur2:
g->DrawArc(p, 0,0, 100,100, 90, 90);
Busur 3:
g->DrawArc(p, 0,0, 100,100, 180, 90);
Busur 4:
g->DrawArc(p, 0,0, 100,100, 270, 90);
Contoh lain:
Graphics ^ g;
g = pictureBox1->CreateGraphics();
Pen ^ p = gcnew Pen(Color::Black);
g->DrawArc(p, 10,10,200,100, 0, 90);
g->DrawArc(p, 100,200,100,100, 180, 180);
g->DrawArc(p, 300,10,100,200, 90, 180);
Menggambar kurva
Visual C++ menyediakan perintah untuk menggambar dua macam kurva:
1. Kurva spline
2. Kurva Bezier
Kurva spline
Untuk menggambar kurva spline, kita harus menentukan titik-titik yang akan dilalui oleh kurva tersebut. Setiap titik disimpan di dalam struktur data Point, dan titik-titik tersebut disatukan di dalam sebuah array.
Array inilah yang harus diberikan sebagai parameter di dalam menggambar kurva. Perintah untuk menggambar kurva spline adalah:
g->DrawCurve( p, points );
di mana p adalah variabel untuk Pen, dan points adalah array yang berisi titik-titik yang akan membentuk kurva.
Sebelum menuliskan perintah di atas, kita harus menyiapkan titik-titik yang akan digunakan dan menyimpannya di dalam array. Sebagai contoh, lihat potongan kode berikut:
Point titik1 = Point(5,5);
Point titik2 = Point(100,100);
Point titik3 = Point(200,5);
array
^ arraytitik = { titik1, titik2, titik3 };
g->DrawCurve( p, arraytitik );
Perintah di atas akan menggambar kurva yang melalui titik1, titik2, dan titik3.
Bagi yang ingin mendalami aspek teoritis dan matematis dari kurva spline bisa membaca artikel ini:
http://en.wikipedia.org/wiki/Spline_%28mathematics%29
Kurva Bezier
Untuk menggambar kurva spline, kita harus menentukan 4 buah titik yang akan menentukan bentuk kurva tersebut. Tidak semua titik akan dilalui oleh kurva. Setiap titik disimpan di dalam struktur data Point.
Perintah untuk menggambar kurva Bezier adalah:
g->DrawBezier( p, p1, p2, p3, p4 );
di mana p adalah variabel untuk Pen, dan p1, p2, p3, dan p4 adalah titik-titik yang akan menentukan bentuk kurva.
Titik p1 dan p4 adalah posisi awal dan akhir dari kurva.
Titik p2 dan p3 adalah titik kontrol (control point) yang akan menentukan bentuk kurva, namun tidak dilalui oleh kurva tersebut.
Contoh potongan kode untuk mengambar kurva Bezier adalah sebagai berikut:
Point t1 = Point(5,5);
Point t2 = Point(100,100);
Point t3 = Point(200,200);
Point t4 = Point(200,5);
g->DrawBezier( p, t1, t2, t3, t4 );
Perintah di atas akan menggambar kurva yang berawal dari titik t1 dan berakhir di titik t4.
Titik t2 dan t3 adalah titik kontrol yang akan menentukan bentuk kurva yang dihasilkan.
Bagi yang ingin mendalami aspek teoritis dan matematis dari kurva Bezier bisa membaca artikel ini:
http://en.wikipedia.org/wiki/B%C3%A9zier_curve
Transformasi objek grafik
Transformasi objek grafik adalah proses yang dapat melakukan perubahan pada objek grafik. Perubahan yang terjadi pada objek grafik tersebut bisa berupa perubahan posisi, perubahan ukuran, atau perubahan kemiringan.
Secara umum transformasi bisa dikategorikan menjadi:
1. Translasi
2. Rotasi
3. Scaling
Transformasi bisa bersifat global atau lokal.
Transformasi global adalah transformasi yang berlaku terhadap semua objek yang digambar dengan objek Graphics. Sedangkan transformasi lokal adalah transformasi yang berlaku hanya terhadap objek tertentu yang dipilih.
Transformasi Global
Untuk melakukan transformasi global di Visual C++, dapat digunakan perintah TranslateTransform, RotateTransform, dan ScaleTransform yang merupakan method dari kelas Graphics.
1. Translasi
g->TranslateTransform(dx, dy);
dx, dy adalah jarak pergeseran ke arah sumbu horisontal dan vertikal.
Contoh kode program:
Graphics ^g;
Pen ^p;
p = gcnew Pen(Color::Red);
g = pictureBox1->CreateGraphics();
p->Color = Color::Black;
g->DrawLine(p, 0,0, 150,50);
g->DrawRectangle(p, 100,10,100,50);
g->DrawEllipse(p, 210, 10, 100, 50);
g->DrawEllipse(p, 320, 10, 50,50);
g->TranslateTransform(200.0,100.0);
p->Color = Color::Red;
g->DrawLine(p, 0,0, 150,50);
g->DrawRectangle(p, 100,10,100,50);
g->DrawEllipse(p, 210, 10, 100, 50);
g->DrawEllipse(p, 320, 10, 50,50);
g->ResetTransform();
2. Rotasi
g->RotateTransform(angle);
angle adalah besarnya sudut putar, searah jarum jam.
Contoh kode program:
Graphics ^g;
Pen ^p;
p = gcnew Pen(Color::Red);
g = pictureBox1->CreateGraphics();
p->Color = Color::Black;
g->DrawLine(p, 0,0, 150,50);
g->DrawRectangle(p, 100,10,100,50);
g->DrawEllipse(p, 210, 10, 100, 50);
g->DrawEllipse(p, 320, 10, 50,50);
g->RotateTransform(30.0);
p->Color = Color::Red;
g->DrawLine(p, 0,0, 150,50);
g->DrawRectangle(p, 100,10,100,50);
g->DrawEllipse(p, 210, 10, 100, 50);
g->DrawEllipse(p, 320, 10, 50,50);
g->ResetTransform();
3. Scaling
g->ScaleTransform(sx, sy);
sx, sy adalah besarnya pembesaran/pengecilan yang diinginkan secara horisontal dan vertikal.
jika nilai sx atau sy lebih besar dari 1 akan terjadi pembesaran objek.
jika nilai sx atau sy lebih kecil dari 1 akan terjadi pengecilan objek.
Contoh kode program:
Graphics ^g;
Pen ^p;
p = gcnew Pen(Color::Red);
g = pictureBox1->CreateGraphics();
p->Color = Color::Black;
g->DrawLine(p, 0,0, 150,50);
g->DrawRectangle(p, 100,10,100,50);
g->DrawEllipse(p, 210, 10, 100, 50);
g->DrawEllipse(p, 320, 10, 50,50);
g->ScaleTransform(1.5, 2.0);
p->Color = Color::Red;
g->DrawLine(p, 0,0, 150,50);
g->DrawRectangle(p, 100,10,100,50);
g->DrawEllipse(p, 210, 10, 100, 50);
g->DrawEllipse(p, 320, 10, 50,50);
g->ResetTransform();
Catatan:
Perintah g->ResetTransform() digunakan untuk me-reset atau membatalkan semua proses transformasi yang pernah dilakukan sebelumnya.