1 /* 2 * A program to paint Hirst Dots. 3 */ 4 5 package npw; 6 import painter.SPainter; 7 import shapes.SCircle; 8 import javax.swing.*; 9 import java.awt.*; 10 import java.util.Random; 11 import java.util.Scanner; 12 13 public class HirstDots { 14 public static void main(String[] args) { 15 SwingUtilities.invokeLater(HirstDots::new); 16 } 17 18 public HirstDots() { 19 paintTheImage(); 20 } 21 22 private void paintTheImage() { 23 int width = getNumber("Width"); 24 int height = getNumber("Height"); 25 int dotSpace = getNumber("Horizontal space between dots"); 26 SPainter painter = new SPainter("HirstDots", width, height); 27 SCircle dot = new SCircle(5); 28 painter.mfd(height / 2.0); 29 painter.tl(); 30 painter.mfd(width / 2.0); 31 painter.tl(); 32 paintGradient(painter, dot, height, width, dotSpace); 33 } 34 35 private static int getNumber(String prompt) { 36 String nss = JOptionPane.showInputDialog(null, prompt+"?"); 37 Scanner scanner = new Scanner(nss); 38 return scanner.nextInt(); 39 } 40 41 private void paintGradient(SPainter painter, SCircle dot, int height, int width, int dotSpace){ 42 double colWidth = dot.diameter() + dotSpace; 43 int nrOfCols = (int) Math.floor((width / colWidth))-1; 44 45 int cols = 0; 46 while (cols < nrOfCols){ 47 nextCol(painter, dot, dotSpace); 48 paintColumn(painter, dot, height, dotSpace); 49 cols = cols + 1; 50 } 51 } 52 53 private void paintOneDot(SPainter painter, SCircle dot) { 54 painter.setColor(randomColor()); 55 painter.paint(dot); 56 } 57 58 private void paintColumn(SPainter painter, SCircle dot, int height, int dotSpace){ 59 int totalDistanceTraveled = 0; 60 61 while(totalDistanceTraveled < height - (dot.radius()*3)) { 62 int travel = (int) (dot.diameter() + dotSpace); 63 totalDistanceTraveled = totalDistanceTraveled + travel; 64 painter.mfd(travel); 65 paintOneDot(painter,dot); 66 } 67 painter.mbk(totalDistanceTraveled); 68 } 69 70 private void nextCol(SPainter painter, SCircle dot, int dotSpace){ 71 painter.tl(); 72 painter.mfd(dot.diameter() + dotSpace); 73 painter.tr(); 74 } 75 76 private Color randomColor(){ 77 Random rcgen = new Random(); 78 int r = rcgen.nextInt(256); 79 int g = rcgen.nextInt(256); 80 int b = rcgen.nextInt(256); 81 return new Color(r,g,b); 82 } 83 }