Exemplo de rotação

2 respostas
A
8O eu rodo o bixinho sem modificação ai tudo bão depois coloco os valores e ele cisma em dar erro... veja o codigo:
mport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class ExemploRotacao extends JFrame{
 private static int vx[]={54,74,94,94,74,54};
 private static int vy[]={202,162,202,302,342,302};
 private JButton btoEscala;
 private static int vxA[] = new int [vx.length];
 private static int vyA[] = new int [vx.length];
 JPanel painel,painel2; 
 JLabel lblAngulo, lblLixo;
 JTextField txtAngulo;
 
 //método que desenha o objeto 
 public void paint(Graphics g){
  super.paint(g);
  g.drawPolygon(vx,vy,vx.length);
  repaint(); 
 }
 
 //método para rotacionar o objeto
 public static void rotacionar(double x){
  int DeltaX = vx[0] ;// pegando o valor x0
  int DeltaY = vy[0] ;// pegando o valor y0
     int centrox, centroy;
     centrox = vx[2] - (vx[2] - vx[0])/2;
     centroy = vy[4] - (vy[4] - vy[1])/2;
 
  // Leva o objeto para o ponto 0,0. A rotação será feita no eixo X0=0 e Y0=0 
  for (int i=0; i < vx.length; i++){
   //vx[i] = vx[i] - DeltaX;
   //vy[i] = vy[i] - DeltaY;
   vx[i] = vx[i] - centrox;
   vy[i] = vy[i] - centroy;
   
  }
      
  
  x= (x * (2*Math.PI))/360;//transfomando o ângulo em radianos

     //Calculando os novos pontos 
     
     for (int i =0; i< vx.length; i++){
     
   vxA[i] = (int) (vx[i] * Math.cos(x) - vy[i] * Math.sin(x));
   vyA[i] = (int) (vx[i] * Math.sin(x) + vy[i] * Math.cos(x));
 
  /* vx[i] = vxA[i]+DeltaX;// devolvendo o objeto para a posição correta. O calculo da rotação foi feito em cima do ponto 0,0
   vy[i] = vyA[i]+DeltaY;// devolvendo o objeto para a posição correta. O calculo da rotação foi feito em cima do ponto 0,0*/
   vx[i] = vxA[i]+centrox;// devolvendo o objeto para a posição correta. O calculo da rotação foi feito em cima do ponto 0,0
   vy[i] = vyA[i]+centroy;// devolvendo o objeto para a posição correta. O calculo da rotação foi feito em cima do ponto 0,0
  }
 } 
 
 public ExemploRotacao(){
     setSize(310,400);
  btoEscala = new JButton("Rotacionar");
  btoEscala.addActionListener
     (
     new ActionListener()
      {
       
       public void actionPerformed(ActionEvent e)
        {
         double valor;
         try {
          valor = Double.parseDouble(txtAngulo.getText());
          rotacionar(valor);
           }
           catch(Exception erro){ txtAngulo.setText("Erro - Valor incorreto do ângulo. Informe um ângulo válido !");}
         
        }
         });
    painel    = new JPanel(new GridLayout(4,4));
    painel2    = new JPanel(new GridLayout(4,4));
    lblAngulo = new JLabel("Digite o ângulo ");
    lblLixo = new JLabel(" ");
    txtAngulo = new JTextField("");
    painel.add(lblLixo);
   painel2.add(lblAngulo);
    painel2.add(txtAngulo);
        painel2.add(btoEscala);
        getContentPane().setLayout(new BorderLayout(2,1));
        getContentPane().add(painel, BorderLayout.NORTH);
        getContentPane().add(painel2, BorderLayout.SOUTH);
     setSize(310,400);
 }
 
  
 
 public static void main(String args[]){
  ExemploRotacao x = new ExemploRotacao();
  x.setSize(400,400);
  x.setVisible(true);
 }
}
valores a serem mudados : private int vx[]={20,23,28,31,36,40,44,49,52,58,60,67,68,75,76,84,84,93,92,102,100,111,111,109,102,100,93,91,84,82,75,73,67,65,58,56,49,47,40,38}; private int vy[]={20,25,25,30,30,35,35,40,40,45,45,50,50,55,55,60,60,65,65,70,70,75,75,80,80,85,85,90,90,95,95,100,100,105,105,110,110,115,115,120};

ai dá um monte de erro qdo faço a modificação

2 Respostas

eltonk

Rodou direitinho…
Qual o erro que aparece ae?!

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class ExemploRotacao extends JFrame{ 
	
 private static int vx[]={20,23,28,31,36,40,44,49,52,58,60,67,68,75,76,84,84,93,92,102,100,111,111,109,102,100,93,91,84,82,75,73,67,65,58,56,49,47,40,38}; 
 //private static int vx[]={54,74,94,94,74,54}; 
 private static int vy[]={20,25,25,30,30,35,35,40,40,45,45,50,50,55,55,60,60,65,65,70,70,75,75,80,80,85,85,90,90,95,95,100,100,105,105,110,110,115,115,120};
 //private static int vy[]={202,162,202,302,342,302}; 
 private JButton btoEscala; 
 private static int vxA[] = new int [vx.length]; 
 private static int vyA[] = new int [vx.length]; 
 JPanel painel,painel2; 
 JLabel lblAngulo, lblLixo; 
 JTextField txtAngulo; 
  
 //método que desenha o objeto 
 public void paint(Graphics g){ 
  super.paint(g); 
  g.drawPolygon(vx,vy,vx.length); 
  repaint(); 
 } 
  
 //método para rotacionar o objeto 
 public static void rotacionar(double x){ 
  int DeltaX = vx[0] ;// pegando o valor x0 
  int DeltaY = vy[0] ;// pegando o valor y0 
     int centrox, centroy; 
     centrox = vx[2] - (vx[2] - vx[0])/2; 
     centroy = vy[4] - (vy[4] - vy[1])/2; 
  
  // Leva o objeto para o ponto 0,0. A rotação será feita no eixo X0=0 e Y0=0 
  for (int i=0; i < vx.length; i++){ 
   //vx[i] = vx[i] - DeltaX; 
   //vy[i] = vy[i] - DeltaY; 
   vx[i] = vx[i] - centrox; 
   vy[i] = vy[i] - centroy; 
    
  } 
      
  
  x= (x * (2*Math.PI))/360;//transfomando o ângulo em radianos 

     //Calculando os novos pontos 
      
     for (int i =0; i< vx.length; i++){ 
      
   vxA[i] = (int) (vx[i] * Math.cos(x) - vy[i] * Math.sin(x)); 
   vyA[i] = (int) (vx[i] * Math.sin(x) + vy[i] * Math.cos(x)); 
  
  /* vx[i] = vxA[i]+DeltaX;// devolvendo o objeto para a posição correta. O calculo da rotação foi feito em cima do ponto 0,0 
   vy[i] = vyA[i]+DeltaY;// devolvendo o objeto para a posição correta. O calculo da rotação foi feito em cima do ponto 0,0*/ 
   vx[i] = vxA[i]+centrox;// devolvendo o objeto para a posição correta. O calculo da rotação foi feito em cima do ponto 0,0 
   vy[i] = vyA[i]+centroy;// devolvendo o objeto para a posição correta. O calculo da rotação foi feito em cima do ponto 0,0 
  } 
 } 
  
 public ExemploRotacao(){ 
     setSize(310,400); 
  btoEscala = new JButton("Rotacionar"); 
  btoEscala.addActionListener 
     ( 
     new ActionListener() 
      { 
        
       public void actionPerformed(ActionEvent e) 
        { 
         double valor; 
         try { 
          valor = Double.parseDouble(txtAngulo.getText()); 
          rotacionar(valor); 
           } 
           catch(Exception erro){ txtAngulo.setText("Erro - Valor incorreto do ângulo. Informe um ângulo válido !");} 
          
        } 
         }); 
    painel    = new JPanel(new GridLayout(4,4)); 
    painel2    = new JPanel(new GridLayout(4,4)); 
    lblAngulo = new JLabel("Digite o ângulo "); 
    lblLixo = new JLabel(" "); 
    txtAngulo = new JTextField(""); 
    painel.add(lblLixo); 
   painel2.add(lblAngulo); 
    painel2.add(txtAngulo); 
        painel2.add(btoEscala); 
        getContentPane().setLayout(new BorderLayout(2,1)); 
        getContentPane().add(painel, BorderLayout.NORTH); 
        getContentPane().add(painel2, BorderLayout.SOUTH); 
     setSize(310,400); 
 } 
  
  
  
 public static void main(String args[]){ 
  ExemploRotacao x = new ExemploRotacao(); 
  x.setSize(400,400); 
  x.setVisible(true); 
 } 
}
A

o erro que dava qdo eu colocava fala os numeros era que … o vx naum era statica …

Angel

Criado 9 de junho de 2004
Ultima resposta 9 de jun. de 2004
Respostas 2
Participantes 2