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