Foros del Web » Programando para Internet » PHP »

diagrama

Estas en el tema de diagrama en el foro de PHP en Foros del Web. Hola a todos, Quiero hacer un diagrama (creo q se llama asi) para representar N dentro de un rango de numeros entre X e Y. ...
  #1 (permalink)  
Antiguo 19/10/2009, 13:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 7 meses
Puntos: 2
Pregunta diagrama

Hola a todos,

Quiero hacer un diagrama (creo q se llama asi) para representar N dentro de un rango de numeros entre X e Y. x ejemplo: x=0, y=10, n=3.

|_|_|_|_|_|_|_|_|_|_|
0-----3---------10

suponiendo q eso es una barra q va desde 1 hasta 10 rellenaria las casillas hasta tener 3.

Se puede hacer eso con php? como?
  #2 (permalink)  
Antiguo 19/10/2009, 13:50
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: diagrama

Vas a tener que explicar un poco más lo que deseas hacer.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 19/10/2009, 14:01
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: diagrama

yes a explicar no veo la relacion entre x y n
y tu barra :/ que llega hasta 3 el 10 y el cero :P

saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #4 (permalink)  
Antiguo 19/10/2009, 15:03
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: diagrama

xdon x la explicacion tan mala, me refiero a esto:

img18.imageshack.us/img18/3061/dibujowv.jpg

(siento no poderlo poner como imagen pero aun no tengo 30 mensajes :( )

x=0 (inicio)
y=10 (fin)
n=3 (numero a representar)
  #5 (permalink)  
Antiguo 19/10/2009, 15:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: diagrama

Vas recorriendo en un loop (for, while, do while), la informacion y cuando se encuentre mayor que la cantidad mencionada aparezca vacio. Ejemplo usando imagenes.
Código PHP:
Ver original
  1. $n=3;
  2. for($i=0; $i<=10;$i++){
  3.   if($i<=$n){
  4.     echo "<img src='cuadroLleno.jpg' />";
  5.   }else{
  6.     echo "<img src='cuadroVacio.jpg' />";
  7.   }
  8. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 20/10/2009, 03:40
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: diagrama

mmm eso funcionaria pero no es exactamente lo q quiero xk digamos q x sera 0 pero y sera 900 y el numero a representar uno entre ese rango entonces la barra saldria muy larga, yo lo q quiero es q la barra tenga un tamaño fijo valgan lo q valgan las variables y q represente el numero entre esas 2 variables.

En concreto es para una barra de vida de un juego q estoy haciendo, el usuario tendra 1000 de vida maxima, como minimo 1 y quiero representar la vida actual en esa barra x ejemplo 750.


Gracias por responder tan rapido.
  #7 (permalink)  
Antiguo 20/10/2009, 12:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: diagrama

Pues en vez de establacer que sume a 1 sumalo por 10. Tu estableces el valor que quieras, ejemplo
Código PHP:
Ver original
  1. $n=90;
  2. for($i=10; $i<=100;$i++){
  3.   if($i<=$n){
  4.     echo "<img src='cuadroLleno.jpg' />";
  5.   }else{
  6.     echo "<img src='cuadroVacio.jpg' />";
  7.   }
  8. }
En vez de escribir un numero directo en la variable $i puedes usar la variable de $_GET o $_POST para que haga lo que quieres
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 20/10/2009, 16:04
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: diagrama

si, eso funciona pero no cambia q quede una barra muy larga, con ese script pintaria 90 cuadritos. Pero si el maximo a representar es 1000 y tiene 100 q tiene q hacer pintar 100 cuadros llenos y 900 vacios?

Yo me referia a hacer algo parecido al siguiente escript q vi en un tutorial. Aunque no me queda muy claro lo que hace es dibujar 3 barras midiendo el % de gente q a votado para cada sistema operativo (aunque en el tutorial funciona a mi me salta el siguiente error: Fatal error: Call to undefined function: imagecreate() in W:\www\prueba\SHOW_POLL.PHP on line 72
archivo vote.html

Yo lo q queria era utilizar este sistema de creacion de barras pero para medir la vida.


Código HTML:
<html>
<head>
<title>Encuesta</title>
<head>
<body>
<h1>Sondeo</h1>
<p>¿Cuásl tu sistema operativo favorito?</p>
<form method=post action="show_poll.php">
<input type=radio name=vote value="Windows">Windows<br>
<input type=radio name=vote value="Linux">Linux<br>
<input type=radio name=vote value="Solaris">Solaris<br><br>
<input type=submit value="Mostrar Resultados">
</form>
</body> 

archivo SHOW_POLL.PHP

Código PHP:
<?
/*******************************************
  Petición a la base de datos para obtener la información de la encuesta
*******************************************/
// hacer log in en la base de datos
if (!$db_conn = @mysql_connect("localhost""root""root"))
{
  echo 
"No se puede conectar a la base de datos<br>";
  exit;
};
@
mysql_select_db("web");

if (!empty(
$vote))  // Si han cubierto bien el formulario
{
  
$vote addslashes($vote);
  
$query "update poll_results
            set num_votes = num_votes + 1
            where candidate = '$vote'"
;
  if(!(
$result = @mysql_query($query$db_conn)))
  {
    echo 
"No se ha podido conectar a la base de datos<br>";
    exit;
  }
};

// obtener los resultados actuales de la encuentas, independientemente de lo que haya votado
$query "select * from poll_results";
if(!(
$result = @mysql_query($query$db_conn)))
{
  echo 
"No se puede conectar a la base de datos<br>";
  exit;
}
$num_candidates mysql_num_rows($result);

// calcular el número total de votos hasta ahora
$total_votes=0;
while (
$row mysql_fetch_object ($result))
{
    
$total_votes +=  $row->num_votes;
}
mysql_data_seek($result0);  // resetear el resultado


/*******************************************
  Cálculo inicial para el gráfico
*******************************************/
// configurar constantes
$width=500;        // ancho de la imagen en pixeles - encajará en 640x480
$left_margin 50// espacio a dejar a la izquierda de la imagen
$right_margin50// lo mismo para la derecha
$bar_height 40;
$bar_spacing $bar_height/2;
$font "arial.ttf";
$title_size16// puntos
$main_size12// puntos
$small_size12// puntos
$text_indent 10// posición para las etiquetas de texto a la izquierda

// configurar el punto inicial desde el cual dibujar
$x $left_margin 60;  // colocar la línea de base para dibujar del gráfico
$y 50;                 // lo mismo
$bar_unit = ($width-($x+$right_margin)) / 100;   // un "punto" en el gráfico

// cálcula el alto del gráfico -  barras más espacios más el margen
$height $num_candidates * ($bar_height $bar_spacing) + 50;

/*******************************************
  Configurar la imagen base
*******************************************/
// crear un lienzo en blanco
$im imagecreate($width,$height);

// Asignar colores
$white=ImageColorAllocate($im,255,255,255);
$blue=ImageColorAllocate($im,0,64,128);
$black=ImageColorAllocate($im,0,0,0);
$pink ImageColorAllocate($im,255,78,243);

$text_color $black;
$percent_color $black;
$bg_color $white;
$line_color $black;
$bar_color $blue;
$number_color $pink;

// Crear "lienzo" para dibujar
ImageFilledRectangle($im,0,0,$width,$height,$bg_color);

// Dibujar borde en torno al lienzo
ImageRectangle($im,0,0,$width-1,$height-1,$line_color);

// Añadir Título
$title "Resultados Sondeo";
$title_dimensions ImageTTFBBox($title_size0$font$title);
$title_length $title_dimensions[2] - $title_dimensions[0];
$title_height abs($title_dimensions[7] - $title_dimensions[1]);
$title_above_line abs($title_dimensions[7]);
$title_x = ($width-$title_length)/2;  // centrarlo en x
$title_y = ($y $title_height)/$title_above_line// centrarlo en y
ImageTTFText($im$title_size0$title_x$title_y,
             
$text_color$font$title);

// Dibujar una línea de base un poco por encima de la primera localización de la barra
// a un poco por debajo de la última
ImageLine($im$x$y-5$x$height-15$line_color);

/*******************************************
  Dibujar los datos en el gráfico
*******************************************/
// Obtener cada línea de los datos de la base de datos y dibujar las barras correspondientes
while ($row mysql_fetch_object ($result))
{
  if (
$total_votes 0)
    
$percent intval(round(($row->num_votes/$total_votes)*100));
  else
    
$percent 0;

  
// muestra el tanto por ciento para este valor
  
ImageTTFText($im$main_size0$width-30$y+($bar_height/2),
               
$percent_color$font$percent."%");
  if (
$total_votes 0)
    
$right_value intval(round(($row->num_votes/$total_votes)*100));
  else
    
$right_value 0;

  
// tamaño de barra para este valor
  
$bar_length $x + ($right_value $bar_unit);

  
// dibujar barra para este valor
  
ImageFilledRectangle($im$x$y-2$bar_length$y+$bar_height$bar_color);

  
// dibujar título para este valor
  
ImageTTFText($im$main_size0$text_indent$y+($bar_height/2),
               
$text_color$font"$row->candidate");

  
// dibujar contorno mostrando 100%
  
ImageRectangle($im$bar_length+1$y-2,
                (
$x+(100*$bar_unit)), $y+$bar_height$line_color);

  
// mostrar números
  
ImageTTFText($im$small_size0$x+(100*$bar_unit)-50$y+($bar_height/2),
               
$number_color$font$row->num_votes."/".$total_votes);

  
// hacia abajo a la siguiente barra
  
$y=$y+($bar_height+$bar_spacing);
}

/*******************************************
  Mostrar imagen
*******************************************/
Header("Content-type:  image/png");
ImagePng($im);


/*******************************************
  Limpiar
*******************************************/
ImageDestroy($im);
?>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:01.