لقد أردت دائمًا أن أنشر شيئًا ما. لقد انتهيت للتو من php_gd.dll في php4 مؤخرًا، ولا أستطيع الانتظار حتى أتمكن من إنشاء بعض برامج الرسومات لألعب بها. لقد رأيت العديد من الأمثلة على إنشاء مخططات دائرية في PHP، وبعد النظر إليها، كانت جميعها ثنائية الأبعاد، لذلك أردت إنشاء مخطط ثلاثي الأبعاد. بعد العمل الشاق، تم الانتهاء من لعبةpie3d، وتمت مشاركة الأشياء الجيدة مع الجميع. ومع ذلك، فأنا جديد على لغة PHP وربما لم يتم تحسين الكود بما فيه الكفاية، وآمل أن يقدم لي الجميع بعض النصائح وأن يعملوا معًا لتحسين هذا البرنامج. تذكر أن تبلغني ( [email protected] )
+----------------------------------------+
|.pie3dfun.php//الوظائف العامة|
+------------------------+
define("ANGLE_STEP",5);//حدد خطوة الزاوية عند رسم قوس بيضاوي
الدالة chx_getdarkcolor($img,$clr){// ابحث عن اللون الداكن المطابق لـ $clr
$rgb=imagecolorsforindex($img,$clr);
إرجاع المصفوفة($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2);
}
وظيفة chx_getexy($a,$b,$d){// ابحث عن إحداثيات النقطة على القطع الناقص المقابلة للزاوية $d
$d=deg2rad($d);
إرجاع المصفوفة(round($a*Cos($d)),round($b*Sin($d)));
}
وظيفة chx_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr){// دالة القوس الإهليلجي
$n=ceil(($ed-$sd)/ANGLE_STEP);
$د=$sd;
list($x0,$y0)=chx_getexy($a,$b,$d);
for($i=0;$i<$n;$i++){
$d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($x,$y)=chx_getexy($a,$b,$d);
imageline($img,$x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr);
$x0=$x;
$y0=$y;
}
}
الدالة chx_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr){// ارسم قطاعًا
$n=ceil(($ed-$sd)/ANGLE_STEP);
$د=$sd;
list($x0,$y0)=chx_getexy($a,$b,$d);
imageline($img,$x0+$ox,$y0+$oy,$ox,$oy,$clr);
for($i=0;$i<$n;$i++){
$d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($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);
list($x,$y)=chx_getexy($a/2,$b/2,($d+$sd)/2);
imagefill($img,$x+$ox,$y+$oy,$clr);
}
وظيفة chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clr){// قطاع ثلاثي الأبعاد
chx_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr);
إذا($sd<180){
list($R,$G,$B)=chx_getdarkcolor($img,$clr);
$clr=imagecolorallocate($img,$R,$G,$B);
إذا($ed>180) $ed=180;
list($sx,$sy)=chx_getexy($a,$b,$sd);
$sx+=$ox;
$sy+=$oy;
list($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);
list($sx,$sy)=chx_getexy($a,$b,($sd+$ed)/2);
$sy+=$oy+$v/2;
$sx+=$ox;
ملء الصورة($img,$sx,$sy,$clr);
}
}
وظيفة chx_getindexcolor($img,$clr){// RBG لفهرسة اللون
$R=($clr>>16) & 0xff;
$G=($clr>>8)& 0xff;
$B=($clr) & 0xff;
إرجاع imagecolorallocate($img,$R,$G,$B);
}
?>
+-------------------------+
|.pie3d.php // ملف مخطط دائري ثلاثي الأبعاد |
+--------------------------+
require("pie3dfun.php");
$a=150;// شبه المحور الرئيسي للقطع الناقص
$b=50;// شبه محور القطع الناقص
$v=20;//ارتفاع الكعكة المستديرة
$font=5;//الخط
$ox=5+$a;
$oy=5+$b;
$fw=imagefontwidth($font);
$fh=imagefontheight($font);
$datLst=array(30,10,20,20,10,20,10,20);// البيانات
$labLst=array("a1"، "a2"، "a3"، "a4"، "a5"، "a6"، "a7"، "a8")؛//التسمية
$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);
// تحويل RGB إلى لون الفهرس
ل($i=0;$i
$clrbk=imagecolorallocate($img,0xff,0xff,0xff);
$clrt=imagecolorallocate($img,0x00,0x00,0x00);
// ملء لون الخلفية
ملء الصورة($img,0,0,$clrbk);
//مجموع
$توت=0;
ل($i=0;$i
$sd=0;
$ed=0;
$ly=10+$b*2+$v;
for($i=0;$i $sd=$ed;
$ed+=$datLst[$i]/$tot*360;
// ارسم كعكة مستديرة
chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clrLst[$i]);//$sd,$ed,$clrLst[$i]);
// ارسم الملصقات
imagefilledrectangle($img,5,$ly,5+$fw,$ly+$fh,$clrLst[$i]);
imagerectangle($img,5,$ly,5+$fw,$ly+$fh,$clrt);
سلسلة الصور($img,$font,5+2*$fw,$ly,
$labLst[$i].://.$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)"،
$clrt);
$ly+=$fh+2;
}
// رسومات الإخراج
header("نوع المحتوى:صورة/gif");
imagegif
($img);