綺麗に色相環が実現できました。
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を下げていこうかな、と。
外に向かっても少しずつ下げていくと綺麗かな。。