©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5, PHP 7)
imagepolygon — 画一个多边形
$image
, array $points
, int $num_points
, int $color
) imagepolygon() 在图像中创建一个多边形。points
是一个 PHP 数组,包含了多边形的各个顶点坐标,即 points[0]
= x0,points[1] = y0,points[2]
= x1,points[3] = y1,以此类推。num_points
是顶点的总数。
Example #1 imagepolygon() 例子
<?php
// create a blank image
$image = imagecreatetruecolor ( 400 , 300 );
// fill the background color
$bg = imagecolorallocate ( $image , 0 , 0 , 0 );
// choose a color for the polygon
$col_poly = imagecolorallocate ( $image , 255 , 255 , 255 );
// draw the polygon
imagepolygon ( $image ,
array (
0 , 0 ,
100 , 200 ,
300 , 200
),
3 ,
$col_poly );
// output the picture
header ( "Content-type: image/png" );
imagepng ( $image );
?>
参见 imagecreate() 和 imagecreatetruecolor() 。
[#1] licson0729 at gmail dot com [2012-05-23 11:21:34]
Here's a function to draw a n-sided star:
<?php
function drawStar($img,$x,$y,$radius,$sides,$color,$spikness=0.5)
{
$point =array();
$t = 0;
for($a = 0;$a <= 360;$a += 360/($sides*2))
{
$t++;
if($t % 2 == 0)
{
$point[] = $x + ($radius * $spikness) * cos(deg2rad($a));
$point[] = $y + ($radius * $spikness) * sin(deg2rad($a));
}else{
$point[] = $x + $radius * cos(deg2rad($a));
$point[] = $y + $radius * sin(deg2rad($a));
}
}
return imagepolygon($img,$point,$sides*2,$color);
}
?>
[#2] licson0729 at gmail dot com [2012-05-21 10:39:47]
Function to draw a n-sided regular polygon
<?php
$img = imagecreatetruecolor(1360,768);
function regularPolygon($img,$x,$y,$radius,$sides,$color)
{
$points = array();
for($a = 0;$a <= 360; $a += 360/$sides)
{
$points[] = $x + $radius * cos(deg2rad($a));
$points[] = $y + $radius * sin(deg2rad($a));
}
return imagepolygon($img,$points,$sides,$color);
}
regularPolygon($img,1360/2,768/2,300,8,0xffffff);//Test draw
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
?>
[#3] tatlar at yahoo dot com [2006-09-11 16:48:08]
Function to get 5-sided polygon (pentagon) or star (pentagram) co-ords.
<?php
function _makeFiveSidedStar( $x, $y, $radius, $shape='polygon', $spiky=NULL ) {
$point = array() ; // new array
$angle = 360 / 5 ;
$point[0]['x'] = $x ;
$point[0]['y'] = $y - $radius ;
$point[2]['x'] = $x + ( $radius * cos( deg2rad( 90 - $angle ) ) ) ;
$point[2]['y'] = $y - ( $radius * sin( deg2rad( 90 - $angle ) ) ) ;
$point[4]['x'] = $x + ( $radius * sin( deg2rad( 180 - ( $angle*2 ) ) ) ) ;
$point[4]['y'] = $y + ( $radius * cos( deg2rad( 180 - ( $angle*2 ) ) ) ) ;
$point[6]['x'] = $x - ( $radius * sin( deg2rad( 180 - ( $angle*2 ) ) ) ) ;
$point[6]['y'] = $y + ( $radius * cos( deg2rad( 180 - ( $angle*2 ) ) ) ) ;
$point[8]['x'] = $x - ( $radius * cos( deg2rad( 90 - $angle ) ) ) ;
$point[8]['y'] = $y - ( $radius * sin( deg2rad( 90 - $angle ) ) ) ;
if( $shape == 'star' ) {
if( $spiky == NULL ) $spiky = 0.5 ; // degree of spikiness, default to 0.5
$indent = $radius * $spiky ;
$point[1]['x'] = $x + ( $indent * cos( deg2rad( 90 - $angle/2 ) ) ) ;
$point[1]['y'] = $y - ( $indent * sin( deg2rad( 90 - $angle/2 ) ) ) ;
$point[3]['x'] = $x + ( $indent * sin( deg2rad( 180 - $angle ) ) ) ;
$point[3]['y'] = $y - ( $indent * cos( deg2rad( 180 - $angle ) ) ) ;
$point[5]['x'] = $x ;
$point[5]['y'] = $y + ( $indent * sin( deg2rad( 180 - $angle ) ) ) ;
$point[7]['x'] = $x - ( $indent * sin( deg2rad( 180 - $angle ) ) ) ;
$point[7]['y'] = $y - ( $indent * cos( deg2rad( 180 - $angle ) ) ) ;
$point[9]['x'] = $x - ( $indent * cos( deg2rad( 90 - $angle/2 ) ) ) ;
$point[9]['y'] = $y - ( $indent * sin( deg2rad( 90 - $angle/2 ) ) ) ;
}
ksort( $point ) ;
$coords = array() ; // new array
foreach( $point as $pKey=>$pVal ) {
if( is_array( $pVal ) ) {
foreach( $pVal as $pSubKey=>$pSubVal ) {
if( !empty( $pSubVal ) ) array_push( $coords, $pSubVal ) ;
}
}
}
return $coords ;
}
$values = _makeFiveSidedStar( 100, 100, 50, 'star' ) ;
?>
[#4] jsnell at networkninja dot com [2001-02-17 19:07:01]
Here are some handy routines for rotation and translation of polygons. Scaling could be added easily as well.
<?php
function translate_point(&$x,&$y,$angle,$about_x,$about_y,$shift_x,$shift_y)
{
$x -= $about_x;
$y -= $about_y;
$angle = ($angle / 180) * M_PI;
$new_x = $x * cos($angle) - $y * sin($angle);
$new_y = $x * sin($angle) + $y * cos($angle);
$x = $new_x+ $about_x + $shift_x ;
$y = $new_y + $about_y + $shift_y;
}
function translate_poly($point_array, $angle, $about_x, $about_y,$shift_x,$shift_y)
{
$translated_poly = Array();
while(count($point_array) > 1)
{
$temp_x = array_shift($point_array);
$temp_y = array_shift($point_array);
translate_point($temp_x, $temp_y, $angle, $about_x, $about_y,$shift_x, $shift_y);
array_push($translated_poly, $temp_x);
array_push($translated_poly, $temp_y);
}
return $translated_poly;
}
?>