DOCSTART; if (!extension_loaded(\'gd\')) { print (\'La extensión GD no está disponible.\'); $die = ob_get_contents(); ob_clean(); die ($die . \'\\n\\n\'); } $colores = array ( array(0x00, 0x00, 0x00), // 0: negro array(0xdd, 0xdd, 0xdd), // 1: plateado array(0xff, 0x00, 0x00), // 2: rojo inteso array(0x00, 0xff, 0x00), // 3: verde array(0x99, 0xff, 0x99), // 4: verde claro array(0x00, 0x00, 0xff), // 5: azul array(0x99, 0x99, 0xff), // 6: azul claro array(0xff, 0xff, 0x00), // 7: Amarillo array(0xff, 0x99, 0x00), // 8: Naranja array(0xff, 0xff, 0xff), // 9: Blanco ); /* Ruta donde se guardarán las imágenes */ $ruta = \'Poligonator_images\'; /* Segundos que hay que esperar para borrar las imágenes */ $tiempo = 60 * 2; /* Grados que voy a hacer girar el polígono; Predeterminado: 45º */ $angulo = 0; /* numero de lados, si no es válido el enviado, volvemos al formulario y mandamos un mensaje de error */ $n = null; /* Módulo del vector de origen el centro del polígono y extremo, uno de sus vértices. { d(C, p(x,y)) } (radio) */ $radio = 50; /* Ancho y alto de la imagen */ $dim = null; /* Colores de línea y relleno */ $linea = 0; $relleno = 1; /* Nombre de la imagen de este Script */ $current = (string) mktime(); /* @giveVal Asigna el valor adecuado a $var */ function setVal(&$var, $ref = null) { if ($ref != null && @isset ($_POST[$ref])) { if (is_numeric($_POST[$ref])) { $var = (int) $_POST[$ref]; // Casting, no redondeo !! return true; } else return false; } else return false; } /* @Poligonator() genera la imagen. */ function Poligonator() { global $n, $radio, $current, $dim, $linea, $relleno, $ruta; /* Los vértices del polígono */ $vertices = array (); $im = imagecreate($dim, $dim); imagecolorallocate($im, 0xff, 0x00, 0xff); // fucsia, horrible, lo haré transparente. imagecolortransparent($im, 0); $linea = imagecolorallocate($im, $linea[0], $linea[1], $linea[2]); $relleno = imagecolorallocate($im, $relleno[0], $relleno[1], $relleno[2]); for ($j = 0; $j < (2 * pi()); $j += ((2 * pi()) / $n)) { $vertices[] = ($radio * cos($j) + 2 * $radio); $vertices[] = ($radio * sin($j) + 2 * $radio); } if (!imagefilledpolygon($im, $vertices, $n, $relleno)) return \'No se pudo dibujar el polígono\'; if (!imagepolygon($im, $vertices, $n, $linea)) return \'No se pudo dibujar el polígono\'; if (!imagepng($im, \"$ruta/$current.png\")) return \'La imagen fue creada, pero no se pudo guardar\'; return true; } /* Proceso para eliminación de imágenes antiguas. no despliega ningún mensaje de error */ if ($handledir = opendir($ruta)) { while ($cf = readdir($handledir)) { if ($cf != \'.\' && $cf != \'..\' && ((int) $current - (int) str_replace(\'.png\', \'\', $cf) >= $tiempo)) @unlink(\"$ruta/$cf\"); } unset ($handledir); } else mkdir($ruta); if (@isset ($_POST[\'a\'])) { if (!setVal($n, \'n\') || $n < 3) header(\'Location: poligonator.php?e=n\'); /* volvemos al formulario, ya que no hay un valor predeterminado de lados para construir un polígono */ setVal($radio, \'radio\'); setVal($angulo, \'angulo\'); setVal($linea, \'l\'); setVal($relleno, \'r\'); $linea = $colores[$linea]; $relleno = $colores[$relleno]; $dim = $radio * 4; if ($err = Poligonator()) { print <<

Poligonator

\"Poligonator\"
Ancho y alto $dim px
Número de lados: $n
Radio: $radio
Crear un nuevo políono
POLIG; } else { print <<

Poligonator

POLIG; trigger_error($err, E_USER_ERROR); print \'\\n
\'; } } else { @isset ($_GET[\'e\']) ? $err = \'
El número de lados debe ser tres o más
\' : \'\'; print <<

Poligonator

$err
Número de lados
Longitud del radio (px)
Color de línea
Color de relleno
Aviso: Introdicur sólo valores numéricos
POLIG; } print \"\\n\\n\"; $out = ob_get_contents(); ob_clean(); print $out; ?>