Viewing file: pie.php (2.39 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);
?>
|