Graficos 3D simples e configuraveis com PHP
Publicado por Guilherme Oliveira Mota 14/05/2004
[ Hits: 11.261 ]
Gera graficos 3D faceis de entender com quantos parametros forem desejados, o codigo é de forma simples e de facil entendimento.
<?php
for ($i=0;$i<=$_GET[total]-1;$i++):
$vetor[nome][$i]=$_POST[nome.($i+1)];
$vetor[qtd][$i]=$_POST[qtd.($i+1)];
endfor;
//---------------------------------------------------- //
// ----------Desenvolvido por Guilherme Mota---------- //
// --------------------13/05/2004--------------------- //
// --- ------Gerador de grafico 3D dinamico----------- //
// -Otima demonstraçao de uso da biblioteca GD do PHP- //
// --------------------------------------------------- //
// -------------------------------------------------------------------- //
// Este programa gera um grafico a partir de um vetor multidimensional //
// * Os parametros => $vetor[nome] ------------------------------- //
// * As quantidades => $vetor[qtd] -------------------------------- //
// Altura e largura da imagem gerada sao definidos dinamicamente de //
// acordo com o numero de parametros passados ----------------------- //
// -------------------------------------------------------------------- //
// ----------------------------------------------------- //
// Se houver qualquer duvida, basta enviar um e-mail //
// para gui.mota@ig.com.br que terei prazer em responder //
// ----------------------------------------------------- //
// ------------------------------------------------------------------ //
// Copia totalmente permitida desde que mantenha os creditos do autor //
// ------------------------------------------------------------------ //
grafico_gui($vetor);
function grafico_gui($vetor){
//Define a quantidade de parametros
$tamanho = count($vetor[qtd]);
//define o maior parametro
$maior = 0;
$total = 0;
for($i=0;$i<$tamanho;$i++):
if ($vetor[qtd][$i]>$maior):
$maior=$vetor[qtd][$i];
$vetor_maior=$i;
endif;
$total = $total+$vetor[qtd][$i];
endfor;
//Calcula a altura e largura ideais
$largura= 50*$tamanho+100;
if ($largura<350)
$largura=350;
$altura= 20*$tamanho+280;
//Cria a imagem
$img = imagecreate($largura,$altura);
//Define cores
$fundo = imagecolorallocate($img,230,239,248);
$vermelho = imagecolorallocate($img,255,0,0);
$branco = imagecolorallocate($img,255,255,255);
$corret = imagecolorallocate($img,51,153,255);
$cinza = imagecolorallocate($img,100,100,100);
$azul = imagecolorallocate($img,0,0,255);
$azulescuro = imagecolorallocate($img,102,153,204);
$preto = imagecolorallocate($img,0,0,0);
//Define o numero à esquerda
$numero_esquerda = ($maior/4);
settype($numero_esquerda,integer);
//Define a altura certa para os retangulos
for($i=0;$i<$tamanho;$i++):
$var[$i] = 180 - (($vetor[qtd][$i]*150)/$maior);
endfor;
//Gera as linhas intermediarias
imagefilledrectangle($img,40,30,$largura-20,31,$azulescuro);
imagefilledrectangle($img,40,68,$largura-20,69,$azulescuro);
imagefilledrectangle($img,40,104,$largura-20,105,$azulescuro);
imagefilledrectangle($img,40,142,$largura-20,143,$azulescuro);
// Gera os triangulos pequenos que ligam os retangulos principais
// com os retangulos sombreados para formar uma imagem 3D.
$r=60;
$s=65;
for ($i=0;$i<$tamanho;$i++):
if ($vetor[qtd][$i]!=0):
$values_cima = array(
0 => $r, // x1
1 => $var[$i], // y1
2 => $s, // x2
3 => $var[$i]-5, // y2
4 => $r+5, // x3
5 => $var[$i], // y3
);
$values_baixo = array(
0 => $r+31, // x1
1 => 181, // y1
2 => $r+31, // x2
3 => 176, // y2
4 => $r+35, // x3
5 => 176, // y3
);
$r=$r+50;
$s=$s+50;
imagefilledpolygon($img, $values_baixo, 3, $cinza );
imagefilledpolygon($img, $values_cima, 3, $cinza );
endif;
endfor;
//Gera os retangulos principais e sombreados
$x1=60;
$x2=90;
for ($i=0;$i<$tamanho;$i++):
if ($vetor[qtd][$i]!=0):
imagefilledrectangle($img,$x1+5,$var[$i]-5,$x2+5,176,$cinza);
imagefilledrectangle($img,$x1,$var[$i],$x2,180,$corret);
endif;
$x1=$x1+50;
$x2=$x2+50;
endfor;
//Gera as linhas principais
imagefilledrectangle($img,20,181,$largura-20,183,$preto);
imagefilledrectangle($img,38,00,40,200,$preto);
//Gera o numero do parametro
$v=72;
for($i=0;$i<$tamanho;$i++):
imagestring($img, 2, $v, 185, $i+1, $preto);
$v=$v+50;
endfor;
//Gera os numeros das linhas intermediarias
imagestring($img, 2, 05, 24, $numero_esquerda*4, $preto);
imagestring($img, 2, 05, 61, $numero_esquerda*3, $preto);
imagestring($img, 2, 05, 96, $numero_esquerda*2, $preto);
imagestring($img, 2, 05, 135, $numero_esquerda, $preto);
//Gera o nome dos parametros
$alt=225;
for($i=0;$i<$tamanho;$i++):
imagestring($img, 3, 05, $alt, ($i+1)."-", $corret);
imagestring($img, 3, 25, $alt, $vetor[nome][$i] , $preto);
$alt=$alt+13;
endfor;
imagefilledrectangle($img,20,$alt+10,$largura-20,$alt+11,$cinza);
//Gera resumo embaixo da imagem
imagestring($img, 3, 05, $alt+16, "Total:", $corret);
imagestring($img, 3, 55, $alt+16, $total, $preto);
imagestring($img, 3, 05, $alt+29, "Vencedor:", $corret);
imagestring($img, 3, 15, $alt+42, $vetor[nome][$vetor_maior], $preto);
//Numero de qtd de cada filme
$num=67;
for($i=0;$i<$tamanho;$i++):
for($j=0;$j<=9;$j++):
if ($vetor[qtd][$i]==$j):
$vetor[qtd][$i]="0".$vetor[qtd][$i];
endif;
endfor;
if ($vetor[qtd][$i]!=0):
imagestring($img,3,$num,$var[$i]-18,$vetor[qtd][$i],$preto);
else:
imagestring($img,3,$num,168,$vetor[qtd][$i],$preto);
endif;
$num = $num+50;
endfor;
imagepng($img);
imagedestroy($img);
}
?>
Converter String para Maiúsculas
Pegando todos os feriados do ano
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Como personalizar o lxde? [RESOLVIDO] (5)
Flatpaks não funcionam após atualizar pelo Gerenciador de Atualizações... (3)
Erro no suitable vídeo mode (15)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (2)









