scorched_earth 5.0.3.pre-java → 5.0.4.pre-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/scorched_earth/color_palette.rb +13 -1
- data/lib/scorched_earth/services/cie94.rb +99 -0
- data/lib/scorched_earth/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f00d9340bc3c2def8581c5632ff80cfb2c9a1c7b
|
4
|
+
data.tar.gz: 628dff9384fc39729eaa311a7c5377e5857bb606
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d50a62e49990eb185ff5a7c2b22d6e4d7ecc43efbb45b30a901496b30c12fdf19434c249e6752837ed3d8344e126e1d1f413000838cb8a041c65f12b25f2ccd
|
7
|
+
data.tar.gz: cb23c05a6f96ac3f4a82903331c5918f01e46e9b11b2ba77e18eeae7066abc0192cf75d8ca819070c5c3350ac8d3b9c44ec2e0e7db5c6b50cf1185804cc6f5dc
|
@@ -2,6 +2,8 @@ include Java
|
|
2
2
|
|
3
3
|
import java.awt.Color
|
4
4
|
|
5
|
+
require 'scorched_earth/services/cie94'
|
6
|
+
|
5
7
|
module ScorchedEarth
|
6
8
|
class ColorPalette
|
7
9
|
include Enumerable
|
@@ -25,7 +27,17 @@ module ScorchedEarth
|
|
25
27
|
|
26
28
|
loop do
|
27
29
|
color = strategy.color colors
|
28
|
-
|
30
|
+
unless already_exists?(color)
|
31
|
+
yield color
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def already_exists?(color)
|
37
|
+
cache.values.any? do |color2|
|
38
|
+
delta_e94 = Services::CIE94.new.call color, color2
|
39
|
+
|
40
|
+
delta_e94 < 1000
|
29
41
|
end
|
30
42
|
end
|
31
43
|
|
@@ -0,0 +1,99 @@
|
|
1
|
+
include Java
|
2
|
+
|
3
|
+
import java.awt.Color
|
4
|
+
|
5
|
+
module ScorchedEarth
|
6
|
+
module Services
|
7
|
+
# https://github.com/halostatue/color/blob/master/lib/color/rgb.rb
|
8
|
+
class CIE94
|
9
|
+
def call(color_1, color_2, weighting_type = :graphic_arts)
|
10
|
+
color_1 = to_lab(color_1)
|
11
|
+
color_2 = to_lab(color_2)
|
12
|
+
|
13
|
+
case weighting_type
|
14
|
+
when :graphic_arts
|
15
|
+
k_1 = 0.045
|
16
|
+
k_2 = 0.015
|
17
|
+
k_L = 1
|
18
|
+
when :textiles
|
19
|
+
k_1 = 0.048
|
20
|
+
k_2 = 0.014
|
21
|
+
k_L = 2
|
22
|
+
else
|
23
|
+
raise ArgumentError, "Unsupported weighting type #{weighting_type}."
|
24
|
+
end
|
25
|
+
|
26
|
+
k_C = k_H = 1
|
27
|
+
|
28
|
+
l_1, a_1, b_1 = color_1.values_at(:L, :a, :b)
|
29
|
+
l_2, a_2, b_2 = color_2.values_at(:L, :a, :b)
|
30
|
+
|
31
|
+
delta_a = a_1 - a_2
|
32
|
+
delta_b = b_1 - b_2
|
33
|
+
|
34
|
+
c_1 = Math.sqrt((a_1 ** 2) + (b_1 ** 2))
|
35
|
+
c_2 = Math.sqrt((a_2 ** 2) + (b_2 ** 2))
|
36
|
+
|
37
|
+
delta_L = color_1[:L] - color_2[:L]
|
38
|
+
delta_C = c_1 - c_2
|
39
|
+
|
40
|
+
delta_H2 = (delta_a ** 2) + (delta_b ** 2) - (delta_C ** 2)
|
41
|
+
|
42
|
+
s_L = 1
|
43
|
+
s_C = 1 + k_1 * c_1
|
44
|
+
s_H = 1 + k_2 * c_1
|
45
|
+
|
46
|
+
composite_L = (delta_L / (k_L * s_L)) ** 2
|
47
|
+
composite_C = (delta_C / (k_C * s_C)) ** 2
|
48
|
+
composite_H = delta_H2 / ((k_H * s_H) ** 2)
|
49
|
+
|
50
|
+
Math.sqrt(composite_L + composite_C + composite_H)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def to_xyz(color, color_space = :sRGB)
|
56
|
+
r, g, b = [ color.red, color.green, color.blue ].map { |v|
|
57
|
+
if (v > 0.04045)
|
58
|
+
(((v + 0.055) / 1.055) ** 2.4) * 100
|
59
|
+
else
|
60
|
+
(v / 12.92) * 100
|
61
|
+
end
|
62
|
+
}
|
63
|
+
|
64
|
+
# Convert using the RGB/XYZ matrix at:
|
65
|
+
# http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html#WSMatrices
|
66
|
+
{
|
67
|
+
:x => (r * 0.4124564 + g * 0.3575761 + b * 0.1804375),
|
68
|
+
:y => (r * 0.2126729 + g * 0.7151522 + b * 0.0721750),
|
69
|
+
:z => (r * 0.0193339 + g * 0.1191920 + b * 0.9503041)
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
def to_lab(color, color_space = :sRGB, reference_white = [ 95.047, 100.00, 108.883 ])
|
74
|
+
xyz = to_xyz color
|
75
|
+
|
76
|
+
xr = xyz[:x] / reference_white[0]
|
77
|
+
yr = xyz[:y] / reference_white[1]
|
78
|
+
zr = xyz[:z] / reference_white[2]
|
79
|
+
|
80
|
+
epsilon = (216 / 24389.0)
|
81
|
+
kappa = (24389 / 27.0)
|
82
|
+
|
83
|
+
fx, fy, fz = [ xr, yr, zr ].map do |t|
|
84
|
+
if (t > (epsilon))
|
85
|
+
t ** (1.0 / 3)
|
86
|
+
else # t <= epsilon
|
87
|
+
((kappa * t) + 16) / 116.0
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
{
|
92
|
+
:L => ((116 * fy) - 16),
|
93
|
+
:a => (500 * (fx - fy)),
|
94
|
+
:b => (200 * (fy - fz))
|
95
|
+
}
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scorched_earth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.4.pre
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- James Moriarty
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- lib/scorched_earth/helpers.rb
|
114
114
|
- lib/scorched_earth/mouse.rb
|
115
115
|
- lib/scorched_earth/player.rb
|
116
|
+
- lib/scorched_earth/services/cie94.rb
|
116
117
|
- lib/scorched_earth/shot.rb
|
117
118
|
- lib/scorched_earth/terrain.rb
|
118
119
|
- lib/scorched_earth/version.rb
|