From 3f4bdf65e005436c053f40e249a1f0f22b928bdd Mon Sep 17 00:00:00 2001 From: MEUNIER Thibaud Date: Sun, 10 Mar 2019 08:48:30 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20de=20la=20m=C3=A9thode=20Tyler=20Hobbs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- methode2/splinelineblack/draw.php | 11 +- methode2/tylerhobbs/draw.php | 216 ++++++++++++++++++++++++++++++ 2 files changed, 221 insertions(+), 6 deletions(-) create mode 100644 methode2/tylerhobbs/draw.php diff --git a/methode2/splinelineblack/draw.php b/methode2/splinelineblack/draw.php index a727e24..a18daaf 100644 --- a/methode2/splinelineblack/draw.php +++ b/methode2/splinelineblack/draw.php @@ -63,16 +63,15 @@ function DrawBlock($the_block, $vImage, $parametres) $img_h = $height+(2*$y); // Redessiner entête et pied de page - blockchain::DrawBlockHeaderFooter($the_block, $vImage, $y, $couleur); - imagefilledrectangle($vImage, 0, $y, $width, $y + $height, $parametres['background_color']); - imageline($vImage, 0, 5, 0, $img_h-25, $parametres['font_color']); - imageline($vImage, $width-1, 5, $width-1, $img_h-25, $parametres['font_color']); + $p2 = blockchain::DrawBlockHeaderFooter($the_block, $vImage, $y, $couleur); $fond=imagecolorallocate($vImage,$fondRGB[0],$fondRGB[1],$fondRGB[2]); - $couleur=imagecolorallocate($vImage,$couleurRGB[0],$couleurRGB[1],$couleurRGB[2]); + //$couleur=imagecolorallocate($vImage,$couleurRGB[0],$couleurRGB[1],$couleurRGB[2]); // Remplir le fond - imagefilledrectangle($vImage, $x+($marge_x/2), $y+($marge_y/2), $x+$width-+($marge_x/2), $y+$height-+($marge_y/2), $fond); + imagefilledrectangle($vImage, 0, $y, $width, $y + $height, $fond); + imageline($vImage, 0, 5, 0, $img_h-25, $p2[2]); + imageline($vImage, $width-1, 5, $width-1, $img_h-25, $p2[2]); $vColor = array(); // Dégradé de 192 couleurs entre la couleur de dessin et le blanc diff --git a/methode2/tylerhobbs/draw.php b/methode2/tylerhobbs/draw.php new file mode 100644 index 0000000..6e560f0 --- /dev/null +++ b/methode2/tylerhobbs/draw.php @@ -0,0 +1,216 @@ + $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 se prend une plus grosse marge en hauteur + $coef = ($height - (4*$marge_y)) / $somme; + $limite_x = $x + ($width - (2*$marge_x)); + $dx = round(($width - (2*$marge_x)) / (TX_HASH_LEN+10)); + + $h0 = 0; + $hauteur = $y + (2*$marge_y); + $special_draw = (count($data) == 1); + $etage = -1; + + // [ TODO ] L'épaisseur du trait dépend du nombre de transactions + $epaisseur = 5; + + foreach($data as $transaction) + { + // + // La nouvelle hauteur : cumule des montants de transaction + // + $hauteur += $coef * $transaction['value']; + + // + // Gestion de la couleur + // + if ($etage != floor($hauteur/$pas)) + { + $etage = floor($hauteur/$pas); + + $vColor = array(); + // Dégradé de 192 couleurs entre la couleur de dessin et le blanc + $nb_colors = 192; + $hex_val = array( + ColorGradient::rgb2hex($couleursRGB[$etage]), + ColorGradient::rgb2hex([255,255,255]) + ); + $gradient = ColorGradient::gradient($hex_val[0], $hex_val[1], $nb_colors); + for($i=0;$i<$nb_colors;$i++) + { + $rgbval = ColorGradient::hex2rgb($gradient[$i]); + // Pas de blanc <=> c'est la transparence ... + if (($rgbval[0] == $rgbval[1])&&($rgbval[1] == $rgbval[2])&&($rgbval[0] > 252)) + { + $rgbval[0] = 255; + $rgbval[1] = 255; + $rgbval[2] = 255; + } + $vColor[$i] = new ColorGradient(); + $vColor[$i]->pct = ($i*1.0) / 256; + $vColor[$i]->color = imagecolorallocate($vImage, $rgbval[0], $rgbval[1], $rgbval[2]); + } + // On ajoute un dégradé de 64 couleurs entre le blanc et la couleur de fond + $nb_colors = 64; + $hex_val = array( + ColorGradient::rgb2hex([255,255,255]), + ColorGradient::rgb2hex($fondRGB) + ); + $gradient = ColorGradient::gradient($hex_val[0], $hex_val[1], $nb_colors); + for($i=0;$i<$nb_colors;$i++) + { + $rgbval = ColorGradient::hex2rgb($gradient[$i]); + // Pas de blanc <=> c'est la transparence ... + if (($rgbval[0] == $rgbval[1])&&($rgbval[1] == $rgbval[2])&&($rgbval[0] > 252)) + { + $rgbval[0] = 255; + $rgbval[1] = 255; + $rgbval[2] = 255; + } + $vColor[192+$i] = new ColorGradient(); + $vColor[192+$i]->pct = ((192+$i)*1.0) / 256; + $vColor[192+$i]->color = imagecolorallocate($vImage, $rgbval[0], $rgbval[1], $rgbval[2]); + } + $nb_colors = 256; + } + + // + // Cas des blocks qui n'ont qu'une seule transaction + // On se cale au milieu + // + if ($special_draw) $hauteur = $y + ($height / 2); + + // + // Ne pas tracer 2 lignes à la même hauteur + // => c'est possible du fait de l'arrondi + // si la transaction a un montant faible + // + if ((floor($hauteur)-$h0)<2) continue; + $h0 = floor($hauteur); + + $x0 = $x + $marge_x; + + // + // On découpe la ligne en fonction du nombre de DIGIT + // dans le hash des transactions + // + $facteur = 0.1; + $aCoords = array(); + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + $aCoords[$x0] = $h0; $x0 += $dx; + for ($i = 0; $i < TX_HASH_LEN; $i++) + { + $y0 = $h0; + $valeur = hexdec($transaction['hash'][$i]); + if ($valeur != 0) $y0 += floor(($valeur - 8) * $facteur); + $x0 += $dx; + $aCoords[$x0] = $y0; + + if ($y0 == $h0) continue; + + $facteur = 0.1 + (($facteur_max*$i) / TX_HASH_LEN); + if ($facteur > $facteur_max) $facteur = $facteur_max; + } + + for($i=0;$i<$epaisseur;$i++) + { + foreach($aCoords as &$aCoord) + { + $aCoord += 1; + if ($aCoord < $y+$marge_y) $aCoord = $y+$marge_y; + if ($aCoord > ($y+$height-$marge_y)) $aCoord = $y+$height-$marge_y; + } + + $oCurve->setInitCoords($aCoords); + $r = $oCurve->processCoords(); + if ($r) + { + $curveGraph = new Plot($r); + $curveGraph->drawLine($vImage, $vColor, $x0, $limite_x); + } + } + } +} + +?>