Commit | Line | Data |
---|---|---|
97491195 | 1 | import java.awt.Color; |
d75d0a00 | 2 | import java.util.Arrays; |
97491195 | 3 | |
5687dc10 | 4 | public class Eye { |
d75d0a00 | 5 | private String strColor; |
97491195 | 6 | private Color color; |
d75d0a00 | 7 | private String[] colorsList = {"black", "blue", "brown", "green"}; |
883508ca JB |
8 | |
9 | Eye() { | |
d75d0a00 | 10 | sortColorList(); |
883508ca | 11 | } |
97491195 | 12 | |
ac6c3ea2 | 13 | /** |
ac6c3ea2 JB |
14 | * @param color |
15 | */ | |
1c118933 | 16 | Eye(String color) { |
d75d0a00 | 17 | setStrColor(color); |
97491195 | 18 | setColor(color); |
d75d0a00 JB |
19 | sortColorList(); |
20 | } | |
21 | ||
22 | public String getStrColor() { | |
23 | return strColor; | |
24 | } | |
25 | ||
26 | public void setStrColor(String strColor) { | |
27 | if (validateColor(strColor)) { | |
28 | this.strColor = strColor; | |
29 | } else { | |
480ff9f5 | 30 | throw new IllegalArgumentException("Color must be" + this.colorListToString()); |
d75d0a00 | 31 | } |
97491195 JB |
32 | } |
33 | ||
883508ca JB |
34 | public String[] getColorsList() { |
35 | return colorsList; | |
36 | } | |
37 | ||
ac6c3ea2 | 38 | /** |
ac6c3ea2 JB |
39 | * @return |
40 | */ | |
97491195 JB |
41 | public Color getColor() { |
42 | return color; | |
43 | } | |
44 | ||
ac6c3ea2 | 45 | /** |
ac6c3ea2 JB |
46 | * @param color |
47 | */ | |
1c118933 | 48 | public void setColor(String color) { |
6b48f570 | 49 | if (validateColor(color)) { |
9b3bfcdd JB |
50 | if (color.equals("black")) |
51 | this.color = Color.black; | |
52 | else if (color.equals("blue")) | |
53 | this.color = Color.blue; | |
54 | else if (color.equals("brown")) | |
6b48f570 | 55 | this.color = new Color(88, 41, 0); |
9b3bfcdd JB |
56 | else if (color.equals("green")) |
57 | this.color = Color.green; | |
6b48f570 | 58 | } else { |
480ff9f5 | 59 | throw new IllegalArgumentException("Color must be" + this.colorListToString()); |
6b48f570 JB |
60 | } |
61 | } | |
62 | ||
ac6c3ea2 | 63 | /** |
ac6c3ea2 JB |
64 | * @param color |
65 | * @return | |
66 | */ | |
6b48f570 | 67 | private boolean validateColor(String color) { |
883508ca JB |
68 | for (String c : colorsList) { |
69 | if (color.equals(c)) { | |
70 | return true; | |
71 | } | |
72 | } | |
73 | return false; | |
1c118933 JB |
74 | } |
75 | ||
d75d0a00 JB |
76 | private void sortColorList() { |
77 | Arrays.sort(this.colorsList); | |
78 | } | |
79 | ||
ac6c3ea2 | 80 | /** |
ac6c3ea2 JB |
81 | * @param eye |
82 | * @return | |
83 | */ | |
5687dc10 | 84 | public int distanceTo(Eye eye) { |
6b48f570 JB |
85 | double r_diff = this.getColor().getRed() - eye.getColor().getRed(); |
86 | double g_diff = this.getColor().getGreen() - eye.getColor().getGreen(); | |
87 | double b_diff = this.getColor().getBlue() - eye.getColor().getBlue(); | |
f1e9d6d2 | 88 | //See https://en.wikipedia.org/wiki/Color_difference |
6b48f570 JB |
89 | Double distance = Math.sqrt(2 * Math.pow(r_diff, 2) + 4 * Math.pow(g_diff, 2) + 3 * Math.pow(b_diff, 2)); |
90 | return distance.intValue(); | |
97491195 | 91 | } |
b974e749 | 92 | |
d75d0a00 | 93 | private String colorListToString() { |
b974e749 JB |
94 | StringBuilder stringBuilder = new StringBuilder(); |
95 | for (String c : colorsList) { | |
96 | stringBuilder.append(" "); | |
97 | stringBuilder.append(c); | |
98 | } | |
99 | return stringBuilder.toString(); | |
100 | } | |
97491195 | 101 | } |