1. Import java.awt.*;
Import acm.program.*;
Import acm.graphics.*;
public class Sierpinski extends GraphicsProgram
{
public void run()
{
GRect box = new GRect(20, 20, 242, 242);
box.setFilled(true);
add(box);
drawGasket(20, 20, 243);
}
private void drawFigure(int x, int y, int side) {
int sub = side / 3;
GRect box = new GRect(x + sub, y + sub, sub - 1, sub - 1);
box.setFilled(true);
box.setColor(Color.WHITE);
add(box);
if (sub >= 3) {
drawFigure(x, y, sub);
drawFigure(x + sub, y, sub);
drawFigure(x + 2 * sub, y, sub);
drawFigure(x, y + sub, sub);
drawFigure(x + 2 * sub, y + sub, sub);
drawFigure(x, y + 2 * sub, sub);
drawFigure(x + sub, y + 2 * sub, sub);
drawFigure(x + 2 * sub, y + 2 * sub, sub);
}
}
C.8 SQUARE in recursive method:-
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SierpinskiCarpet extends JPanel implements ActionListener
{
2. public static void main(String[] args)
{
JFrame window = new JFrame("Sierpinski Carpet");
window.setContentPane( new SierpinskiCarpet() );
window.pack();
window.setResizable(false);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
int x = Math.max(10, (screensize.width - window.getWidth()) / 2);
int y = Math.max(10, (screensize.height - window.getHeight()) / 2);
window.setLocation(x,y);
window.setVisible(true);
}
private int level;
private JRadioButton[] levelButton;
private JCheckBox[][] regionCheckbox;
private Display display;
private class Display extends JPanel
{
Display()
{
setBackground(Color.WHITE);
setPreferredSize(new Dimension(729,729));
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
drawCarpet(g,level,0,0,729);
}
}
3. public SierpinskiCarpet()
{
setLayout(new BorderLayout(3,3));
setBackground(Color.GRAY);
setBorder(BorderFactory.createLineBorder(Color.GRAY,3));
display = new Display();
add(display,BorderLayout.CENTER);
Box controls = Box.createVerticalBox();
controls.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
controls.setBackground(Color.WHITE);
controls.setOpaque(true);
add(controls, BorderLayout.EAST);
controls.add(new JLabel("Controls"));
controls.add(Box.createVerticalStrut(30));
levelButton = new JRadioButton[7];
ButtonGroup grp = new ButtonGroup();
for (int i = 0; i < 7; i++)
{
levelButton[i] = new JRadioButton("Recursion Level " + i);
grp.add(levelButton[i]);
levelButton[i].addActionListener(this);controls.add(levelButton[i]);
}
level = 4;
levelButton[4].setSelected(true);
regionCheckbox = new JCheckBox[3][3];
JPanel checks = new JPanel();
checks.setLayout(new GridLayout(3,3,5,5));
4. for (int r = 0; r < 3; r++)
{
for (int c = 0; c < 3; c++)
{
regionCheckbox[r][c] = new JCheckBox();
checks.add(regionCheckbox[r][c]);
regionCheckbox[r][c].addActionListener(this);
regionCheckbox[r][c].setSelected(true);
}
}
checks.setMaximumSize(new Dimension(90,90));
checks.setAlignmentX(LEFT_ALIGNMENT);
checks.setBackground(Color.WHITE);
regionCheckbox[1][1].setSelected(false);
controls.add(Box.createVerticalStrut(30));
controls.add(new JLabel("Regions To Include:"));
controls.add(Box.createVerticalStrut(15));
controls.add(checks);
}
public void actionPerformed(ActionEvent e)
{
Object src = e.getSource();
for (int i = 0; i < 7; i++)
{
if (src == levelButton[i])
{
level = i;
break;
}
}
5. }
private void drawCarpet(Graphics g, int level, int x, int y, int size)
{
g.fillRect(x,y,size,size);
}
}
Solution
Import java.awt.*;
Import acm.program.*;
Import acm.graphics.*;
public class Sierpinski extends GraphicsProgram
{
public void run()
{
GRect box = new GRect(20, 20, 242, 242);
box.setFilled(true);
add(box);
drawGasket(20, 20, 243);
}
private void drawFigure(int x, int y, int side) {
int sub = side / 3;
GRect box = new GRect(x + sub, y + sub, sub - 1, sub - 1);
box.setFilled(true);
box.setColor(Color.WHITE);
add(box);
if (sub >= 3) {
drawFigure(x, y, sub);
drawFigure(x + sub, y, sub);
drawFigure(x + 2 * sub, y, sub);
drawFigure(x, y + sub, sub);
drawFigure(x + 2 * sub, y + sub, sub);
drawFigure(x, y + 2 * sub, sub);
6. drawFigure(x + sub, y + 2 * sub, sub);
drawFigure(x + 2 * sub, y + 2 * sub, sub);
}
}
C.8 SQUARE in recursive method:-
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SierpinskiCarpet extends JPanel implements ActionListener
{
public static void main(String[] args)
{
JFrame window = new JFrame("Sierpinski Carpet");
window.setContentPane( new SierpinskiCarpet() );
window.pack();
window.setResizable(false);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
int x = Math.max(10, (screensize.width - window.getWidth()) / 2);
int y = Math.max(10, (screensize.height - window.getHeight()) / 2);
window.setLocation(x,y);
window.setVisible(true);
}
private int level;
private JRadioButton[] levelButton;
private JCheckBox[][] regionCheckbox;
private Display display;
private class Display extends JPanel
{
Display()
{
setBackground(Color.WHITE);
setPreferredSize(new Dimension(729,729));
}
7. protected void paintComponent(Graphics g)
{
super.paintComponent(g);
drawCarpet(g,level,0,0,729);
}
}
public SierpinskiCarpet()
{
setLayout(new BorderLayout(3,3));
setBackground(Color.GRAY);
setBorder(BorderFactory.createLineBorder(Color.GRAY,3));
display = new Display();
add(display,BorderLayout.CENTER);
Box controls = Box.createVerticalBox();
controls.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
controls.setBackground(Color.WHITE);
controls.setOpaque(true);
add(controls, BorderLayout.EAST);
controls.add(new JLabel("Controls"));
controls.add(Box.createVerticalStrut(30));
levelButton = new JRadioButton[7];
ButtonGroup grp = new ButtonGroup();
for (int i = 0; i < 7; i++)
{
levelButton[i] = new JRadioButton("Recursion Level " + i);
grp.add(levelButton[i]);
levelButton[i].addActionListener(this);controls.add(levelButton[i]);
}
8. level = 4;
levelButton[4].setSelected(true);
regionCheckbox = new JCheckBox[3][3];
JPanel checks = new JPanel();
checks.setLayout(new GridLayout(3,3,5,5));
for (int r = 0; r < 3; r++)
{
for (int c = 0; c < 3; c++)
{
regionCheckbox[r][c] = new JCheckBox();
checks.add(regionCheckbox[r][c]);
regionCheckbox[r][c].addActionListener(this);
regionCheckbox[r][c].setSelected(true);
}
}
checks.setMaximumSize(new Dimension(90,90));
checks.setAlignmentX(LEFT_ALIGNMENT);
checks.setBackground(Color.WHITE);
regionCheckbox[1][1].setSelected(false);
controls.add(Box.createVerticalStrut(30));
controls.add(new JLabel("Regions To Include:"));
controls.add(Box.createVerticalStrut(15));
controls.add(checks);
}
public void actionPerformed(ActionEvent e)
{
Object src = e.getSource();
9. for (int i = 0; i < 7; i++)
{
if (src == levelButton[i])
{
level = i;
break;
}
}
}
private void drawCarpet(Graphics g, int level, int x, int y, int size)
{
g.fillRect(x,y,size,size);
}
}