Commit | Line | Data |
---|---|---|
97491195 JB |
1 | import java.awt.Color; |
2 | ||
1c118933 | 3 | public class Eye implements Comparable<Eye> { |
97491195 | 4 | private Color color; |
883508ca JB |
5 | private String[] colorsList = {"black", "green", "blue", "brown"}; |
6 | ||
7 | Eye() { | |
8 | } | |
97491195 | 9 | |
ac6c3ea2 | 10 | /** |
ac6c3ea2 JB |
11 | * @param color |
12 | */ | |
1c118933 | 13 | Eye(String color) { |
97491195 JB |
14 | setColor(color); |
15 | } | |
16 | ||
883508ca JB |
17 | public String[] getColorsList() { |
18 | return colorsList; | |
19 | } | |
20 | ||
ac6c3ea2 | 21 | /** |
ac6c3ea2 JB |
22 | * @return |
23 | */ | |
97491195 JB |
24 | public Color getColor() { |
25 | return color; | |
26 | } | |
27 | ||
ac6c3ea2 | 28 | /** |
ac6c3ea2 JB |
29 | * @param color |
30 | */ | |
1c118933 | 31 | public void setColor(String color) { |
6b48f570 | 32 | if (validateColor(color)) { |
6977e614 | 33 | if (color.equals("brown")) |
6b48f570 | 34 | this.color = new Color(88, 41, 0); |
6977e614 JB |
35 | else |
36 | this.color = Color.getColor(color); | |
37 | ||
6b48f570 | 38 | } else { |
883508ca | 39 | throw new IllegalArgumentException("Color must be " + colorsList); |
6b48f570 JB |
40 | } |
41 | } | |
42 | ||
ac6c3ea2 | 43 | /** |
ac6c3ea2 JB |
44 | * @param color |
45 | * @return | |
46 | */ | |
6b48f570 | 47 | private boolean validateColor(String color) { |
883508ca JB |
48 | for (String c : colorsList) { |
49 | if (color.equals(c)) { | |
50 | return true; | |
51 | } | |
52 | } | |
53 | return false; | |
1c118933 JB |
54 | } |
55 | ||
ac6c3ea2 | 56 | /** |
ac6c3ea2 JB |
57 | * @param eye |
58 | * @return | |
59 | */ | |
1c118933 JB |
60 | @Override |
61 | public int compareTo(Eye eye) { | |
6b48f570 JB |
62 | double r_diff = this.getColor().getRed() - eye.getColor().getRed(); |
63 | double g_diff = this.getColor().getGreen() - eye.getColor().getGreen(); | |
64 | double b_diff = this.getColor().getBlue() - eye.getColor().getBlue(); | |
65 | // See https://en.wikipedia.org/wiki/Color_difference | |
66 | Double distance = Math.sqrt(2 * Math.pow(r_diff, 2) + 4 * Math.pow(g_diff, 2) + 3 * Math.pow(b_diff, 2)); | |
67 | return distance.intValue(); | |
97491195 JB |
68 | } |
69 | } |