colorutils 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +5 -5
  2. data/colorutils.gemspec +1 -1
  3. data/lib/colorutils.rb +37 -2
  4. metadata +8 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a745563ae321a3a4e15346c94f6aa63e0f772610
4
- data.tar.gz: 6ff7b154bd415dcff8293afa8c93122a50dec497
2
+ SHA256:
3
+ metadata.gz: a4a80f544dec16d50ec82817f011721048536de987a8fdfba16d9716fd3c2623
4
+ data.tar.gz: 3a853b32752214acb58a703fa325f6214bb9adf0da9bbf76780fb4bd7a977067
5
5
  SHA512:
6
- metadata.gz: b5ee994d08b5a1d340b9cbcd0a4b1eadf54717fb3082b48e7488caed2081a964880b88123952e2bacad7057089b4b139e7e62982752e891097c9c7efcd005f3f
7
- data.tar.gz: c7ba272f70030e462a2aa5faa97984ccef087f62354b3692abd33052cc45ed19a55f90efc821ab155518309c060329085f21ddd6a0d266946eee262a555daeb2
6
+ metadata.gz: 2d07d7f10e26ef66e7ba2f024c6d6f69eb76b857abb1a970660ffe824f9b4d7751e81fc304135178271b59beca3c4ce6a35efd42706feb8bcc3846cb50463306
7
+ data.tar.gz: bf652d64add7f4860c31e56874d753a9a0ae914d4ce908089f3774eca1617397c5778a35152a7d7dccd449a2ca37a9d3e9e609d28f950fc791a883021198ef66
data/colorutils.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "colorutils"
3
- spec.version = "0.0.0"
3
+ spec.version = "0.1.0"
4
4
  spec.summary = "Common methods to work with colors."
5
5
 
6
6
  spec.author = "Victor Maslov aka Nakilon"
data/lib/colorutils.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module ColorUtils
2
- def self.rgb2hsv r, g, b # [<256, <256, <256]
2
+
3
+ def self.rgb2hsv r, g, b
4
+ # in: [<256, <256, <256]
3
5
  # http://stackoverflow.com/q/41926874/322020
4
6
  r, g, b = [r, g, b].map{ |_| _.fdiv 255 }
5
7
  min, max = [r, g, b].minmax
@@ -15,8 +17,28 @@ module ColorUtils
15
17
  max,
16
18
  ] # [<=360, <=1, <=1]
17
19
  end
18
- def self.dist h1, s1, v1, h2, s2, v2 # [<256, <256, <256]
20
+ def self.hsv2rgb h, s, v
21
+ # in: [<360 (floor), <100, <100]
22
+ # out: [<256, <256, <256]
23
+ vmin = (100 - s) * v / 100
24
+ a = (v - vmin) * (h % 60) / 60.0
25
+ vinc = vmin + a
26
+ vdec = v - a
27
+ case h / 60
28
+ when 0 ; [v, vinc, vmin]
29
+ when 1 ; [vdec, v, vmin]
30
+ when 2 ; [vmin, v, vinc]
31
+ when 3 ; [vmin, vdec, v]
32
+ when 4 ; [vinc, vmin, v]
33
+ when 5 ; [v, vmin, vdec]
34
+ else ; fail "bad hue value: #{h}"
35
+ end.map{ |i| (2.55 * i).round }
36
+ end
37
+
38
+ def self.dist h1, s1, v1, h2, s2, v2
39
+ # in: [<256, <256, <256]
19
40
  # https://en.wikipedia.org/wiki/HSL_and_HSV#/media/File:Hsl-hsv_saturation-lightness_slices.svg
41
+ # optimized
20
42
  c1, c2 = s1 * v1 / 256.0, s2 * v2 / 256.0 # chroma
21
43
  z1, z2 = v1 * (2 - c1 / 256), v2 * (2 - c2 / 256)
22
44
  a = (((h2 - h1) * 360 / 256.0) % 360) / (180 / Math::PI)
@@ -24,4 +46,17 @@ module ColorUtils
24
46
  y1, y2 = c1, Math::cos(a) * c2
25
47
  x2*x2 + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2)
26
48
  end
49
+
50
+ def self.golden_hue
51
+ # https://en.wikipedia.org/wiki/Golden_angle
52
+ # https://www.wolframalpha.com/input?i=y%3Dax%5E4%2Bbx%5E3%2Bcx%5E2%2Bdx%2C+1%3Da%2Bb%2Bc%2Bd%2C+c%3D4a%2B3b%2B2c%2Bd%2C+1.2%3D4a%281%2F3%29%5E3%2B3b%281%2F3%29%5E2%2B2c%281%2F3%29%2Bd%2C+0.8%3D4a%282%2F3%29%5E3%2B3b%282%2F3%29%5E2%2B2c%282%2F3%29%2Bd%2C+a%3D%3F%2C+b%3D%3F%2C+c%3D%3F%2C+d%3D%3F
53
+ ::Enumerator.new do |e|
54
+ a = 0.0
55
+ loop do
56
+ t = a % 1
57
+ e << ::Math::PI * 2 * (t*t*t*t - t*t*t*2 + t*t*38/45 + t*52/45)
58
+ a += (3 - ::Math::sqrt(5)) / 2.0
59
+ end
60
+ end
61
+ end
27
62
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: colorutils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Maslov aka Nakilon
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-09 00:00:00.000000000 Z
11
+ date: 2026-04-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description:
13
+ description:
14
14
  email: nakilon@gmail.com
15
15
  executables: []
16
16
  extensions: []
@@ -19,12 +19,12 @@ files:
19
19
  - LICENSE
20
20
  - colorutils.gemspec
21
21
  - lib/colorutils.rb
22
- homepage:
22
+ homepage:
23
23
  licenses:
24
24
  - MIT
25
25
  metadata:
26
26
  source_code_uri: https://github.com/nakilon/colorutils
27
- post_install_message:
27
+ post_install_message:
28
28
  rdoc_options: []
29
29
  require_paths:
30
30
  - lib
@@ -39,9 +39,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  requirements: []
42
- rubyforge_project:
43
- rubygems_version: 2.5.2.3
44
- signing_key:
42
+ rubygems_version: 3.1.6
43
+ signing_key:
45
44
  specification_version: 4
46
45
  summary: Common methods to work with colors.
47
46
  test_files: []