#!/usr/local/bin/perl # 2005/01/08 Ver. 1.1 (バグがあったってことです。まだあるかもよ…) # 2005/01/13 Ver. 1.2 (ピクセルだし、と思い小数部分をカットしていたことが思わぬドツボに) # 2005/01/14 Ver. 1.3 (0件のデータが入るととんでもない表示になるバグに対応。力技) $buffer = $ENV{'QUERY_STRING'}; if (( $buffer eq "")||($buffer =~ /[^0-9,]/)){ &error; } ## default $pi = 3.141592654; #2005/01/08 桁数を増やす(50%,50%の場合の不具合対策) $piover180 = $pi/180; # 円の中心座標 $cx = "200"; $cy = "200"; # 半径 $r = "180"; # シフト量 $lx = $cx - $r; $ly = $cy - $r; $f1 = 0; @vals = split(/\,/, $buffer); @colors = ('#ff0000','#00ff00','#0000ff','#ff00ff','#00ffff','#ffff00'); print "Content-type: image/svg-xml\n\n"; print <<"_HTML_"; _HTML_ $count = 0; $total = 0; $sang = 0; $enflag = 0; foreach (@vals) { $total = $total + $_; if ($_ > 0) { $enflag++; $hit_count = $count; #円の描画色のために覚えとく。エレガントじゃないね…。 } elsif ($_ < 0) { &error; } $count++; } # 100% 時の処理を追加。pathで円を描くのは無理? if ($enflag == 1) { print <<"_HTML_"; _HTML_ } else { $count = 0; foreach (@vals) { if ($count+1 == @vals) { $eang = 360; } else { $eang = $sang + ($_ / $total * 360); # 2005/01/13 int を外す } $sx = sprintf("%.2f", $r - ($r * cos((90 + $sang) * $piover180)) + $lx); # 2005/01/13 $sy = sprintf("%.2f", $r - ($r * sin((90 + $sang) * $piover180)) + $ly); # 小数2桁までに変更 $ex = sprintf("%.2f", $r - ($r * cos((90 + $eang) * $piover180)) + $lx); $ey = sprintf("%.2f", $r - ($r * sin((90 + $eang) * $piover180)) + $ly); if ($_ * 2 >= $total ) { $f1 = 1; } else { $f1 = 0; #2005/01/05 追加 } if (($_ != 0)&&($_ ne '')) { # 2005/01/14 追加 print <<"_HTML_"; _HTML_ } $sang = $eang; $count++ } } print "\n"; exit; sub error { print "Content-type: text/html\n\n"; print "エラー\n"; print "
\n"; print "

まじめにやって

\n"; print "
\n"; exit; }