Antes de nada, que quede claro que la parte de gráficos polares
está todavía un poco en el aire. Hay métodos sin implementar
y posiblemente cambie bastantes cosas en versiones futuras. De todas formas,
aquí tienes un ejemplo de lo que se puede conseguir con lo que hay.
Un ejemplo de uso de la librería gráfica.
En unos ejes polares, radio y ángulo, vamos a dibujar una función
definida por varios puntos. Esta función por puntos es exactamente
el mismo objeto gráfico que usamos para el ejemplo de gráfico cartesiano. Esta vez no
lo haremos variar en el tiempo.
También añadiremos un gráfico de puntos, en el que
las coordenadas de radio y ángulo varían al azar. Este da
lugar a la "corona" de puntos amarillos que se ven en el gráfico..
Como objetos gráficos adicionales, añadiremos una mano que
permite arrastrar el gráfico con el botón derecho del ratón,
una botonería de zoom para acercar y alejar el gráfico, así
como una rejilla polar, para tener una especie de escala. También
un cursor, de forma que al mover el ratón sobre el gráfico
tendremos un radio y un circulo que acompañan al ratón. Haciendo
click con el botón izquierdo o el derecho fijaremos esos cursores.
El gráfico se inicializa como un gráfico polar con el radio entre 0 y 100 y el ángulo entre 0 y 2*PI. Los extemos deben darse como los dos puntos del rectángulo que quiere dibujarse, pero en coordenadas polares, es decir (100, -3*PI/4) y (100, PI/4). Esto es algo que no me gusta demasiado y que posiblemente cambie en futuras versiones.
lienzo = new Lienzo();
lienzo.setBackground(Color.BLACK);
eg = new EscalaGraficaPolar2();
eg.tomaExtremos(100.0,-Math.PI*3.0/4.0,100.0,Math.PI/4.0);
Se le añade un objeto gráfico que es el que pinta los puntos amarillos. Ponemos 1000 puntos al azar en un radio entre 25 y 30 y con cualquier angulo entre 0 y 2*PI.
puntos = new
Point2D.Double[1000];
for (int i=0;i<1000;i++)
{
puntos[i] = new
Point2D.Double(Math.random()*5.0+25,i*2.0*Math.PI/1000.0);
}
gp = new GraficoPuntos(puntos);
lienzo.tomaObjetoGrafico(gp);
También añadimos un gráfico por puntos, el mismo que añadimos en el ejemplo de cartesianas. 100 puntos con el radio entre 0 y 100 equiespaciados y el ángulo aleatorio entre -0.25 y 0.25 radianes.
double [] puntos2 = new
double[100];
for (int i=0;i<100;i++)
puntos2[i]=Math.random()*0.5-0.25;
GraficoFuncionPorPuntos gp2 = new
GraficoFuncionPorPuntos(0.0,100.0,puntos2);
lienzo.tomaObjetoGrafico(gp2);
Se le añaden otros objetos gráficos
// Una mano para poder arrastrar
el gráfico con el botón derecho del ratón
Mano mano = new Mano(eg,lienzo);
lienzo.anhadeObservadorRaton(mano);
// Un cursor para que se mueva sobre el
gráfico junto con el ratón.
CursorHilo cursor = new CursorHilo(true,true);
lienzo.anhadeObservadorRaton(cursor);
// Una rejilla.
Rejilla rej=new Rejilla();
lienzo.tomaObjetoGrafico(rej);
Y esto es todo. Tienes disponible lo siguiente: