- commit
- a84eabfda17d05042aba8eee37d13839029020c9
- parent
- 58402d3779c4589f1afe7e9d16da710edd30b7e3
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2019-11-15 08:32
fix scoring
Diffstat
| M | wal/scheme.py | 33 | +++++++++++++++++++-------------- |
1 files changed, 19 insertions, 14 deletions
diff --git a/wal/scheme.py b/wal/scheme.py
@@ -16,6 +16,7 @@ L_LIGHT = 20, 60, 70, 80, 60, 60, 75, 100 16 16 # hue for red reference color 17 17 OFFSET = math.pi * 2 / 15 18 18 -1 19 ORDER = [0, 2, 1, 4, 5, 3] 19 20 20 21 def permutate(a, n): 21 22 if n == 0: @@ -26,21 +27,26 @@ def permutate(a, n): 26 27 yield (a[i], *rest) 27 28 28 2929 -1 def distance(color, i):30 -1 hue = math.pi / 3 * i + OFFSET31 -1 d = abs(color[2] - hue)32 -1 c = color[1]33 -1 if i in [0, 1]:34 -1 c = max(c, C_RG)35 -1 if d > math.pi:36 -1 d = 2 * math.pi - d37 -1 return d ** 4 * c-1 30 def score(colors): -1 31 sum_score = 0 -1 32 sum_chroma = 0 38 33 -1 34 for i, color in enumerate(colors): -1 35 j = ORDER[i] 39 3640 -1 def score(colors):41 -1 s = sum(distance(c, i) for i, c in enumerate(colors))42 -1 s /= sum(c[1] for c in colors)43 -1 return s-1 37 hue = math.pi / 3 * j + OFFSET -1 38 d = abs(color[2] - hue) -1 39 if d > math.pi: -1 40 d = 2 * math.pi - d -1 41 -1 42 c = color[1] -1 43 if j in [0, 1]: -1 44 c = max(c, C_RG) -1 45 -1 46 sum_score += d ** 4 * c -1 47 sum_chroma += c -1 48 -1 49 return sum_score / sum_chroma 44 50 45 51 46 52 def scheme(colors, dominant): @@ -67,5 +73,4 @@ def colors2scheme(colors): 67 73 colors = [lch.from_hex(c) for c in colors] 68 74 dominant = colors[0] 69 75 colors = min(permutate(colors, 6), key=score)70 -1 colors = [colors[i] for i in [0, 2, 1, 4, 5, 3]]71 76 return [lch.to_hex(c) for c in scheme(colors, dominant)]