ColorfulArt2.java
1    package Miscellaneous;
2    
3    import painter.SPainter;
4    import shapes.SCircle;
5    import shapes.SPolygon;
6    import shapes.SSquare;
7    
8    import javax.swing.*;
9    import java.awt.*;
10   import java.util.Random;
11   
12   public class ColorfulArt2 {
13   
14       public static void main(String[] arg) {
15           SwingUtilities.invokeLater(new Runnable() {
16               public void run() {
17                   new ColorfulArt2();
18               }
19           });
20       }
21   
22   
23       public ColorfulArt2() {
24           paintTheImage();
25       }
26   
27       private void paintTheImage() {
28           SPainter painter = new SPainter("Artwork", 1000, 1000);
29           SSquare box = new SSquare(1000);
30           layer0(painter, box);
31           SSquare box2 = new SSquare(box.side() / 3);
32           SCircle dot = box2.inscribingCircle();
33           layer1(painter, box2, dot);
34           SSquare box3 = new SSquare(box2.diagonal());
35           SCircle dot2 = new SCircle((500 - (box3.diagonal() / 2)) / 2);
36           SPolygon stopsign = new SPolygon(8, box2.side() / (1 + 2 / Math.sqrt(2)));
37           layer2(painter, box2, box3, dot2, stopsign);
38           SCircle dot3 = box3.inscribingCircle();
39           SCircle dot4 = stopsign.inscribingCircle();
40           SPolygon pyramid = dot2.inscribingPolygon(3);
41           layer3(painter, box2, box3, dot2, dot3, dot4, pyramid);
42           SPolygon pyramid2 = new SPolygon(3, (2 / (1 + Math.sqrt(3))) * dot3.radius());
43           SPolygon pyramid3 = dot4.inscribingPolygon(3);
44           SCircle dot5 = new SCircle(pyramid2.side() / 4);
45           layer4(painter, box2, dot3, pyramid2, pyramid3, dot5);
46           SSquare box4 = new SSquare(box3.side() / 3);
47           SPolygon pyramid4 = new SPolygon(3, box4.side());
48           layer5(painter, box3, box4, pyramid4);
49       }
50   
51       private void layer0(SPainter painter, SSquare box) {
52           Color firstColor = randomColor();
53           painter.setColor(firstColor);
54           painter.paint(box);
55       }
56   
57       private Color randomColor() {
58           Random rgb = new Random();
59           int red = rgb.nextInt(256);
60           int green = rgb.nextInt(256);
61           int blue = rgb.nextInt(256);
62           return new Color(red, green, blue);
63       }
64   
65       private void layer1(SPainter painter, SSquare box2, SCircle dot) {
66           int i = 0;
67           Color secondColor = randomColor2();
68           while (i <= 3) {
69               if (i == 0) {
70                   painter.mfd(box2.side());
71                   painter.mrt(box2.side());
72               } else if (i == 1) {
73                   painter.mfd(box2.side());
74                   painter.mlt(box2.side());
75               } else if (i == 2) {
76                   painter.mbk(box2.side());
77                   painter.mrt(box2.side());
78               } else if (i == 3) {
79                   painter.mbk(box2.side());
80                   painter.mlt(box2.side());
81               }
82               painter.setColor(secondColor);
83               painter.paint(box2);
84               painter.moveToCenter();
85               i = i + 1;
86           }
87           int z = 0;
88           Color thirdColor = randomColor3();
89           while (z <= 3) {
90               if (z == 0) {
91                   painter.mfd(box2.side());
92               } else if (z == 1) {
93                   painter.mrt(box2.side());
94               } else if (z == 2) {
95                   painter.mbk(box2.side());
96               } else if (z == 3) {
97                   painter.mlt(box2.side());
98               }
99               painter.setColor(thirdColor);
100              painter.paint(dot);
101              painter.moveToCenter();
102              z = z + 1;
103          }
104      }
105  
106      private Color randomColor2() {
107          Random rgb2 = new Random();
108          int red2 = rgb2.nextInt(256);
109          int green2 = rgb2.nextInt(256);
110          int blue2 = rgb2.nextInt(256);
111          return new Color(Math.abs(randomColor().getRed() - red2), Math.abs(randomColor().getGreen() - green2), Math.abs(randomColor().getBlue() - blue2));
112      }
113  
114      private Color randomColor3() {
115          int red3 = 255 - randomColor2().getRed();
116          int green3 = 255 - randomColor2().getGreen();
117          int blue3 = 255 - randomColor2().getBlue();
118          return new Color(red3, green3, blue3);
119      }
120  
121      private void layer2(SPainter painter, SSquare box2, SSquare box3, SCircle dot2, SPolygon honeycomb) {
122          painter.tl(45);
123          Color fourthColor = randomColor4();
124          painter.setColor(fourthColor);
125          painter.paint(box3);
126          painter.tr(45);
127          Color fifthColor = randomColor5();
128          painter.setColor(fifthColor);
129          int n = 0;
130          while (n <= 3) {
131              if (n == 0) {
132                  painter.mfd((box3.diagonal() / 2) + dot2.radius());
133              } else if (n == 1) {
134                  painter.mrt((box3.diagonal() / 2) + dot2.radius());
135              } else if (n == 2) {
136                  painter.mbk((box3.diagonal() / 2) + dot2.radius());
137              } else if (n == 3) {
138                  painter.mlt((box3.diagonal() / 2) + dot2.radius());
139              }
140              painter.paint(dot2);
141              painter.moveToCenter();
142              n = n + 1;
143          }
144          Color sixthColor = randomColor6();
145          painter.setColor(sixthColor);
146          int k = 0;
147          while (k <= 3) {
148              if (k == 0) {
149                  painter.mfd(box2.side());
150                  painter.mrt(box2.side());
151              } else if (k == 1) {
152                  painter.mfd(box2.side());
153                  painter.mlt(box2.side());
154              } else if (k == 2) {
155                  painter.mbk(box2.side());
156                  painter.mrt(box2.side());
157              } else if (k == 3) {
158                  painter.mbk(box2.side());
159                  painter.mlt(box2.side());
160              }
161              painter.paint(honeycomb);
162              painter.moveToCenter();
163              k = k + 1;
164          }
165      }
166  
167      private Color randomColor4() {
168          int red4 = (randomColor3().getRed() * randomColor3().getRed()) % 256;
169          int green4 = (randomColor3().getGreen() * randomColor3().getGreen()) % 256;
170          int blue4 = (randomColor3().getBlue() * randomColor3().getBlue()) % 256;
171          return new Color(red4, green4, blue4);
172      }
173  
174      private Color randomColor5() {
175          Random rgb = new Random();
176          int red5 = rgb.nextInt(256);
177          int green5 = rgb.nextInt(256);
178          int blue5 = rgb.nextInt(256);
179          return new Color(((red5 + randomColor4().getRed()) / 2) % 256, ((green5 + randomColor4().getGreen()) / 2) % 256, ((blue5 + randomColor4().getBlue()) / 2) % 256);
180      }
181  
182      private Color randomColor6() {
183          return new Color((randomColor5().getRed()) / 2, (randomColor5().getGreen()) / 2, (randomColor5().getBlue()) / 2);
184      }
185  
186      private void layer3(SPainter painter, SSquare box2, SSquare box3, SCircle dot2, SCircle dot3, SCircle dot4, SPolygon pyramid) {
187          Color seventhColor = randomColor7();
188          painter.setColor(seventhColor);
189          painter.paint(dot3);
190          painter.moveToCenter();
191          int b = 0;
192          Color eighthColor = randomColor8();
193          painter.setColor(eighthColor);
194          while (b <= 3) {
195              if (b == 0) {
196                  painter.mfd(box2.side());
197                  painter.mrt(box2.side());
198              } else if (b == 1) {
199                  painter.mfd(box2.side());
200                  painter.mlt(box2.side());
201              } else if (b == 2) {
202                  painter.mbk(box2.side());
203                  painter.mrt(box2.side());
204              } else if (b == 3) {
205                  painter.mbk(box2.side());
206                  painter.mlt(box2.side());
207              }
208              painter.paint(dot4);
209              painter.moveToCenter();
210              b = b + 1;
211          }
212          int y = 0;
213          Color ninthColor = randomColor9();
214          painter.setColor(ninthColor);
215          while (y <= 3) {
216              painter.mfd(box3.diagonal() / 2 + dot2.radius());
217              painter.paint(pyramid);
218              painter.tr(90);
219              painter.moveToCenter();
220              y = y + 1;
221          }
222      }
223  
224      private Color randomColor7() {
225          return new Color((randomColor6().getRed() * randomColor6().getGreen()) % 256, (randomColor6().getGreen() * randomColor6().getBlue()) % 256, (randomColor6().getBlue() * randomColor6().getRed()) % 256);
226      }
227  
228      private Color randomColor8() {
229          return new Color((randomColor7().getRed() + randomColor7().getGreen() + randomColor7().getBlue()) / 3, (randomColor7().getRed() + randomColor7().getGreen() + randomColor7().getBlue()) / 3, (randomColor7().getRed() + randomColor7().getGreen() + randomColor7().getBlue()) / 3);
230      }
231  
232      private Color randomColor9() {
233          int[] redArray = new int[]{randomColor().getRed(), randomColor2().getRed(), randomColor3().getRed(), randomColor4().getRed(), randomColor5().getRed(), randomColor6().getRed(), randomColor7().getRed(), randomColor8().getRed()};
234          int[] greenArray = new int[]{randomColor().getGreen(), randomColor2().getGreen(), randomColor3().getGreen(), randomColor4().getGreen(), randomColor5().getGreen(), randomColor6().getGreen(), randomColor7().getGreen(), randomColor8().getGreen()};
235          int[] blueArray = new int[]{randomColor().getBlue(), randomColor2().getBlue(), randomColor3().getBlue(), randomColor4().getBlue(), randomColor5().getBlue(), randomColor6().getBlue(), randomColor7().getBlue(), randomColor8().getBlue()};
236          Random rgb = new Random();
237          return new Color(redArray[rgb.nextInt(8)], greenArray[rgb.nextInt(8)], blueArray[rgb.nextInt(8)]);
238      }
239  
240      private void layer4(SPainter painter, SSquare box2, SCircle dot3, SPolygon pyramid2, SPolygon pyramid3, SCircle dot5) {
241          int q = 0;
242          Color tenthColor = randomColor10();
243          painter.setColor(tenthColor);
244          while (q <= 3) {
245              painter.mfd(dot3.radius() - pyramid2.side() / Math.sqrt(3));
246              painter.paint(pyramid2);
247              painter.tr();
248              painter.moveToCenter();
249              q = q + 1;
250          }
251          int k = 0;
252          Color eleventhColor = randomColor11();
253          painter.setColor(eleventhColor);
254          painter.tr(45);
255          while (k <= 3) {
256              painter.mfd(Math.sqrt(2) * box2.side());
257              painter.paint(pyramid3);
258              painter.tr(90);
259              painter.moveToCenter();
260              k = k + 1;
261          }
262          painter.tl(45);
263          int g = 0;
264          Color twelfthColor = randomColor12();
265          painter.setColor(twelfthColor);
266          while (g <= 3) {
267              if (g == 0) {
268                  painter.mfd(pyramid2.side() / 4);
269                  painter.mrt(pyramid2.side() / 4);
270              } else if (g == 1) {
271                  painter.mfd(pyramid2.side() / 4);
272                  painter.mlt(pyramid2.side() / 4);
273              } else if (g == 2) {
274                  painter.mbk(pyramid2.side() / 4);
275                  painter.mrt(pyramid2.side() / 4);
276              } else if (g == 3) {
277                  painter.mbk(pyramid2.side() / 4);
278                  painter.mlt(pyramid2.side() / 4);
279              }
280              painter.paint(dot5);
281              painter.moveToCenter();
282              g = g + 1;
283          }
284      }
285  
286      private Color randomColor10() {
287          return new Color((randomColor().getRed() * randomColor9().getRed()) % 256, (randomColor().getGreen() * randomColor9().getGreen()) % 256, (randomColor().getBlue() * randomColor9().getBlue()) % 256);
288      }
289  
290      private Color randomColor11() {
291          return new Color((randomColor10().getRed() + randomColor10().getGreen() * randomColor10().getBlue()) % 256, (randomColor10().getGreen() + randomColor10().getBlue() * randomColor10().getRed()) % 256, (randomColor10().getBlue() + randomColor10().getRed() * randomColor10().getGreen()) % 256);
292      }
293  
294      private Color randomColor12() {
295          return new Color(255 - randomColor11().getRed(), 255 - randomColor11().getGreen(), 255 - randomColor11().getBlue());
296      }
297  
298      private void layer5(SPainter painter, SSquare box3, SSquare box4, SPolygon pyramid4) {
299          painter.tl(45);
300          Color thirteenthColor = randomColor13();
301          painter.setColor(thirteenthColor);
302          int k = 0;
303          while (k <= 3) {
304              painter.mfd(box3.side() / 2 + box4.side() / 2);
305              painter.paint(box4);
306              painter.tl(90);
307              painter.moveToCenter();
308              k = k + 1;
309          }
310          painter.tr(45);
311          Color fourteenthColor = randomColor14();
312          painter.setColor(fourteenthColor);
313          painter.tl(45);
314          int x = 0;
315          while (x <= 3) {
316              painter.mfd(box3.side()/2 + box4.side() + pyramid4.side()*Math.sqrt(3)/6);
317              painter.paint(pyramid4);
318              painter.tl(90);
319              painter.moveToCenter();
320              x = x + 1;
321          }
322          painter.tr(45);
323      }
324  
325      private Color randomColor13() {
326          int randomroll = (int) (Math.random() * 5);
327          return new Color(((randomColor().getRed() + randomColor12().getRed()) ^ (randomroll)) % 256, ((randomColor().getGreen() + randomColor12().getGreen()) ^ (randomroll)) % 256, ((randomColor().getBlue() + randomColor12().getBlue()) ^ (randomroll)) % 256);
328      }
329  
330      private Color randomColor14() {
331          int red6 = randomColor13().getRed();
332          int green6 = randomColor13().getGreen();
333          int blue6 = randomColor13().getBlue();
334          if (red6 > 127 | green6 > 127 | blue6 > 127) {
335              return new Color(red6/2,green6/2,blue6/2);
336          } else {
337              red6 = (int) (red6 + red6*.5)%256;
338              green6 = (int) (green6 + green6*.5)%256;
339              blue6 = (int) (blue6 + blue6*.5)%256;
340              return new Color(red6,green6,blue6);
341          }
342      }
343  }
344