Viewing file: pie.php (2.33 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php header("Content-type: image/png"); $img = ImageCreate(300, 300); //สร้างรูปขนาด 300x300 ImageColorAllocate($img, 255, 255, 255); //กำหนดพื้นรูปเป็นสีขาว
$degrees = array(); //สร้างตัวแปร $degrees เป็นอาร์เรย์ว่างไว้ก่อน $diameter = 200; //กำหนดขนาดเส้นผ่านศูนย์กลางของแผนภูมิวงกลม $radius = $diameter / 2; //เก็บขนาดรัศมีของวงกลมไว้ในตัวแปร $radius $sum = array_sum($data); //หาผลรวมของข้อมูลทั้งหมด
for ($i=1; $i<=3; $i++) { //คำนวณขนาดของมุมตามค่าของข้อมูล โดยเก็บไว้ในตัวแปรชนิดอาร์เรย์ชื่อ $degrees $degrees[$i] = ($data[$i] / $sum) * 360; } $red = ImageColorAllocate($img, 255, 0, 0); $blue = ImageColorAllocate($img, 0, 0, 255); $green = ImageColorAllocate($img, 0, 150, 0); $yellow = ImageColorAllocate($img, 255, 255, 0); $black = ImageColorAllocate($img, 0, 0, 0); $white = ImageColorAllocate($img, 255, 255, 255);
//เก็บค่าสีไว้ในอาร์เรย์ เพื่อความสะดวกตอนเทสีลงไปในแต่ละเซคเตอร์ของแผนภูมิ $arrColor = array($red, $blue, $green, $yellow, $black); $last_angle = 0; //กำหนดมุมที่จะเริ่มวาดเซคเตอร์
//วาดเซคเตอร์ (sector) ของแต่ละข้อมูลในแผนภูมิวงกลม for ($i=1; $i<=5; $i++) { //วาดส่วนโค้ง ImageArc($img, 150, 150, $diameter, $diameter, $last_angle, ($last_angle + $degrees[$i]), $black); //กำหนดค่ามุมของเซคเตอร์ที่จะถูกวาดในรอบถัดไป $last_angle += $degrees[$i]; /* คำนวณหาพิกัด (x, y) ตรงส่วนปลายของเส้นโค้ง เพื่อจะได้ใช้ฟังก์ชั่น ImageLine() ลากเส้นไปหาได้ถูกต้อง */ $end_x = round(150 + ($radius * cos($last_angle * pi() / 180))); $end_y = round(150 + ($radius * sin($last_angle * pi() / 180))); //ลากเส้นจากจุดศูนย์กลางของวงกลมไปยังปลายส่วนโค้ง ImageLine($img, 150, 150, $end_x, $end_y, $black); }
$prev_angle = 0; $pointer = 0; for ($i=1; $i<=5; $i++) { $pointer = $prev_angle + $degrees[$i]; $this_angle = ($prev_angle + $pointer) / 2; $prev_angle = $pointer; //คำนวณหาพิกัด (x, y) ตรงส่วนปลายของเส้นโค้ง $end_x = round(150 + ($radius * cos($this_angle * pi() / 180))); $end_y = round(150 + ($radius * sin($this_angle * pi() / 180))); //คำนวณหาพิกัด (x, y) ของจุดที่อยู่กึ่งกลางเซคเตอร์ เพื่อใช้ฟังก์ชั่น ImageFill() เทสีลงไป $mid_x = round((150 + ($end_x)) / 2); $mid_y = round((150 + ($end_y)) / 2); //เทสีลงไปที่พิกัด ($mid_x, $mid_y) ซึ่งเป็นจุดกึ่งกลางของแต่ละเซคเตอร์ ImageFill($img, $mid_x, $mid_y, $arrColor[$i - 1]); }
ImagePNG($img); ImageDestroy($img); ?>
|