draw polar graph in java

邮差的信 提交于 2019-11-26 21:02:28

You might like to look at Lissajous curves; an example of a = 5, b = 4 (5:4) is shown below.

Addendum: Once you see how to plot points in xy coordinates, then you should look at converting between polar and Cartesian coordinates.

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);
            }
        });
    }
}
Ricardo Ferreira

Java2D is part of the official JDK and fits your purposes perfectly. You can find the java doc here: Java2d

You'll want to use Java2D to draw circles/polygons that fit your needs. In the public void paint(Graphics g) method of the control you wish to draw on, you can draw to the Graphics object. Some examples of various things that might be helpful:

//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);
}

Keep in mind that the position on calls like drawOval, drawRect, etc is for the top left corner of the shape, not the center of the shape. If you want your oval to be centered on 50 and with width 100, you'd need to set the xPos and yPos to 0.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!