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