#!/usr/bin/perl -w
use strict;
my $pi = 2 * atan2(1, 0);
for (0..255) {
# limit from blue to red
my $n = (255 - $_) * 2 / 3;
# phase adjust
my $r = ($n + 255 * 1 / 3) % 256;
my $g = ($n + 255 * 0 / 3) % 256;
my $b = ($n + 255 * 2 / 3) % 256;
# convert to sinusoid
$r = $r <= 256 * 2 / 3 ? (1 - cos(3 * $pi * $r / 256)) / 2 : 0;
$g = $g <= 256 * 2 / 3 ? (1 - cos(3 * $pi * $g / 256)) / 2 : 0;
$b = $b <= 256 * 2 / 3 ? (1 - cos(3 * $pi * $b / 256)) / 2 : 0;
# convert float to char
$r = int($r * 256);
$g = int($g * 256);
$b = int($b * 256);
printf "%03d %03d %03d\n", $r, $g, $b;
}