All pastes #430018 Raw Edit

Plano Cartesiano

public java v1 · immutable
·published 2007-04-08 17:38 UTC
rendered paste body
//classe q gera um plano cartesiano import java.awt.BasicStroke;  import java.awt.BorderLayout;  import java.awt.Color;  import java.awt.Dimension;  import java.awt.Graphics;  import java.awt.Graphics2D;  import java.awt.Rectangle;  import java.awt.RenderingHints;  import java.awt.event.MouseEvent;  import java.awt.event.MouseMotionAdapter;  import java.awt.geom.AffineTransform;  import java.awt.geom.Ellipse2D;  import java.awt.geom.GeneralPath;  import java.awt.geom.Line2D;  import java.awt.geom.Point2D;  import java.text.DecimalFormat;  import java.util.Random;     import javax.swing.JComponent;  import javax.swing.JFrame;  import javax.swing.JLabel;  import javax.swing.JOptionPane;     public class Teste5 extends JComponent {                  private static final BasicStroke STROKE_FINO = new BasicStroke(0.1f);                protected void paintComponent(Graphics g1) {             Graphics2D g = (Graphics2D) g1;             Dimension size = getSize();                  AffineTransform scalePlano = AffineTransform.getScaleInstance(                 size.width / 100d,                 size.height / 100d);             AffineTransform scaleTela = AffineTransform.getScaleInstance(                 100d / size.width,                 100d / size.height);                  //transforma a tela num plano cartesiano 100x100 com a origem no centro             //faz com que a imagem seja distorcida proporcionalmente ao redimensionamento da janela             g.transform(scalePlano);             g.translate(50, 50);             g.scale(1, -1);                  //opcoes do traço             g.setStroke(STROKE_FINO);             g.setColor(Color.BLACK);             g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);                          //XOR só pra aparecer melhor             g.setXORMode(Color.white);             g.drawLine(0, -100, 0, 100);             g.drawLine(-100, 0, 100, 0);             drawStringSemTransformacoes("(0,0)", 0, 0, g, scalePlano, scaleTela);             g.setPaintMode();                  //matriz identidade, retorna ao sistema de coordenadas padrao (pixels)             g.setTransform(new AffineTransform());         }              /**         * @param string TODO         * @param x TODO         * @param y TODO         * @param g         * @param scalePlano         * @param scaleTela         */          private void drawStringSemTransformacoes(String string, int x, int y, Graphics2D g,            AffineTransform scalePlano, AffineTransform scaleTela) {            //mantém a origem (0,0) no meio da tela, mas retira retorna à proporção e orientação            // originais da tela            g.scale(1, -1);            g.transform(scaleTela);                //imprime a string            g.drawString(string, x, y);            g.transform(scalePlano);                //volta ao espaço cartesiano            g.scale(1, -1);        }            /**        * @param posicaoPlano        * @param xTela        * @param yTela        */        public void calculaPosicaoPlano(Point2D posicaoPlano, double xTela, double yTela) {            Dimension sz = this.getSize();            double sx = ((xTela * 200) / sz.width) - 100;            double sy = -(((yTela * 200) / sz.height) - 100);            posicaoPlano.setLocation(sx, sy);        }            public static void main(String[] args) {            final Teste5 t = new Teste5();                final JLabel l = new JLabel("Posição: ");                JFrame f = new JFrame();            f.getContentPane().setLayout(new BorderLayout());            f.getContentPane().add(t, BorderLayout.CENTER);            f.getContentPane().add(l, BorderLayout.SOUTH);            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            f.setSize(500, 500);            f.setVisible(true);                t.addMouseMotionListener(new MouseMotionAdapter() {                    private Point2D p = new Point2D.Double();                    private DecimalFormat df = new DecimalFormat("00.00");                {                    this.df.setPositivePrefix("+");                }                    public void mouseMoved(MouseEvent evt) {                    t.calculaPosicaoPlano(p, evt.getX(), evt.getY());                    l.setText("Posição: (" + df.format(p.getX()) + "; " + df.format(p.getY()) + ")");                }            });        }    }