** Praktikum Grafika Komputer (2) **

Posted: April 19, 2012 in Grafika Komputer

MENGGAMBAR OBJEK GEOMETRIS SEDERHANA

Java 2D™ API menyediakan beberapa kelas yang mendefinisikan objek geometris umum seperti titik, garis, kurva, dan persegipanjang. Kelas geometri ini adalah bagian dari paket java.awt.geom.

Tabel Kelas Geometri

Catatan:
Kelas Arc2D mendefinisikan 3 (tiga) tipe busur, ditunjukkan dengan konstanta yang menyertai dalam kelas ini: OPEN, PIE, dan CHORD.
Berikut adalah contoh penerapan kelas geometris dalam sebuah program Java.

Listing 2.1 KelasGeometri.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*;

public class KelasGeometri extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Kelas Geometri”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new KelasGeometri();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new Panel2D();
getContentPane().add(panel);
}
}
class Panel2D extends JPanel{
public Panel2D() {
setPreferredSize(new Dimension(500, 400));
setBackground(Color.white);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
//gambar garis;
g2.drawLine(100,100,200,200);
//gambar persegipanjang
g2.draw(new Rectangle2D.Double(50, 25, 100, 50));
//gambar elips
9
g2.draw(new Ellipse2D.Double(200,50,100,50));
//gambar busur
g2.draw(new Arc2D.Double(200, 125, 100, 50, 90, 135, Arc2D.OPEN));
//gambar kurva kuadrat
g2.draw(new QuadCurve2D.Double(100,250,175,175,300,250));
//gambar kurva kubik
g2.draw(new CubicCurve2D.Double(50,300,150, 200,200,400,300,300));
}
}

Latihan:
Ketiklah kode program diatas. Kemudian compile dan jalankan. Apa yang dihasilkan oleh program tersebut? Jelaskan!

GEOMETRI BIDANG KONSTRUKTIF
Satu cara untuk membuat bentuk lebih kompleks adalah dengan mengkombinasikan beberapa bentuk sebelumnya (objek geometri). Cara ini dikenal sebagai geometri area konstruktif (constructive area geometry). Kelas Area didesain untuk menghasilkan geometri area konstruktif. Empat operasi yang didukung adalah: union, interseksi,
pertidaksamaan, pertidaksamaan geometris. Operasi ini dilakukan pada wilayah dua bidang, menghasilkan bidang baru. Objek Area dapat dibangun dari semua objek Shape menggunakan konstruktor berikut:
void add(Area a)
void intersect(Area a)
void subtract(Area a)
void exclusiveOr(Area a)
Listing berikut menunjukkan sebuah program yang mendemonstrasikan efek dari empat operasi geometri area konstruktif. Dua bentuk dikombinasikan menggunakan empat operasi untuk menghasilkan empat bentuk baru.

Listing 2.2 AddArea.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class AddArea extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Constructive Area Geometry”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new AddArea();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new AreaPanel();
getContentPane().add(panel);
}
}
class AreaPanel extends JPanel {
public AreaPanel() {
setPreferredSize(new Dimension(760, 400));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//lingkaran pertama.
Shape s1 = new Ellipse2D.Double(0, 0, 100, 100);
//lingkaran kedua.
Shape s2 = new Ellipse2D.Double(60, 0, 100, 100);
//area geometri pertama.
Area a1 = new Area(s1);
//area geometri kedua.
Area a2 = new Area(s2);
//geser posisi kedua kedua lingkaran dengan x=20 y=50.
g2.translate(20, 50);
//penentuan ketebalan dan warna garis.
BasicStroke bsThickLine = new BasicStroke(5.0f);
g2.setStroke(bsThickLine);
g2.setPaint(Color.blue);
//gambar lingkaran pertama.
g2.draw(s1);
//gambar lingkaran kedua.
g2.draw(s2);
//operasi “add”.
11
a2.add(a1);
//penentuan warna untuk mengisi hasil operasi “add”.
g2.setPaint(Color.green);
//pewarnaan area hasil operasi “add”.
g2.fill(a2);
}
}

Listing 2.3 IntersectArea.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class IntersectArea extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Geometri Bidang Konstruktif”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new IntersectArea();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new AreaPanel();
getContentPane().add(panel);
}
}
class AreaPanel extends JPanel {
public AreaPanel() {
setPreferredSize(new Dimension(760, 400));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//lingkaran pertama
Shape s1 = new Ellipse2D.Double(0, 0, 100, 100);
12
//lingkaran kedua
Shape s2 = new Ellipse2D.Double(60, 0, 100, 100);
//area geometri pertama
Area a2 = new Area(s2);
//pindah posisi kedua kedua lingkaran dengan x=20 y=50
g2.translate(20, 50);
//gambar lingkaran pertama
g2.draw(s1);
//gambar lingkaran kedua
g2.draw(s2);
//area geometri kedua
Area a1 = new Area(s1);
//operasi “intersect”
a1.intersect(a2);
//penentuan ketebalan dan warna garis
BasicStroke bsThickLine = new BasicStroke(5.0f);
g2.setStroke(bsThickLine);
g2.setPaint(Color.blue);
//gambar bidang hasil operasi “intersect”
g2.draw(a1);
//penentuan warna untuk mengisi bidang hasil operasi “intersect”.
g2.setPaint(Color.green);
//pewarnaan bidang hasil operasi “intersect”.
g2.fill(a1);
}
}

Listing 2.4 Subtract.Area.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class SubtractArea extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Geometri Bidang Konstruktif”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new SubtractArea();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new AreaPanel();
getContentPane().add(panel);
}
}
class AreaPanel extends JPanel {
public AreaPanel() {
setPreferredSize(new Dimension(760, 400));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//lingkaran pertama
Shape s1 = new Ellipse2D.Double(0, 0, 100, 100);
//lingkaran kedua
Shape s2 = new Ellipse2D.Double(60, 0, 100, 100);
//area geometri pertama
Area a2 = new Area(s2);
//pindah posisi kedua kedua lingkaran dengan x=20 y=50
g2.translate(20, 50);
//gambar lingkaran pertama
g2.draw(s1);
//gambar lingkaran kedua
g2.draw(s2);
//area geometri kedua
Area a1 = new Area(s1);
//operasi “subtract”
a1.subtract(a2);
//penentuan ketebalan dan warna garis
BasicStroke bsThickLine = new BasicStroke(5.0f);
g2.setStroke(bsThickLine);
g2.setPaint(Color.blue);
14
//gambar bidang hasil operasi “subtract”
g2.draw(a1);
//penentuan warna untuk mengisi bidang hasil operasi “subtract”.
g2.setPaint(Color.green);
//pewarnaan bidang hasil operasi “subtract”.
g2.fill(a1);
}
}

Listing 2.5 exclusiveOrArea.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class ExclusiveOrArea extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Geometri Bidang Konstruktif”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new ExclusiveOrArea();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new AreaPanel();
getContentPane().add(panel);
}
}
class AreaPanel extends JPanel {
public AreaPanel() {
setPreferredSize(new Dimension(760, 400));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//lingkaran pertama
15
Shape s1 = new Ellipse2D.Double(0, 0, 100, 100);
//lingkaran kedua
Shape s2 = new Ellipse2D.Double(60, 0, 100, 100);
//area geometri pertama
Area a2 = new Area(s2);
//pindah posisi kedua kedua lingkaran dengan x=20 y=50
g2.translate(20, 50);
//gambar lingkaran pertama
g2.draw(s1);
//gambar lingkaran kedua
g2.draw(s2);
//area geometri kedua
Area a1 = new Area(s1);
//operasi “exclusiveOr”
a1.exclusiveOr(a2);
//penentuan ketebalan dan warna garis
BasicStroke bsThickLine = new BasicStroke(5.0f);
g2.setStroke(bsThickLine);
g2.setPaint(Color.blue);
//gambar bidang hasil operasi “exclusiveOr”
g2.draw(a1);
//penentuan warna untuk mengisi bidang hasil operasi “exclusiveOr”.
g2.setPaint(Color.green);
//pewarnaan bidang hasil operasi “exclusiveOr”.
g2.fill(a1);
}
}

Latihan
ketik masing-masing listing program tersebut di atas. Kemudian compile dan jalankan.
Catatan:
Supaya hanya menampilkan bidang hasil operasi add, intersect, subtract, dan, dan exclusiveOr, hilangkan instruksi (baris program):
//gambar lingkaran pertama
g2.draw(s1);
//gambar lingkaran kedua
g2.draw(s2);
pada masing-masing listing program.

MENGGAMBAR OBJEK GEOMETRIS SEDERHANA
Anda telah belajar bagaimana menggambar bentuk-bentuk geometri yang terdapat dalam paket java.awt.geom. Untuk membuat objek geometri yang lebih kompleks, misalnya poligon, segitiga, atau bintang, Anda bisa menggunakan kelas lain dari paket java.awt.geom, yaitu GenaralPath. GeneralPath dimulai dari titik asal, misalnya (0,0). Untuk membuat objek dengan kelas GeneralPath, panggil dengan new GeneralPath() kemudian tambahkan segmen ke bentuk yang akan dibuat dengan menggunakan method-method berikut:

􀀀 moveTo(float x, float y) – Memindahkan titik path sekarang ke titik path yang diinginkan.
􀀀 lineTo(float x, float y) – menambahkan segmen garis ke path sekarang
􀀀 quadTo(float x, float y) – menambahkan segmen kurva kuadrat ke path sekarang
􀀀 curveTo(float x, float y) – menambahkan segmen kurva kubik ke path sekarang
􀀀 closePath() – menutup path.

Contoh berikut menjelaskan bagaimana menggambar sebuah polyline menggunakan GeneralPath:

Listing 2.1 KelasGeneralPath.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*;
public class KelasGeneralPath extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Kelas GeneraPath”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new KelasGeneralPath();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new Panel2D();
getContentPane().add(panel);
}
}
class Panel2D extends JPanel{
public Panel2D() {
setPreferredSize(new Dimension(500, 400));
setBackground(Color.white);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
GeneralPath gp = new GeneralPath();
//Mulai dari sudut depan-bawah mobil.
gp.moveTo(60,120);
//bagian bodi bawah-depan
gp.lineTo(80,120);
//roda depan
gp.quadTo(90,140,100,120);
//bagian bodi bawah-tengah
gp.lineTo(160,120);
//roda belakang
gp.quadTo(170,140,180,120);
//bagian bodi bawah-belakang
gp.lineTo(200,120);
//bagian belakang mobil
gp.curveTo(195,100,200,80,160,80);
//atap
gp.lineTo(110,80);
//kaca depan
gp.lineTo(90,100);
//bagian hidung mobil
18
gp.lineTo(60,100);
//bagian depan mobil
gp.lineTo(60,120);
//menggambar mobil
g2.draw(gp);
}
}

Latihan
Ketiklah kode program diatas. Kemudian compile dan jalankan. Menurut Anda gambar apa yang dihasilkan oleh program tersebut? Jelaskan!

 

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s