tipos - dibujar un gráfico polar en java
graficos en java (3)
¿Alguien sabe cómo puedo empezar a dibujar un gráfico polar en Java y trazar algunos puntos en este gráfico? Me refiero a los círculos y líneas, deseo hacer esto con algo como swing, y no usar ninguna biblioteca como Jfreechart Gracias
Querrá utilizar Java2D para dibujar círculos / polígonos que se ajusten a sus necesidades. En el método de public void paint(Graphics g)
del control que desea dibujar, puede dibujar en el objeto Graphics. Algunos ejemplos de varias cosas que pueden ser útiles:
//Draw a polygon
public void paint(Graphics g)
{
int xVals[] = {25, 145, 25, 145, 25};
int yVals[] = {25, 25, 145, 145, 25};
g.drawPolygon(xVals, yVals, xVals.length);
}
//Draw an ellipse/circle
public void paint(Graphics g)
{
int xPos = 50;
int yPos = 50;
int xWidth = 100;
int yWidth = 100;
g.drawOval(xPos, yPos, xWidth, yWidth);
}
Tenga en cuenta que la posición en llamadas como drawOval, drawRect, etc. es para la esquina superior izquierda de la forma, no para el centro de la forma. Si desea que su óvalo se centre en 50 y con ancho 100, deberá establecer los xPos
e yPos
en 0.
Java2D es parte del JDK oficial y se adapta perfectamente a tus propósitos. Puede encontrar el documento de Java aquí: Java2d
Tal vez quiera mirar las curvas de Lissajous ; un ejemplo de a = 5, b = 4 (5:4)
se muestra a continuación.
Adición: una vez que vea cómo trazar puntos en coordenadas xy , entonces debería considerar la conversión entre coordenadas polares y cartesianas .
public class LissajousPanel extends JPanel {
private static final int SIZE = 400;
private GeneralPath path = new GeneralPath();
@Override
public Dimension getPreferredSize() {
return new Dimension(SIZE, SIZE);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
double dt = Math.PI / 180;
int w = getWidth() / 2;
int h = getHeight() / 2;
path.reset();
path.moveTo(w, h);
for (double t = 0; t < 2 * Math.PI; t += dt) {
double x = w * Math.sin(5 * t) + w;
double y = h * Math.sin(4 * t) + h;
path.lineTo(x, y);
}
g2d.setColor(Color.blue);
g2d.draw(path);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new LissajousPanel());
f.pack();
f.setVisible(true);
}
});
}
}