Halaman Utama

Saturday, April 30, 2011

Translasi dan Rotasi Bangun Datar di Java

Neh ada new thread lagi dari ane gan, tentang grafika komputer. Ini cuma program sederhana sih, langsung aja deh gan,, nih code programnya :


import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.geom.Line2D;
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ferzhagrafik extends JPanel {
  MyCanvas ferzha;
  JSlider sliderTransX, sliderTransY, sliderRotatesudut, sliderRotateX,
      sliderRotateY;

  double transX = 0.0;
  double transY = 0.0;
  double rotatesudut = 0.0;
  double rotateX = 500.0;
  double rotateY = 250.0;
  double scaleX = 1.0;
  double scaleY = 1.0;
  float width = 2.0f;

  public ferzhagrafik() {
    super(new BorderLayout());
     
    //Pengaturan Tampilan Slider
    JPanel controlPanel = new JPanel(new GridLayout(3, 3));
    add(controlPanel, BorderLayout.NORTH);
    controlPanel.add(new JLabel("Translasi Gambar(dx,dy): "));
    sliderTransX = setSlider(controlPanel, JSlider.HORIZONTAL, 0, 900, 150,
        100, 50);
    sliderTransY = setSlider(controlPanel, JSlider.HORIZONTAL, 0, 400, 150,
        100, 50);   
    controlPanel.add(new JLabel("Rotasi Gambar(Sudut,ox,oy): "));
    sliderRotatesudut = setSlider(controlPanel, JSlider.HORIZONTAL, 0, 360,
        0, 30, 45);
    JPanel subPanel = new JPanel();
    subPanel.setLayout(new GridLayout(1, 2));
    sliderRotateX = setSlider(subPanel, JSlider.HORIZONTAL, 0, 600, 600,
        150, 50);
    sliderRotateY = setSlider(subPanel, JSlider.HORIZONTAL, 0, 600, 300,
        150, 50);
    controlPanel.add(subPanel);   
    controlPanel.add(new JLabel());
                controlPanel.setBackground(Color.MAGENTA);

           
  
    JPanel widthPanel = new JPanel();
    widthPanel.setLayout(new GridLayout(1, 2));
      add(widthPanel, BorderLayout.SOUTH);

               
    ferzha = new MyCanvas();
    add(ferzha, "Center");
  }

  public JSlider setSlider(JPanel panel, int orientation, int minimumValue,
      int maximumValue, int initValue, int majorTickSpacing,
      int minorTickSpacing) {
    JSlider slider = new JSlider(orientation, minimumValue, maximumValue,
        initValue);
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(majorTickSpacing);
    slider.setMinorTickSpacing(minorTickSpacing);
    slider.setPaintLabels(true);
    slider.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
        JSlider tempSlider = (JSlider) e.getSource();
                               
        if (tempSlider.equals(sliderTransX)) {
          transX = sliderTransX.getValue() - 150.0;
          ferzha.repaint();
        } else if (tempSlider.equals(sliderTransY)) {
          transY = sliderTransY.getValue() - 150.0;
          ferzha.repaint();
        } else if (tempSlider.equals(sliderRotatesudut)) {
          rotatesudut = sliderRotatesudut.getValue() * Math.PI / 180;
          ferzha.repaint();
        } else if (tempSlider.equals(sliderRotateX)) {
          rotateX = sliderRotateX.getValue();
          ferzha.repaint();
        } else if (tempSlider.equals(sliderRotateY)) {
          rotateY = sliderRotateY.getValue();
          ferzha.repaint();
        } 
      }
    });
    panel.add(slider);

    return slider;
  }

  class MyCanvas extends Canvas {
    public void paint(Graphics g) {
      Graphics2D g2D = (Graphics2D) g;
                 
                 
 //Gambar Grafik Asli             
 g2D.setPaint( Color.red);
 g2D.setStroke( new BasicStroke( 2.0f ) );
 g2D.draw( new Line2D.Double( 200, 300, 200, 200) );
 g2D.draw( new Line2D.Double( 200, 200, 250, 150) );
 g2D.draw( new Line2D.Double( 250, 150, 300, 200) );
 g2D.draw( new Line2D.Double( 300, 200, 200, 200) );
 g2D.draw( new Line2D.Double( 200, 200, 300, 300) );
 g2D.draw( new Line2D.Double( 300, 300, 200, 300) );
 g2D.draw( new Line2D.Double( 200, 300, 300, 200) );
 g2D.draw( new Line2D.Double( 300, 200, 300, 300) );

 g2D.setPaint( Color.magenta);
g2D.setStroke( new BasicStroke( 8.0f ) );

                  g2D.draw( new Line2D.Double( rotateX, rotateY, rotateX, rotateY) );

                               
       //Pengaturan Letak Gambar Grafik Setelah Slider Digeser
      g2D.translate(transX, transY);
      g2D.rotate(rotatesudut, rotateX, rotateY);
      g2D.scale(scaleX, scaleY);

      BasicStroke stroke = new BasicStroke(width);
      g2D.setStroke(stroke);
                                g2D.setPaint( Color.black);
      drawHome(g2D);
    }

    public void drawHome(Graphics2D g2D) {
               
      //Pendefinisian Gambar Grafik Yang Akan Dieksekusi
      Line2D line1 = new Line2D.Float(200f, 300f, 200f, 200f);
      Line2D line2 = new Line2D.Float(200f, 200f, 250f, 150f);
      Line2D line3 = new Line2D.Float(250f, 150f, 300f, 200f);
      Line2D line4 = new Line2D.Float(300f, 200f, 200f, 200f);
      Line2D line5 = new Line2D.Float(200f, 200f, 300f, 300f);
      Line2D line6 = new Line2D.Float(300f, 300f, 200f, 300f);
      Line2D line7 = new Line2D.Float(200f, 300f, 300f, 200f);
      Line2D line8 = new Line2D.Float(300f, 200f, 300f, 300f);
                               
                               
                 
      g2D.draw(line1);
      g2D.draw(line2);
      g2D.draw(line3);
      g2D.draw(line4);
      g2D.draw(line5);
      g2D.draw(line6);
      g2D.draw(line7);
      g2D.draw(line8);
    }
  }

  public static void main(String[] a) {
    JFrame f = new JFrame();
                f.setTitle("Tugas GRAFIKOM : Ferzha Putra Utama(G1A007034)");
    f.getContentPane().add(new grafika());
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                                f.setSize(1200, 700);
    f.setVisible(true);

  }
}

nih hasil print screennya gan...


itu aja deh, semoga bermanfaat, ane cuma mau bagi-bagi informasi aja..hehe :)

2 comments:

TPL17 said...

Mantap Gan! TerimaKasih saya sangat terbantu

Unknown said...

Terimakasih banyak gan.
Semoga sukses selalu.

Post a Comment