Array ( [0] => 0 [1] => 1 [2] => 1 )
Array ( [0] => 255 [1] => 0 [2] => 1 )
// r,g,b values are from 0 to 1
// h = [0,360], s = [0,1], v = [0,1]
//		if s == 0, then h = -1 (undefined)
function RGBtoHSV($r,$g,$b)
{	
	//make it use rgb=[0,255]
	$r/=255;
	$g/=255;
	$b/=255;
	
	$v = max($r,$g,$b);
	$delta = $v - min($r,$g,$b);
	if($v==0)
	{
		//black
		// r = g = b = 0
		// s = 0, v is undefined
		$s = 0;
		$h = -1;
	}
	elseif($delta==0)
 	{
		//grey
		// r = g = b
		// s = 0 
		$s = 0;
		$h = -1;
	}
	else
	{
		//color
		$s = $delta / $v;		// s
		if( $r == $v ) $h = ( $g - $b ) / $delta;		// between yellow & magenta
		else if( $g == $v ) $h = 2 + ( $b - $r ) / $delta;	// between cyan & yellow
		else $h = 4 + ( $r - $g ) / $delta;	// between magenta & cyan
		$h *= 60;				// degrees
		if( $h < 0 ) $h += 360;
	}
	return array($h,$s,$v);
};

function HSVtoRGB($h,$s,$v)
{
	$i=0;$f=0;$p=0;$q=0;$t=0;
	if( $s == 0 ) {
		// achromatic (grey)
		$r = $g = $b = $v;
	}
	else
	{
		$h /= 60;			// sector 0 to 5
		$i = floor($h);
		$f = $h - $i;			// factorial part of h
		$p = $v * ( 1 - $s );
		$q = $v * ( 1 - $s * $f );
		$t = $v * ( 1 - $s * ( 1 - $f ) );
		switch($i) {
			case 0:
				$r = $v;
				$g = $t;
				$b = $p;
				break;
			case 1:
				$r = $q;
				$g = $v;
				$b = $p;
				break;
			case 2:
				$r = $p;
				$g = $v;
				$b = $t;
				break;
			case 3:
				$r = $p;
				$g = $q;
				$b = $v;
				break;
			case 4:
				$r = $t;
				$g = $p;
				$b = $v;
				break;
			default:		// case 5:
				$r = $v;
				$g = $p;
				$b = $q;
				break;
		}
	}
	//for rgb=[0,1]
	//return array($r,$g,$b);
	//for rgb=[0,255]
	//return array($r*255,$g*255,$b*255);
	//we might want some sort of rounding, so
	return array(round($r*255),round($g*255),round($b*255));
}