Anda di halaman 1dari 15

1.

Tujuan
● Setelah mempelajari modul ini peserta diharapkan dapat:
● Memahami fungsi-fungsi dari Skala,Rotasi dan Translasi
● Mengimplementasikan Skala pada sebuah Object
● Menerapkan Rotasi dan Translasi pada Object

2. Latar Belakang
Pada sebuah game skala rotasi dan translasi sangat dibutuhkan ketika kita
membangun sebuah game yang menggunakan grafik vektor dan bitmap. penggunaannya
seperti pemindahan sebuah object, memperbesar atau memper kecil ukuran peta ataupun
merotasi arah dari object seperti pesawat dll.

3. Percobaan
Percobaan 1: Membuat Class ContohRotasi

Distributed by Meruvian Education


import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;

public class ContohRotasi extends JFrame implements Runnable {


Shape shape;
Thread t;
Random rand = new Random();

ContohRotasi() {
shape = new Rectangle2D.Double(10,40,100,50);
t = new Thread(this);
t.start();

setTitle("Percobaan Rotasi");
setSize(500,500);
setVisible(true);
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
Graphics2D g2d=(Graphics2D) g;
AffineTransform identitas = new AffineTransform();
g2d.setColor(Color.BLACK);

g2d.fillRect(0, 0,500,500);
g2d.setTransform(identitas);

// Membuat garis bantu


g2d.setColor(Color.WHITE);
for(int i=0;i<500;i+=10){
g2d.drawLine(0, i, 500, i);
g2d.drawLine(i, 0, i, 500);
}
g2d.setColor(Color.BLUE);
g2d.fill(shape);
g2d.translate(200, 200);

for(int i=0;i<360;i++){
g2d.rotate(Math.toRadians(1));
g2d.setColor(new Color(rand.nextInt()));
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
g2d.fill(shape);
}
}

Distributed by Meruvian Education


public void run() {
Thread current = Thread.currentThread();
while (current == t) {
try {
Thread.sleep(1000);
}
catch(InterruptedException e) {
e.printStackTrace();
}
repaint();
}
}

public static void main(String args[]){


new ContohRotasi();
}
}

Percobaan 2 : Class PercobaanArc2d

Distributed by Meruvian Education


Percobaan 3 : Pembuatan class PercobaanPoligon

import javax.swing.JFrame;
import java.awt.*;
import java.awt.geom.*;

public class PercobaanPoligon extends JFrame {

Polygon poligon,poligon1;

public static void main(String args[]){


PercobaanPoligon p=new PercobaanPoligon();
}

PercobaanPoligon(){
setTitle("Percobaan Poligon");
int titikX[] = {200,100,130,270,300};
int titikY[] = {50,150,270,270,150};
poligon= new Polygon(titikX, titikY, titikX.length);

for(int i=0;i<titikY.length;i++){
titikY[i]=titikY[i]+300;
}
poligon1=new Polygon(titikX, titikY, titikX.length);

setSize(400,600);
setVisible(true);
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
public void paint(Graphics g){
Graphics2D g2d=(Graphics2D)g;

g2d.setColor(Color.BLUE);
g2d.draw(poligon);

g2d.setColor(Color.GREEN);
g2d.fill(poligon1);

}
}

Distributed by Meruvian Education


Percobaan 4 : membuat class ScreenManager dan class TestFullScreen

import java.awt.*;
import javax.swing.JFrame;

public class ScreenManager {


private GraphicsDevice device;

public ScreenManager() {
GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
device = environment.getDefaultScreenDevice();
}

private static final DisplayMode Mode_Pilihan[] = {


new DisplayMode(1024, 768, 32, 0),
new DisplayMode(1024, 768, 24, 0),
new DisplayMode(1024, 768, 16, 0),

new DisplayMode(800, 600, 32, 0),


new DisplayMode(800, 600, 24, 0),
new DisplayMode(800, 600, 16, 0),

new DisplayMode(640, 480, 32, 0),


new DisplayMode(640, 480, 24, 0),
new DisplayMode(640, 480, 16, 0)
};

public DisplayMode setResolusiLayar(int nilai){


if(nilai >=9)nilai=0;
DisplayMode sistemMode[] = device.getDisplayModes();
for (int j = 0; j < sistemMode.length; j++) {
if (perikasDisplayMode(Mode_Pilihan[nilai], sistemMode[j])) {
return Mode_Pilihan[nilai];
}
}
return null;
}

public DisplayMode getCurrentDisplayMode() {


return device.getDisplayMode();
}

public boolean perikasDisplayMode(DisplayMode mode1,DisplayMode mode2)


{
if (mode1.getWidth() != mode2.getWidth() ||
mode1.getHeight() != mode2.getHeight())
{

Distributed by Meruvian Education


return false;
}

if (mode1.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI &&


mode2.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI &&
mode1.getBitDepth() != mode2.getBitDepth())
{
return false;
}
if (mode1.getRefreshRate() !=
DisplayMode.REFRESH_RATE_UNKNOWN &&
mode2.getRefreshRate() !=
DisplayMode.REFRESH_RATE_UNKNOWN &&
mode1.getRefreshRate() != mode2.getRefreshRate())
{
return false;
}
return true;
}

public void setFullScreen(DisplayMode displayMode,JFrame frame) {


if(device.isFullScreenSupported()){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.setResizable(false);

device.setFullScreenWindow(frame);

if(displayMode != null && device.isDisplayChangeSupported()){


try {
device.setDisplayMode(displayMode);
}
catch (IllegalArgumentException ex) { }
}
}else{
System.out.println("System Operasi tidak mendukung Mode Full-screen");
}
}

public void tutupScreen() {


Window window = device.getFullScreenWindow();
if (window != null) {
window.dispose();
}
device.setFullScreenWindow(null);
}

Distributed by Meruvian Education


import java.awt.*;
import javax.swing.ImageIcon;

public class TestFullScreen{

public static void main(String args[]) {


TestFullScreen test = null;
test = new TestFullScreen();
test.cobaFullScreen();
}

private ScreenManager screen;

public void cobaFullScreen() {


screen = new ScreenManager();
try {
DisplayMode displayMode = screen.setResolusiLayar(7);
screen.setFullScreen(displayMode,new PercobaanJava2D());
}
finally {
// screen.tutupScreen();
}
}
}

Percobaan 5 : Membuat class ImageEfek dan class TestTransformasi

package jeni7;

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;

public class ImageEfek {

AffineTransform at;
private GraphicsConfiguration gc;

public ImageEfek(){
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
}

public BufferedImage getRotatedImage(BufferedImage src, int angle)


{
int transparency = src.getColorModel().getTransparency();
int center= Math.max(src.getWidth(),src.getHeight())/2;

Distributed by Meruvian Education


BufferedImage dest = gc.createCompatibleImage(

Math.max(src.getWidth(),src.getHeight()),Math.max(src.getWidth(),src.getHeight()),
transparency );
Graphics2D g2d = dest.createGraphics();
AffineTransform origAT = g2d.getTransform();

AffineTransform rot = new AffineTransform();


rot.rotate( Math.toRadians(angle), center, center);
g2d.transform(rot);

g2d.drawImage(src, 0, 0, null);
g2d.setTransform(origAT);
g2d.dispose();
return dest;
}

public BufferedImage getScaledImage(BufferedImage src, double sx, double sy)


{
int transparency = src.getColorModel().getTransparency();
BufferedImage dest = gc.createCompatibleImage(
(int)Math.ceil(src.getWidth()*sx),
(int)Math.ceil(src.getHeight()*sy), transparency );
Graphics2D g2d = dest.createGraphics();

AffineTransform origAT = g2d.getTransform();

AffineTransform scale = new AffineTransform();


// scale.setTransform(identity);
scale.scale(sx, sy);
g2d.transform(scale);
g2d.drawImage(src, 0, 0, null);

// g2d.drawImage(src, scale, null);


g2d.setTransform(origAT);
g2d.dispose();
return dest;
}

public BufferedImage getTranslatedImage(BufferedImage src, int tx,int ty)


{
int transparency = src.getColorModel().getTransparency();
BufferedImage dest = gc.createCompatibleImage(
src.getWidth(), src.getHeight(), transparency );
Graphics2D g2d = dest.createGraphics();

AffineTransform origAT = g2d.getTransform();

AffineTransform trans = new AffineTransform();


trans.translate(tx, ty);

Distributed by Meruvian Education


g2d.transform(trans);

g2d.drawImage(src, 0, 0, null);
g2d.setTransform(origAT);
g2d.dispose();
return dest;
}

Class TestTransformasi

package jeni7;

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import jeni6.*;

public class TestTransformasi extends JPanel implements Runnable{

private Thread th;


private boolean running;
private BufferedImage bufImg;
private Graphics2D g2d;

private BufferedImage oriImg;


private BufferedImage transformImg;

private ImageManager imsMgr;


private ImageEfek imgEfek;

private double scalex=0,scaley=0;


private int rotAngle;

TestTransformasi(){
setPreferredSize(new Dimension(600,400));
imgEfek= new ImageEfek();
imsMgr= new ImageManager();
imsMgr.setPath("jeniTransform/images");
imsMgr.loadSingleImage("maninhat.gif");
oriImg= imsMgr.getImage("maninhat");
}

public void start(){


th = new Thread(this);

Distributed by Meruvian Education


th.start();
running=true;
}

public void stop(){


running=false;
}

public void run() {


while(running){

try{
Thread.sleep(20);
}catch(Exception e){}

update();
render();
repaint();
}
}

public void paintComponent(Graphics g){


g.drawImage(bufImg, 0,0,null) ;
}

public void render(){


if (bufImg == null) {
bufImg = (BufferedImage) createImage(600, 400);
if (bufImg == null) {
System.out.println("dbImage null");
return;
} else
g2d = (Graphics2D) bufImg.getGraphics();
}

g2d.setColor(Color.gray);
g2d.fillRect(0, 0, getWidth(), getHeight());

transformImg= imgEfek.getScaledImage(oriImg, scalex, scaley);


transformImg= imgEfek.getRotatedImage(transformImg, rotAngle);
g2d.drawImage(transformImg, (600/2)-(transformImg.getWidth()/2), (400/2)-
(transformImg.getHeight()/2), null);
}

public void update(){


if(scalex<=2){
scalex+=0.01;
scaley+=0.01;
}

Distributed by Meruvian Education


//if(rotAngle<360)
rotAngle+=2;

public static void main(String [] arg){


TestTransformasi ttPanel = new TestTransformasi();
ttPanel.start();

JFrame app = new JFrame("Transformasi");


app.getContentPane().add(ttPanel, BorderLayout.CENTER);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.pack();
app.setResizable(false);
app.setVisible(true);
}
}

Distributed by Meruvian Education


Kunci Jawaban:
Percobaan 1:

Distributed by Meruvian Education


Percobaan 2:

Distributed by Meruvian Education


Percobaan 3

Distributed by Meruvian Education


Percobaan 5

Distributed by Meruvian Education

Anda mungkin juga menyukai