1 /* 2 * Program to paint a series of circles and a square to solve the Kanizsa Square problem 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 17 //THE SOLUTION TO THE KANIZSA SQUARE PROBLEM 18 private void paintTheImage() { 19 SPainter painter = new SPainter("Kanizsa Square",400,400); 20 21 SCircle dot = new SCircle(75); 22 paintBlueCircle(painter, dot); 23 paintRedCircle(painter, dot); 24 paintGreenCircles(painter, dot); 25 26 SSquare square = new SSquare(200); 27 paintWhiteSquare(painter, square); 28 } 29 30 //REQUIRED INFRASTRUCTURE 31 public KanizsaSquare() { 32 paintTheImage(); 33 } 34 35 public static void main(String[] args) { 36 SwingUtilities.invokeLater(new Runnable() { 37 public void run() { 38 new KanizsaSquare(); 39 } 40 }); 41 } 42 43 //Paints top left blue circle 44 private void paintBlueCircle(SPainter painter, SCircle dot) { 45 painter.setColor(Color.BLUE); 46 painter.mlt(100); //move painter left 100 pixels 47 painter.mfd(100); //move painter up 100 pixels 48 painter.paint(dot); 49 painter.mrt(100); //move painter right 100 pixels for invariance 50 painter.mbk(100); //move painter down 100 pixels for invariance 51 } 52 53 //Paints bottom right red circle 54 private void paintRedCircle(SPainter painter, SCircle dot) { 55 painter.setColor(Color.RED); 56 painter.mrt(100); //move painter right 100 pixels 57 painter.mbk(100); //move painter down 100 pixels 58 painter.paint(dot); 59 painter.mlt(100); //move painter left 100 pixels for invariance 60 painter.mfd(100); //move painter up 100 pixels for invariance 61 } 62 63 //Paints top right & bottom left green circles 64 private void paintGreenCircles(SPainter painter, SCircle dot) { 65 //Paints top right green circle 66 painter.setColor(Color.GREEN); 67 painter.mrt(100); //move painter right 100 pixels 68 painter.mfd(100); //move painter up 100 pixels 69 painter.paint(dot); 70 painter.mlt(100); //move painter left 100 pixels for invariance 71 painter.mbk(100); //move painter down 100 pixels for invariance 72 73 //Paints bottom left green circle 74 painter.mlt(100); //move painter left 100 pixels 75 painter.mbk(100); //move painter down 100 pixels 76 painter.paint(dot); 77 painter.mrt(100); //move painter right 100 pixels for invariance 78 painter.mfd(100); //move painter up 100 pixels for invariance 79 } 80 81 //Paints the white square, is last in the sequence so square appears on top of circles 82 private void paintWhiteSquare(SPainter painter, SSquare square) { 83 painter.setColor(Color.WHITE); 84 painter.paint(square); 85 } 86 } 87