綺麗に色相環が実現できました。
imagefilledarcとimagefilledellipseの両方を使って実現。
ありがたや。。。
<?php
$img = imagecreatetruecolor(400, 400);
$bg=imagecolorallocate($img,0,0,0);
$r2=150;
$s=1;$v=1;
function toH($a){
$result=round((round($a,3)*255));
return $result;
}
for($h=0;$h<360;$h++){
$y0=$r2*(sin(deg2rad($h)));
$x0=$r2*(cos(deg2rad($h)));
$y=$y0+200;
$x=$x0+200;
$hi = ( $h / 60 ) % 6;
$f = ( $h / 60 ) - $hi;
$p = $v * ( 1 - $s );
$q = $v * ( 1 - $f * $s );
$t = $v * ( 1 - ( 1 - $f ) * $s );
if($hi == 0){$r = $v;$g = $t;$b = $p;}
elseif($hi == 1){$r = $q;$g = $v;$b = $p;}
elseif($hi == 2){$r = $p;$g = $v;$b = $t;}
elseif($hi == 3){$r = $p;$g = $q;$b = $v;}
elseif($hi == 4){$r = $t;$g = $p;$b = $v;}
elseif($hi == 5){$r = $v;$g = $p;$b = $q;}
//else{$r = $v;$g = $v;$b = $v;}
$col=imagecolorallocate($img,toH($r),toH($g),toH($b));
$col0=imagecolorallocate($img,0,0,0);
imagefilledarc($img,200,200,300,300,$h,$h+1,$col
,IMG_ARC_PIE);
imagefilledellipse($img,200,200,200,200,$col0);
}
header("Content-Type: image/png");
imagepng($img);
?>■今後の課題としては、色相環はできたので、
明度を下げてだんだん中心に向かってフェードさせる、
といったことを実現したいな、と。
IMG_ARC_NOFILLというstyle指定があって、淵だけが描かれるので、
それをつかって、中心に向かってだんだん明度Vを下げていこうかな、と。
外に向かっても少しずつ下げていくと綺麗かな。。







