#!/usr/bin/perl
$shift = rand(360);
print << "_END_";
Content-type:text/html
リロードすると色変わります
_END_
for($i = 0; $i < 360; $i+=120){
print "\n";
for($j = $i; $j < $i+120; $j+=40){
my $color = hsv2str($shift + $j, 0.4, 0.5);
my $bg_color = hsv2str($shift + $j+200, 0.3, 1);
print << "_END_";
$j
$color
$bg_color
|
_END_
}
print "
\n";
}
print << "_END_";
_END_
for($i = 0; $i < 360; $i+=120){
print "\n";
for($j = $i; $j < $i+120; $j+=40){
my $color = hsv2str($shift + $j, 0.8, 0.5);
print << "_END_";
$j
$color
|
_END_
}
print "
\n";
}
print << "_END_";
_END_
sub myLimit {
my($v, $l, $u) = @_;
return $l if ($v < $l);
return $u if ($v > $u);
return $v;
}
sub myLimitRotate {
my($v, $r) = @_;
$v += $r while($v < 0);
$v -= $r while($v >= $r);
return $v;
}
sub hsv2str{
my($h, $s, $v) = @_;
my($r, $g, $b);
$s = myLimit($s, 0, 1);
$v = myLimit($v, 0, 1);
$h = myLimitRotate($h, 360) / 60;
$hi = int($h);
$hf = $h - $hi;
my $p1 = $v * (1 - $s);
my $p2 = $v * (1 - $s * $hf);
my $p3 = $v * (1 - (1 - $hf) * $s);
if($hi == 0) { $r = $v; $g = $p3; $b = $p1; }
elsif($hi == 1) { $r = $p2; $g = $v; $b = $p1; }
elsif($hi == 2) { $r = $p1; $g = $v; $b = $p3; }
elsif($hi == 3) { $r = $p1; $g = $p2; $b = $v; }
elsif($hi == 4) { $r = $p3; $g = $p1; $b = $v; }
elsif($hi == 5) { $r = $v; $g = $p1; $b = $p2; }
return sprintf('#%02X%02X%02X', $r*0xff, $g*0xff, $b*0xff);
}