ajout de la méthode spirale
This commit is contained in:
135
methode2/spirale/draw.php
Normal file
135
methode2/spirale/draw.php
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
function DrawBlock($the_block, $vImage, $parametres)
|
||||
{
|
||||
// valeurs par défaut
|
||||
$type = 1;
|
||||
|
||||
// Ces variables vont permettre de caler les lignes
|
||||
// dans la zone de dessin en se laissant des marges
|
||||
// en haut et en bas
|
||||
$somme = 0;
|
||||
$min =-1;
|
||||
$max = 0;
|
||||
$marge_x = 10;
|
||||
$marge_y = 10;
|
||||
$facteur_max = 2.5;
|
||||
$alpha = 0;
|
||||
|
||||
// Détermine si on dessine les tx, les fees ou la récompense
|
||||
if (isset($parametres['type'])) $type = $parametres['type'];
|
||||
|
||||
// Paramètres de dessin
|
||||
if (isset($parametres['x'])) $x = $parametres['x'];
|
||||
if (isset($parametres['y'])) $y = $parametres['y'];
|
||||
if (isset($parametres['width'])) $width = $parametres['width'];
|
||||
if (isset($parametres['height'])) $height = $parametres['height'];
|
||||
if (isset($parametres['font_color'])) $vFgColor = $parametres['font_color'];
|
||||
if (isset($parametres['background_color'])) $vBgColor = $parametres['background_color'];
|
||||
if (isset($parametres['font_RGB'])) $vFgRGB = $parametres['font_RGB'];
|
||||
if (isset($parametres['background_RGB'])) $vBgRGB = $parametres['background_RGB'];
|
||||
|
||||
// Je reprends les couleurs de Tyler Hobbs
|
||||
$couleursRGB=[
|
||||
[234,220,207],
|
||||
[197,46,39],
|
||||
[183,230,214],
|
||||
[248,200,40],
|
||||
[51,41,32],
|
||||
[250,142,41],
|
||||
[5,37,32],
|
||||
[233,201,58],
|
||||
[183,230,214]
|
||||
];
|
||||
$couleurs = [];
|
||||
$nb_couleurs = count($couleursRGB);
|
||||
for($i=0;$i<$nb_couleurs;$i++)
|
||||
$couleurs[$i] = imagecolorallocate($vImage,$couleursRGB[$i][0],$couleursRGB[$i][1],$couleursRGB[$i][2]);
|
||||
|
||||
// Prendre une des couleurs au hasard comme couleur de fond
|
||||
shuffle($couleurs);
|
||||
$fond = $couleurs[0];
|
||||
shuffle($couleurs);
|
||||
|
||||
// Remplir le fond
|
||||
imagefilledrectangle($vImage, $x+($marge_x/2), $y+($marge_y/2), $x+$width-+($marge_x/2), $y+$height-+($marge_y/2), $fond);
|
||||
|
||||
// Récup des données
|
||||
$data = blockchain::getTransactionData($the_block, $type);
|
||||
$n_data = count($data);
|
||||
|
||||
// Calcul des min max
|
||||
foreach($data as $v)
|
||||
{
|
||||
if ($v['value'] > $max) $max = $v['value'];
|
||||
if (($v['value'] < $min)||($min == -1)) $min = $v['value'];
|
||||
$somme += $v['value'];
|
||||
}
|
||||
if ($min == $max) $max = $min + 1;
|
||||
if ($somme == 0) return;
|
||||
|
||||
// On commence au centre de l'image
|
||||
$xc = $x + ($width / 2);
|
||||
$yc = $y + ($height / 2);
|
||||
$r = $width / 3;
|
||||
$cur = 0;
|
||||
$n = 0;
|
||||
$x1 = $xc;
|
||||
$y1 = $yc;
|
||||
$x2 = $xc;
|
||||
$y2 = $yc;
|
||||
|
||||
// Trouver le max
|
||||
$max=0;
|
||||
while(true){
|
||||
$r1 = 0.05 * $max;
|
||||
$x2 = $xc + $r1*cos($r1);
|
||||
$y2 = $yc + $r1*sin($r1);
|
||||
if (($x2 > $width) || ($x2 < 0)) break;
|
||||
if (($y2 > $height) || ($y2 < 0)) break;
|
||||
imageline($vImage, $x1, $y1, $x2, $y2, $couleurs[0]);
|
||||
$x1 = $x2;
|
||||
$y1 = $y2;
|
||||
$max++;
|
||||
}
|
||||
$coef = floatval($max) / floatval($somme);
|
||||
|
||||
$cur = 0;
|
||||
$n = 0;
|
||||
$x1 = $xc;
|
||||
$y1 = $yc;
|
||||
$x2 = $xc;
|
||||
$y2 = $yc;
|
||||
|
||||
foreach($data as $transaction)
|
||||
{
|
||||
// chaque fois que toutes les couleurs ont été utilisées
|
||||
// on mélange leur ordre
|
||||
if (!($n%$nb_couleurs)) shuffle($couleurs);
|
||||
// S'il n'y a qu'une transaction
|
||||
// Ou Si la transaction courante représente plus du 5eme de la somme des tx
|
||||
// On s'interdit la couleur de fond
|
||||
if (($n_data == 1)||($transaction['value'] > ($somme/5)))
|
||||
while ($couleurs[$n%$nb_couleurs] == $fond) $n++;
|
||||
$couleur = $couleurs[$n%$nb_couleurs];
|
||||
|
||||
// le segment de couleur est de longueur proportionnelle
|
||||
// à la valeur de sa transaction
|
||||
$next = $cur + ($coef*$transaction['value']);
|
||||
if ($next > $max) $next = $max;
|
||||
|
||||
while($cur<$next)
|
||||
{
|
||||
$r1 = 0.05 * $cur;
|
||||
$x2 = $xc + $r1*cos($r1);
|
||||
$y2 = $yc + $r1*sin($r1);
|
||||
imageline($vImage, $x1, $y1, $x2, $y2, $couleur);
|
||||
$x1 = $x2;
|
||||
$y1 = $y2;
|
||||
$cur++;
|
||||
}
|
||||
$n++;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user