1 /* 2 * Program to paint 9 dots in the NPW subject to the following constraints: 3 * 1) contains exactly 9 painted (filled in) circles 4 * 2) contains circles of exactly 4 different sizes 5 * 3) contains circles of exactly 4 different colors 6 * 4) none of the circles touch 7 * 5) the image is symmetric about the Y-axis 8 * 6) not all of the circles touch the Y-axis 9 */ 10 11 package npw; 12 13 import painter.SPainter; 14 import shapes.SCircle; 15 16 import javax.swing.*; 17 import java.awt.*; 18 19 public class Dots { 20 21 //Top level function for painting the dots 22 private void paintingCode() { 23 SPainter painter = new SPainter("Dots", 600, 600); //make canvas slightly bigger to fit dots 24 SCircle dot = new SCircle(50); //instantiate the circle object 25 //Stepwise refinement 26 paintMiddleCenterDot(painter, dot); 27 paintTopCenterDot(painter, dot); 28 paintBottomCenterDot(painter, dot); 29 paintMiddleLeftDot(painter, dot); 30 paintMiddleRightDot(painter, dot); 31 paintTopLeftDot(painter, dot); 32 paintTopRightDot(painter, dot); 33 paintBottomLeftDot(painter, dot); 34 paintBottomRightDot(painter, dot); 35 } 36 37 //REQUIRED INFRASTRUCTURE 38 public Dots() { 39 paintingCode(); 40 } 41 42 public static void main(String[] args) { 43 SwingUtilities.invokeLater(new Runnable() { 44 public void run() { 45 new Dots(); 46 } 47 }); 48 } 49 50 //Paints center red dot 51 private void paintMiddleCenterDot(SPainter painter, SCircle dot) { 52 painter.setColor(Color.RED); 53 painter.paint(dot); 54 } 55 56 //Paints top center orange dot 57 private void paintTopCenterDot(SPainter painter, SCircle dot) { 58 painter.setColor(Color.ORANGE); 59 dot.shrink(15); //shrink dot radius by 15 pixels 60 painter.mfd(200); //move painter up 200 pixels 61 painter.paint(dot); 62 dot.expand(15); //invariant 63 painter.mbk(200); //invariant 64 } 65 66 //Paints bottom center green dot 67 private void paintBottomCenterDot(SPainter painter, SCircle dot) { 68 painter.setColor(Color.GREEN); 69 dot.shrink(5); //shrink dot radius by 5 pixels 70 painter.mbk(150); //move painter down 150 pixels 71 painter.paint(dot); 72 dot.expand(5); //invariant 73 painter.mfd(150); //invariant 74 } 75 76 //Paints center left orange dot 77 private void paintMiddleLeftDot(SPainter painter, SCircle dot) { 78 painter.setColor(Color.ORANGE); 79 dot.shrink(15); //shrink dot radius by 15 pixels 80 painter.mlt(200); //move painter left 200 pixels 81 painter.paint(dot); 82 dot.expand(15); //invariant 83 painter.mrt(200); //invariant 84 } 85 86 //Paints center right orange dot 87 private void paintMiddleRightDot(SPainter painter, SCircle dot) { 88 painter.setColor(Color.ORANGE); 89 dot.shrink(15); //shrink dot radius by 15 pixels 90 painter.mrt(200); //move painter right 200 pixels 91 painter.paint(dot); 92 dot.expand(15); //invariant 93 painter.mlt(200); //invariant 94 } 95 96 //Paints top left pink dot 97 private void paintTopLeftDot(SPainter painter, SCircle dot) { 98 painter.setColor(Color.PINK); 99 dot.shrink(25); //shrink dot radius by 25 pixels 100 painter.mlt(200); //move painter left 200 pixels 101 painter.mfd(175); //move painter up 175 pixels 102 painter.paint(dot); 103 dot.expand(25); //invariant 104 painter.mrt(200); //invariant 105 painter.mbk(175); //invariant 106 } 107 108 //paints top right pink dot 109 private void paintTopRightDot(SPainter painter, SCircle dot) { 110 painter.setColor(Color.PINK); 111 dot.shrink(25); //shrink dot radius by 25 pixels 112 painter.mrt(200); //move painter right 200 pixels 113 painter.mfd(175); //move painter up 175 pixels 114 painter.paint(dot); 115 dot.expand(25); //invariant 116 painter.mlt(200); //invariant 117 painter.mbk(175); //invariant 118 } 119 120 //Paints bottom left green dot 121 private void paintBottomLeftDot(SPainter painter, SCircle dot) { 122 painter.setColor(Color.GREEN); 123 dot.shrink(5); //shrink dot radius by 5 pixels 124 painter.mlt(200); //move painter left 200 pixels 125 painter.mbk(150); //move painter down 150 pixels 126 painter.paint(dot); 127 dot.expand(5); //invariant 128 painter.mrt(200); //invariant 129 painter.mfd(150); //invariant 130 } 131 132 //Paints bottom right green dot 133 private void paintBottomRightDot(SPainter painter, SCircle dot) { 134 painter.setColor(Color.GREEN); 135 dot.shrink(5); //shrink dot radius by 5 pixels 136 painter.mrt(200); //move painter right 200 pixels 137 painter.mbk(150); //move painter down 150 pixels 138 painter.paint(dot); 139 dot.expand(5); //invariant 140 painter.mlt(200); //invariant 141 painter.mfd(150); //invariant 142 } 143 } 144