SSISO Community

시소당

Transform Rotation Translation

import  java.awt.BasicStroke;
import  java.awt.Color;
import  java.awt.Graphics;
import  java.awt.Graphics2D;
import  java.awt.RenderingHints;
import  java.awt.Shape;
import  java.awt.Stroke;
import  java.awt.geom.AffineTransform;
import  java.awt.geom.GeneralPath;
import  java.awt.geom.Rectangle2D;

import  javax.swing.JComponent;
import  javax.swing.JFrame;

public  class  TransformersRotationTranslation  extends  JComponent  {
    Shape  axes,  shape;

    int  length  =  54,  arrowLength  =  4,  tickSize  =  4;

    public  TransformersRotationTranslation()  {
        axes  =  createAxes();
        shape  =  createShape();
    }

    protected  Shape  createAxes()  {
        GeneralPath  path  =  new  GeneralPath();

        //  Axes.
        path.moveTo(-length,  0);
        path.lineTo(length,  0);
        path.moveTo(0,  -length);
        path.lineTo(0,  length);
        //  Arrows.
        path.moveTo(length  -  arrowLength,  -arrowLength);
        path.lineTo(length,  0);
        path.lineTo(length  -  arrowLength,  arrowLength);
        path.moveTo(-arrowLength,  length  -  arrowLength);
        path.lineTo(0,  length);
        path.lineTo(arrowLength,  length  -  arrowLength);
        //  Half-centimeter  tick  marks
        float  cm  =  72  /  2.54f;
        float  lengthCentimeter  =  length  /  cm;
        for  (float  i  =  0.5f;  i  <  lengthCentimeter;  i  +=  1.0f)  {
            float  tick  =  i  *  cm;
            path.moveTo(tick,  -tickSize  /  2);
            path.lineTo(tick,  tickSize  /  2);
            path.moveTo(-tick,  -tickSize  /  2);
            path.lineTo(-tick,  tickSize  /  2);
            path.moveTo(-tickSize  /  2,  tick);
            path.lineTo(tickSize  /  2,  tick);
            path.moveTo(-tickSize  /  2,  -tick);
            path.lineTo(tickSize  /  2,  -tick);
        }
        //  Full-centimeter  tick  marks
        for  (float  i  =  1.0f;  i  <  lengthCentimeter;  i  +=  1.0f)  {
            float  tick  =  i  *  cm;
            path.moveTo(tick,  -tickSize);
            path.lineTo(tick,  tickSize);
            path.moveTo(-tick,  -tickSize);
            path.lineTo(-tick,  tickSize);
            path.moveTo(-tickSize,  tick);
            path.lineTo(tickSize,  tick);
            path.moveTo(-tickSize,  -tick);
            path.lineTo(tickSize,  -tick);
        }
        return  path;
    }

    protected  Shape  createShape()  {
        float  cm  =  72  /  2.54f;
        return  new  Rectangle2D.Float(cm,  cm,  2  *  cm,  cm);
    }

    public  void  paint(Graphics  g)  {
        Graphics2D  g2  =  (Graphics2D)  g;

        //  Use  antialiasing.
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        //  Move  the  origin  to  75,  75.
        AffineTransform  at  =  AffineTransform.getTranslateInstance(75,  75);
        g2.transform(at);

        //  Draw  the  shapes  in  their  original  locations.
        g2.setPaint(Color.black);
        g2.draw(axes);
        g2.draw(shape);

        //  Transform  the  Graphics2D.
            AffineTransform  rat  =  new  AffineTransform();
            rat.setToRotation(Math.PI  /  6);
            rat.translate(100,  100);
        
        g2.transform(rat);

        //  Draw  the  "new"  shapes  in  dashed.
        Stroke  stroke  =  new  BasicStroke(1,  BasicStroke.CAP_BUTT,
                BasicStroke.JOIN_BEVEL,  0,  new  float[]  {  3,  1  },  0);
        g2.setStroke(stroke);
        g2.draw(axes);
        g2.draw(shape);
    }

    public  static  void  main(String[]  a)  {
        JFrame  f  =  new  JFrame();
        f.getContentPane().add(new  TransformersRotationTranslation());
        f.setSize(350,  450);
        f.show();
    }
}
[2008년  03월  13일  20:30:34  수정되었습니다.]

558 view

4.0 stars