【问题标题】:draw polar graph in java在java中绘制极坐标图
【发布时间】:2011-07-14 14:03:09
【问题描述】:

有谁知道我如何开始在 java 中绘制极坐标图并在该图上绘制一些点?我的意思是圆圈和线条,我希望用类似swing的东西来做到这一点,而不是使用像Jfreechart这样的任何库 谢谢

【问题讨论】:

    标签: java graph plot draw


    【解决方案1】:

    你可能想看看Lissajous curvesa = 5, b = 4 (5:4) 的示例如下所示。

    附录:一旦你了解了如何在 xy 坐标中绘制点,那么你应该看看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);
                }
            });
        }
    }
    

    【讨论】:

      【解决方案2】:

      Java2D 是官方 JDK 的一部分,非常适合您的目的。您可以在此处找到 Java 文档:Java2d

      【讨论】:

        【解决方案3】:

        您需要使用 Java2D 来绘制符合您需要的圆/多边形。在您希望绘制的控件的public void paint(Graphics g) 方法中,您可以绘制到 Graphics 对象。可能有帮助的各种事情的一些示例:

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

        请记住,drawOval、drawRect 等调用的位置是形状的左上角,而不是形状的中心。如果您希望椭圆以 50 为中心,宽度为 100,则需要将 xPosyPos 设置为 0。

        【讨论】:

        • -1,永远不要覆盖组件的paint(...) 方法(除非你必须这样做)。而是覆盖组件的 paintComponent(...) 方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        相关资源
        最近更新 更多