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