KanizsaSquare.java
1    /* 
2     * Program to paint a Kanizsa Square of any size 
3     * in the context of the Nonrepresentational Painting World, NPW. 
4     */
5    
6    package npw;
7    
8    import painter.SPainter;
9    import shapes.SCircle;
10   import shapes.SSquare;
11   
12   import javax.swing.*;
13   import java.awt.*;
14   
15   public class KanizsaSquare {
16       // THE SOLUTION TO THE KANIZSA SQUARE PROBLEM
17       private void paintTheImage() {
18           SPainter deb = new SPainter("Kanizsa Square",400,400);
19   
20           double ratio = 0.375;
21   
22           SSquare box = new SSquare(200);
23           SCircle dot = new SCircle(ratio*box.side());
24   
25           paintBlueCircle(deb,dot,box);
26           paintRedCircle(deb,dot,box);
27           paintGreenCircles(deb,dot,box);
28           paintWhiteSquare(deb,box);
29   
30   
31       }
32       private void paintBlueCircle(SPainter deb, SCircle dot, SSquare box) {
33           //move painter into position
34           deb.mfd(0.5*box.side());
35           deb.mlt(0.5* box.side());
36   
37           //paint circle
38           deb.setColor(Color.BLUE);
39           deb.paint(dot);
40   
41           //move painter to center
42           deb.moveToCenter();
43   
44       }
45       private void paintRedCircle(SPainter deb, SCircle dot, SSquare box) {
46           //move painter into position
47           deb.mbk(0.5*box.side());
48           deb.mrt(0.5* box.side());
49   
50           //paint circle
51           deb.setColor(Color.RED);
52           deb.paint(dot);
53   
54           //move painter to center
55           deb.moveToCenter();
56   
57       }
58       private void paintGreenCircles(SPainter deb, SCircle dot, SSquare box) {
59           //NE Circle
60           //move painter into position
61           deb.mfd(0.5*box.side());
62           deb.mrt(0.5* box.side());
63   
64           //paint circle
65           deb.setColor(Color.GREEN);
66           deb.paint(dot);
67   
68           //move painter to center
69           deb.moveToCenter();
70   
71           //SW Circle
72           //move painter into position
73           deb.mbk(0.5*box.side());
74           deb.mlt(0.5* box.side());
75   
76           //paint circle
77           deb.setColor(Color.GREEN);
78           deb.paint(dot);
79   
80           //move painter to center
81           deb.moveToCenter();
82       }
83   
84       private void paintWhiteSquare(SPainter deb, SSquare box) {
85           //paint square
86           deb.setColor(Color.WHITE);
87           deb.paint(box);
88   
89           //move painter to center
90           deb.moveToCenter();
91   
92       }
93   
94       //Required Infrastructure
95   
96       public KanizsaSquare() {
97           paintTheImage();
98       }
99   
100      public static void main(String[] args) {
101          SwingUtilities.invokeLater(new Runnable() {
102              public void run() {
103                  new KanizsaSquare();
104              }
105          });
106      }
107  }
108