【问题标题】:Nesting parabolic curves from straight lines从直线嵌套抛物线
【发布时间】:2018-01-21 06:27:31
【问题描述】:

我无法为我的作业复制图片。我将不胜感激任何提示或解决方案。我相信我已经掌握了大致的想法,但是我很难弄清楚复制图像并在一个循环中完成所有事情的数学运算。

我的程序需要满足这些条件:

  1. 匹配图像
  2. 为每对抛物线生成随机颜色
  3. 使用任何宽度或高度
  4. 使用单个循环绘制整个图形。

图片如下: 这是我迄今为止尝试过的

public static final int WIDTH = 500;
public static final int HEIGHT = 500;
public static final int LINE_INCREMENT = 5;

public static void main(String[] args) {

    DrawingPanel panel = new DrawingPanel(WIDTH, HEIGHT);
    Graphics g = panel.getGraphics();
    int d = 0;

    int iterations = HEIGHT/LINE_INCREMENT;
    Random rand = new Random();
    int red = 0, green = 0, blue = 0;
    red = rand.nextInt(128) + 128;
    green = rand.nextInt(128) + 128;
    blue = rand.nextInt(128) + 128;
    g.setColor(new Color(red,green,blue));

        for(int y = 0; y < iterations; y++) {
            g.drawLine(0, d, d, HEIGHT);
            g.drawLine(WIDTH, d, d, 0);

            d += LINE_INCREMENT;
        }

        red = rand.nextInt(128) + 128;
        green = rand.nextInt(128) + 128;
        blue = rand.nextInt(128) + 128;
        g.setColor(new Color(red,green,blue));
        d = 0;

        for (int x = 0; x < iterations/2; x++) {
            g.drawLine(WIDTH/4, d + HEIGHT/4, d + WIDTH/4, HEIGHT - HEIGHT/4);
            g.drawLine(d + WIDTH/4, WIDTH/4, WIDTH - WIDTH/4, d + WIDTH/4);

            d += LINE_INCREMENT;

        }           
}

输出:

【问题讨论】:

    标签: java swing paint paintcomponent curve


    【解决方案1】:

    实现方式是通过覆盖paintComponent

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.util.Random;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class ParabolicCurves extends JFrame {
    
        private static final int SIZE = 600;
        private static final int LINE_INCREMENT = 5;
        private static final int NUM_OF_PATTERNS = 4;
        private Random rand = new Random();
    
        ParabolicCurves()   {
    
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            JPanel panel = new DrawingPanel(SIZE);
            add(panel, BorderLayout.CENTER);
            pack();
            setVisible(true);
        }
    
        class DrawingPanel extends JPanel{
    
            public DrawingPanel(int size) {
                setPreferredSize(new Dimension(size, size));
                setBackground(Color.WHITE);
            }
    
            @Override
            public void paintComponent(Graphics g) {
    
                super.paintComponent(g);
    
                int red, green, blue, delta , iterations;
                int height, width ,startX, startY, endX, endY ;
                Rectangle boundingRrectangle = getBounds();
    
                for(int pattern = 0 ; pattern < NUM_OF_PATTERNS; pattern++) {
    
                    red = rand.nextInt(128) + 128;
                    green = rand.nextInt(128) + 128;
                    blue = rand.nextInt(128) + 128;
                    g.setColor(new Color(red,green,blue));
    
                    height = (int) boundingRrectangle.getHeight();
                    width = (int) boundingRrectangle.getWidth();
                    startX = (int) boundingRrectangle.getX();
                    startY = (int) boundingRrectangle.getY();
                    endX = startX+width;
                    endY = startY+ height;
    
                    iterations = Math.min(width, height)/LINE_INCREMENT;
                    delta = 0;
                    for (int x = 0; x < iterations ; x++) {
    
                        g.drawLine(startX, startY+delta, startX+delta, endY);
                        g.drawLine(endX, startY+delta, startX+delta, startY);
                        delta += LINE_INCREMENT;
                    }
                    //change bounding rectangle 
                    boundingRrectangle = new Rectangle(startX+(width/4),
                                                    startY+(width/4), width/2, height/2);
                }
            }
        }
    
        public static void main(String[] args)  {
            new ParabolicCurves();
        }
    }
    

    输出:

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2015-09-29
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多