Hola a todos,
Comienzo a programar en java y estoy tratando de graficar en applets convirtiendo coordenadas
este es el codigo de la grafica que basicamente debe graficar los ejes x y y, y una recta de tamaño constante que gira como un radio con centro en x=0 y=0 el problema esta en que el punto de origen de la recta cambia cuando cambio el angulo de rotacion quisiera si algui puediera ayudarme a fijar el punto de rotacion
Gracias
Milagros.
import java.awt.*;
import java.applet.*;
import java.applet.*;
public class prueba extends java.applet.Applet {
public void init (){
setBackground(Color.black);
}
public void paint(Graphics g) {
int x,y,x1,y1,xc,yc;
int xsm1=0, ysm1=0;
int xsm2=0, ysm2=0;
int xsc1=0, ysc1=0;
int a = 0;
xc=200;//Mitad del ancho del applet
yc=200;//Mitad de la altura del applet
//***************Punto inicial*************
xsc1=200; //centro x =200
ysc1=0; //centro y =0
//*** DIBUJA LOS EJES DE COORDENADAS XY ***
g.setColor(Color.red); //Establece el color rojo
g.drawLine(xc,0,xc,2*yc); //Dibuja el eje Y
g.drawLine(0,yc,2*xc,yc); //Dibuja el eje X
/*************************************************************************************/
/* [xc+x,yc-y,1] Punto en sistema maquina
[x*cos(ang) + y*-sen(ang), x*sen(ang)+y*cos(ang), 1] Punto rotado
//PUNTO ROTADO EN EL SISTEMA HUMANO
x1 = (int)(Math.round(x*Math.cos(ang) + y * -Math.sin(ang)));
y1 = (int)(Math.round(x*Math.sin(ang)+y*Math.cos(ang))); */
public void init (){
setBackground(Color.black);
}
public void paint(Graphics g) {
int x,y,x1,y1,xc,yc;
int xsm1=0, ysm1=0;
int xsm2=0, ysm2=0;
int xsc1=0, ysc1=0;
int a = 0;
xc=200;//Mitad del ancho del applet
yc=200;//Mitad de la altura del applet
//***************Punto inicial*************
xsc1=200; //centro x =200
ysc1=0; //centro y =0
//*** DIBUJA LOS EJES DE COORDENADAS XY ***
g.setColor(Color.red); //Establece el color rojo
g.drawLine(xc,0,xc,2*yc); //Dibuja el eje Y
g.drawLine(0,yc,2*xc,yc); //Dibuja el eje X
/*************************************************************************************/
/* [xc+x,yc-y,1] Punto en sistema maquina
[x*cos(ang) + y*-sen(ang), x*sen(ang)+y*cos(ang), 1] Punto rotado
//PUNTO ROTADO EN EL SISTEMA HUMANO
x1 = (int)(Math.round(x*Math.cos(ang) + y * -Math.sin(ang)));
y1 = (int)(Math.round(x*Math.sin(ang)+y*Math.cos(ang))); */
/*******************************************************************************************/
// Punto rotado en sentido antihorio
/* xsm1 = (int)(Math.round((xsc1)*Math.cos(a*(Math.PI/180))+(ysc1)*-Math.sin(a*(Math.PI/180))));
ysm1 = (int)(Math.round((xsc1)*Math.sin(a*(Math.PI/180))+(ysc1)*Math.cos(a*(Math.PI/180))));
// Punto rotado en sentido antihorio
/* xsm1 = (int)(Math.round((xsc1)*Math.cos(a*(Math.PI/180))+(ysc1)*-Math.sin(a*(Math.PI/180))));
ysm1 = (int)(Math.round((xsc1)*Math.sin(a*(Math.PI/180))+(ysc1)*Math.cos(a*(Math.PI/180))));
g.setColor(Color.black);
g.drawLine(xc,yc,xsm1,ysm1);*/
g.drawLine(xc,yc,xsm1,ysm1);*/
/*******************************************************************************************/
/*
// Punto rotado en sentido horario
xsm2 = (int)(Math.round((xc+xsc1)*Math.cos(a*(Math.PI/180))+(yc-ysc1)*Math.sin(a*(Math.PI/180))));
ysm2 = (int)(Math.round((xc+xsc1)*-Math.sin(a*(Math.PI/180))+(yc-ysc1)*Math.cos(a*(Math.PI/180))));
/*
// Punto rotado en sentido horario
xsm2 = (int)(Math.round((xc+xsc1)*Math.cos(a*(Math.PI/180))+(yc-ysc1)*Math.sin(a*(Math.PI/180))));
ysm2 = (int)(Math.round((xc+xsc1)*-Math.sin(a*(Math.PI/180))+(yc-ysc1)*Math.cos(a*(Math.PI/180))));
g.setColor(Color.green);
g.drawLine(xc,yc,xsm2,ysm2);*/
g.drawLine(xc,yc,xsm2,ysm2);*/
/**********************************************************************************************/
while (a<360) {
if (a>350) a=0;
while (a<360) {
if (a>350) a=0;
// Punto rotado en sentido horario
xsm2 = (int)(Math.round(xsc1*Math.cos(a*(Math.PI/180))+ysc1*-Math.sin(a*(Math.PI/180))));
ysm2 = (int)(Math.round(xsc1*Math.sin(a*(Math.PI/180))+ysc1*Math.cos(a*(Math.PI/180))));
xsm2 = (int)(Math.round(xsc1*Math.cos(a*(Math.PI/180))+ysc1*-Math.sin(a*(Math.PI/180))));
ysm2 = (int)(Math.round(xsc1*Math.sin(a*(Math.PI/180))+ysc1*Math.cos(a*(Math.PI/180))));
double ix =(Math.round(xsc1*Math.cos(a*(Math.PI/180))+ysc1*-Math.sin(a*(Math.PI/180))));
double iy =(Math.round(xsc1*Math.sin(a*(Math.PI/180))+ysc1*Math.cos(a*(Math.PI/180))));
double iy =(Math.round(xsc1*Math.sin(a*(Math.PI/180))+ysc1*Math.cos(a*(Math.PI/180))));
g.setColor(Color.green);
a=a+10;
//PUNTO ROTADO EN EL SISTEMA MAQUINA
g.fillOval(xsm2,ysm2,5,5);
g.setColor(Color.red);
g.drawLine(xc,0,xc,2*yc); //Dibuja el eje Y
g.drawLine(0,yc,2*xc,yc); //Dibuja el eje X
/* //borra la linea del applet
g.setColor(Color.white);
g.drawLine(xc,yc,xsm2,ysm2);*/
}
}
}
a=a+10;
//PUNTO ROTADO EN EL SISTEMA MAQUINA
g.fillOval(xsm2,ysm2,5,5);
g.setColor(Color.red);
g.drawLine(xc,0,xc,2*yc); //Dibuja el eje Y
g.drawLine(0,yc,2*xc,yc); //Dibuja el eje X
/* //borra la linea del applet
g.setColor(Color.white);
g.drawLine(xc,yc,xsm2,ysm2);*/
}
}
}