Rekurencyjne rysowanie prostokątów

0

Witam. Próbuje rozwiązać takowe zadanie:
Napisać program dzielący rekurencyjnie prostokąt na coraz mniejsze prostokąty. W pole tekstowe wprowadzamy na ile prostokątów dzielimy duży prostokąt. Aż do osiągnięcia przez podprostokąty szerokości 3 pikseli.
Czy miałby ktoś jakąś rade jak się za ten program zabrać bądź udzielić jakiejś podpowiedzi ?

0

Samo rysowanie powinno być zaimplementowane za pomocą klasy Graphics lub Graphics2D (ale nie ma to w tym przypadku wielkiego znaczenia). Uzyskuje się ją np. tak:

   Graphics graphics = mojPanelDoRysowaniaProstokatow.getGraphics();
    
   //sama funkcja powinna wywoływać samą siebie, tzn:
   void funkcjaRysujaca(int wysokosc, int szerokosc) {
        //tutaj kod odpowiedzialny za rysowanie prostokata
        funkcjaRysujaca(wysokosc /2 , szerokosc /2);
   }
0

Masz przykładowy kod

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Rectangles extends JFrame
{
    int width = 0;
    int height = 0;
    public static void main(String[] args)
    {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Rectangles().setVisible(true);
            }
        }); 
    }
    public Rectangles()
    {
        add(new Panel(),BorderLayout.CENTER);
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        JButton start = new JButton("Rysowanie");
        start.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                width = 300;
                height = 200;
                repaint();
            }
        });
        panel.add(start);
        add(panel,BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
    }
    class Panel extends JPanel
    {
        public Panel()
        {
            setPreferredSize(new Dimension(600,400));
            setBackground(Color.WHITE);
        }
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            drawRectangles(g,150,100,width,height); 
        }
        private void drawRectangles(Graphics g, int x, int y, int w, int h)
        {
            if(h >= 3)
            {
                g.drawRect(x,y,w,h);
                drawRectangles(g,x,y,w/2,h/2);
                drawRectangles(g,x+w/2,y,w/2,h/2);
                drawRectangles(g,x,y+h/2,w/2,h/2);
                drawRectangles(g,x+w/2,y+h/2,w/2,h/2);
            }
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1