search for in the

 Last updated: Fri, 24 May 2013

# imagepolygon

(PHP 4, PHP 5)

imagepolygonDraws a polygon

### Descrierea

bool imagepolygon ( resource \$image , array \$points , int \$num_points , int \$color )

imagepolygon() creates a polygon in the given image.

### Parametri

image

O resursă - imagine, întoarsă de una din funcțiile de creare a imaginilor, cum ar fi imagecreatetruecolor().

points

An array containing the polygon's vertices, e.g.:

 points[0] = x0 points[1] = y0 points[2] = x1 points[3] = y1

num_points

Total number of points (vertices).

color

A color identifier created with imagecolorallocate().

### Valorile întoarse

Întoarce valoarea TRUE în cazul succesului sau FALSE în cazul eșecului.

### Exemple

Example #1 imagepolygon() example

<?php
// Create a blank image
\$image imagecreatetruecolor(400300);

// Allocate a color for the polygon
\$col_poly imagecolorallocate(\$image255255255);

// Draw the polygon
imagepolygon(\$image, array(

0,   0,

100200,

300200

),

3,

\$col_poly);

// Output the picture to the browser

imagepng(\$image);
imagedestroy(\$image);
?>

Exemplul de mai sus va afișa ceva similar cu:

### Vedeți de asemenea

 Last updated: Fri, 24 May 2013

User Contributed Notes imagepolygon - [5 notes]
licson0729 at gmail dot com
1 year ago
Function to draw a n-sided regular polygon

<?php
\$img
= imagecreatetruecolor(1360,768);

function
{

\$points = array();
for(
\$a = 0;\$a <= 360; \$a += 360/\$sides)
{

}
return
imagepolygon(\$img,\$points,\$sides,\$color);
}

regularPolygon(\$img,1360/2,768/2,300,8,0xffffff);//Test draw

imagepng(\$img);
imagedestroy(\$img);
?>
licson0729 at gmail dot com
1 year ago
Here's a function to draw a n-sided star:

<?php
{

\$point =array();

\$t = 0;
for(
\$a = 0;\$a <= 360;\$a += 360/(\$sides*2))
{

\$t++;
if(
\$t % 2 == 0)
{

}else{

}
}
return
imagepolygon(\$img,\$point,\$sides*2,\$color);
}
?>
tatlar at yahoo dot com
6 years ago
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' ) ;
?>
glowell at flash dot net
7 years ago
Something to be aware of, ImagePolygon appears to convert the array of points passed to it from whatever format they may have been in originally into integers. This means if you pass it an array of floats (after running a rotation routine for example) the floats will be changed to integers INSIDE THE ORIGINAL ARRAY.

An extreme example: if for some reason you had an unit-sized polygon pt-array ( -1<x|y<1 for easy scaling purpose for instance) and for some reason your code calls imagepolygon on it (why? it'd only be a dot anyway) the array would be unusable after that (all either 1s, 0s or -1s). Scaling a unit-sized array, drawing it and then scaling it again will also may have a different result than expected.

Obviously, if the array in its original state is important to your code, it should use a copy of the original array for this call. If your code draws the same polygon multiple times but resizes it for different cases, you should have each size be created off an original template rather than adjusting a single polygon array.
jsnell at networkninja dot com
12 years ago
Here are some handy routines for rotation and translation of polygons.  Scaling could be added easily as well.

<?php
{

\$angle = (\$angle / 180) * M_PI;
/* math:
[x2,y2] = [x,  *  [[cos(a),-sin(a)],
y]      [sin(a),cos(a)]]
==>
x = x * cos(a) + y*sin(a)
y = x*-sin(a) + y*cos(a)
*/

\$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
{

\$translated_poly = Array();
while(
count(\$point_array) > 1)
{

\$temp_x = array_shift(\$point_array);

\$temp_y = array_shift(\$point_array);