Warning, /Utilities/ReleaseScripts/ignominy/graysearch is written in an unsupported language. File is not indexed.
0001 #!/usr/bin/env perl
0002 use warnings;
0003
0004 sub min {
0005 my $min = shift;
0006 foreach my $val (@_) {
0007 $min = $min > $val ? $val : $min;
0008 }
0009 return $min;
0010 }
0011
0012 sub max {
0013 my $max = shift;
0014 foreach my $val (@_) {
0015 $max = $max > $val ? $max : $val;
0016 }
0017 return $max;
0018 }
0019
0020 sub rgb2hsv {
0021 my ($r, $g, $b) = @_;
0022 my ($h, $s, $v);
0023 my $max = &max($r, $g, $b);
0024 my $min = &min($r, $g, $b);
0025
0026 $v = $max;
0027 $s = ($max ? ($max - $min)/$max : 0.0);
0028 if (! $s) {
0029 $h = 0;
0030 } else {
0031 my $d = $max - $min;
0032 if ($r == $max) {
0033 $h = 0. + ($g - $b)/$d;
0034 } elsif ($g == $max) {
0035 $h = 2. + ($b - $r)/$d;
0036 } elsif ($b == $max) {
0037 $h = 4. + ($r - $g)/$d;
0038 }
0039 $h /= 6.;
0040 $h += 1. if ($h < 0.);
0041 }
0042
0043 $h = int($h * 1000 + .5)/1000;
0044 $s = int($s * 1000 + .5)/1000;
0045 $v = int($v * 1000 + .5)/1000;
0046
0047 return ($h, $s, $v);
0048 }
0049
0050 sub rgb2yiq {
0051 my ($r, $g, $b) = @_;
0052 return (.299 * $r + .587 * $g + .115 * $b,
0053 .596 * $r - .275 * $g - .321 * $b,
0054 .212 * $r - .523 * $g + .311 * $b);
0055 }
0056
0057 sub hsv2rgb {
0058 my ($h, $s, $v) = @_;
0059 if ($s eq 0.) {
0060 # die "bad HSV H value: $h -- should be 0\n" if $h;
0061 return ($v, $v, $v);
0062 } else {
0063 $h = 0. if $h eq 1.;
0064 $h *= 6.;
0065 my $i = int($h);
0066 my $f = $h - $i;
0067 my $p = $v * (1. - $s);
0068 my $q = $v * (1. - $s * $f);
0069 my $t = $v * (1. - $s * (1. - $f));
0070
0071 return ($v, $t, $p) if $i == 0;
0072 return ($q, $v, $p) if $i == 1;
0073 return ($p, $v, $t) if $i == 2;
0074 return ($p, $q, $v) if $i == 3;
0075 return ($t, $p, $v) if $i == 4;
0076 return ($v, $p, $q) if $i == 5;
0077 die;
0078 }
0079 }
0080
0081 my $step = .1;
0082 my %yvals;
0083 for (my $h = 0.; $h <= 1.; $h += $step) {
0084 for (my $s = 0.; $s <= 1.; $s += $step) {
0085 for (my $v = 0.; $v < 1.; $v += $step) {
0086 my $y = int(10 * (&rgb2yiq(&hsv2rgb($h, $s, $v)))[0] + .5);
0087 $yvals{$y} ||= [];
0088 push(@{$yvals{$y}}, [ $h, $s, $v ]);
0089 }
0090 }
0091 }
0092
0093 foreach my $val (sort { $a <=> $b } keys %yvals) {
0094 print "$val:\n", map { " HSV: " . join("/", @{$_}) . "\n" } @{$yvals{$val}};
0095 }
0096
0097