Saya selalu ingin mempublikasikan sesuatu. Saya baru saja menyelesaikan php_gd.dll di php4, dan saya tidak sabar untuk membuat beberapa program grafis untuk dimainkan. Saya melihat banyak contoh pembuatan diagram lingkaran di PHP, dan setelah dilihat semuanya 2 dimensi, jadi saya ingin membuat yang 3 dimensi. Setelah kerja keras, pie3d selesai, dan hal-hal bagus dibagikan kepada semua orang. Namun, saya baru mengenal PHP dan kodenya mungkin belum cukup disempurnakan. Saya harap semua orang dapat memberi saya saran dan bekerja sama untuk meningkatkan program ini. Ingatlah untuk memberi tahu saya ( [email protected] )
+------------------------+
|.pie3dfun.php//Fungsi publik|
+---------+
mendefinisikan("ANGLE_STEP",5);//Menentukan langkah sudut saat menggambar busur elips
function chx_getdarkcolor($img,$clr){//Temukan warna gelap yang sesuai dengan $clr
$rgb=warna gambaruntuk indeks($img,$clr);
return array($rgb["merah"]/2,$rgb["hijau"]/2,$rgb["biru"]/2);
}
function chx_getexy($a,$b,$d){//Cari koordinat titik pada elips yang bersesuaian dengan sudut $d
$d=deg2rad($d);
kembali array(bulat($a*Cos($d)),bulat($b*Dosa($d)));
}
function chx_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr){//Fungsi busur elips
$n=ceil(($ed-$sd)/ANGLE_STEP);
$d=$sd;
daftar($x0,$y0)=chx_getexy($a,$b,$d);
untuk($i=0;$i<$n;$i++){
$d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
daftar($x,$y)=chx_getexy($a,$b,$d);
imageline($img,$x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr);
$x0=$x;
$y0=$y;
}
}
function chx_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr){//Gambar sebuah sektor
$n=ceil(($ed-$sd)/ANGLE_STEP);
$d=$sd;
daftar($x0,$y0)=chx_getexy($a,$b,$d);
imageline($img,$x0+$ox,$y0+$oy,$ox,$oy,$clr);
untuk($i=0;$i<$n;$i++){
$d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
daftar($x,$y)=chx_getexy($a,$b,$d);
imageline($img,$x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr);
$x0=$x;
$y0=$y;
}
imageline($img,$x0+$ox,$y0+$oy,$ox,$oy,$clr);
daftar($x,$y)=chx_getexy($a/2,$b/2,($d+$sd)/2);
isi gambar($img,$x+$ox,$y+$oy,$clr);
}
fungsi chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clr){//sektor 3d
chx_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr);
jika($sd<180){
daftar($R,$G,$B)=chx_getdarkcolor($img,$clr);
$clr=alokasiwarnagambar($img,$R,$G,$B);
jika($ed>180) $ed=180;
daftar($sx,$sy)=chx_getexy($a,$b,$sd);
$sx+=$sapi;
$sy+=$oy;
daftar($ex,$ey)=chx_getexy($a,$b,$ed);
$ex+=$ox;
$ey+=$oy;
imageline($img,$sx,$sy,$sx,$sy+$v,$clr);
imageline($img,$ex,$ey,$ex,$ey+$v,$clr);
chx_arc($img,$ox,$oy+$v,$a,$b,$sd,$ed,$clr);
daftar($sx,$sy)=chx_getexy($a,$b,($sd+$ed)/2);
$sy+=$oy+$v/2;
$sx+=$sapi;
isi gambar($img,$sx,$sy,$clr);
}
}
fungsi chx_getindexcolor($img,$clr){//RBG untuk mengindeks warna
$R=($clr>>16) & 0xff;
$G=($clr>>8)& 0xff;
$B=($clr) & 0xff;
return imagecolorallocation($img,$R,$G,$B);
}
?>
+--------------------------+
|.pie3d.php //File diagram lingkaran tiga dimensi |
+-----------+
require("pie3dfun.php");
$a=150;//sumbu semi utama Ellipse
$b=50;//sumbu semi-sumbu elips
$v=20;//tinggi kue bulat
$font=5;//Font
$ox=5+$a;
$oy=5+$b;
$fw=lebar font gambar($font);
$fh=gambarfonttinggi($font);
$datLst=array(30,10,20,20,10,20,10,20);//data
$labLst=array("a1","a2","a3","a4","a5","a6","a7","a8");//label
$clrLst=array(0x99ff00,0xff6666,0x0099ff,0xff99ff,0xffff99,0x99ffff,0xff3333,0x009999);
$w=10+$a*2;
$h=10+$b*2+$v+($fh+2)*count($datLst);
$img=imagecreate($w,$h);
//Konversi RGB ke warna indeks
untuk($i=0;$i
$clrbk=alokasiwarnagambar($img,0xff,0xff,0xff);
$clrt=alokasiwarnagambar($img,0x00,0x00,0x00);
//isi warna latar belakang
isi gambar($img,0,0,$clrbk);
//Jumlah
$tot=0;
untuk($i=0;$i
$sd=0;
$ed=0;
$ly=10+$b*2+$v;
untuk($i=0;$i $sd=$ed;
$ed+=$datLst[$i]/$tot*360;
//Gambarlah kue bundar
chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clrLst[$i]);//$sd,$ed,$clrLst[$i]);
//Gambar label
imagefilledrectangle($img,5,$ly,5+$fw,$ly+$fh,$clrLst[$i]);
imagerectangle($img,5,$ly,5+$fw,$ly+$fh,$clrt);
string gambar($img,$font,5+2*$fw,$ly,
$labLst[$i].":".$datLst[$i]."(".(bulat(10000*($datLst[$i]/$tot))/100).."%)",
$clrt);
$ly+=$fh+2;
}
//grafik keluaran
header("Jenis Konten:gambar/gif");
gambargif($img);
?>