Un traceur de courbes ( mini,mini)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 095 fois - Téléchargée 28 fois

Contenu du snippet

permet de proposer quelques courbes à tracer ( en démo sur http://www.php-easy.com ) et de comprendre un pau la création d'image en php.

Source / Exemple :


Tout d'abord, on récupère les variables d'un formulaire et on affiche l'image en lui passant les paramètres recupérés.

<? if($HTTP_POST_VARS['creation']=='ok') 
{?>
<div align="center">
<img src="image1.php?largeur=<?php echo $HTTP_POST_VARS['largeur']; ?>&hauteur=<?php echo $HTTP_POST_VARS['hauteur']; ?>&fonction=<?php echo $HTTP_POST_VARS['fonction']; ?>
&xmin=<?php echo $HTTP_POST_VARS['xmin']; ?>&xmax=<?php echo $HTTP_POST_VARS['xmax']; ?>&echelle=<?php echo $HTTP_POST_VARS['echelle']; ?>">
</div>
<? } ?>
Il faut maintenant analyser le code de la page image1.php ( je n'expliquerai pas la graduation des axes !! ) :

<?
function modifie($abscisse,$ordonne,$centre,$echelle)
{
for($i=0;$i<count($abscisse);$i++)
{
$r_abscisse[$i]=$centre[0]+$abscisse[$i]*$echelle;
$r_ordonne[$i]=$centre[1]-$ordonne[$i]*$echelle;
}
// cette fonction permet de modifier l'abscisse et l'ordonné pour l' affichage de la courbe, je ne m'étend pas trop
$retour=array($r_abscisse,$r_ordonne);
return $retour;
} 
$largeur=$HTTP_GET_VARS['largeur'];
$hauteur=$HTTP_GET_VARS['hauteur'];
$fonction=$HTTP_GET_VARS['fonction'];
$centre=array($largeur/2,$hauteur/2);
$echelle=$HTTP_GET_VARS['echelle'];
$min=$HTTP_GET_VARS['xmin'];
$max=$HTTP_GET_VARS['xmax'];

// tout ceci c'est la récupération des variables ( méthode get )
$image=ImageCreate($largeur,$hauteur);
$blanc=ImageColorAllocate($image,255,255,255);
$noir=ImageColorAllocate($image,0,0,0);
$jaune=ImageColorAllocate($image,255,255,0);
ImageColorTransparent($image,$jaune);
// on définit le jaune comme couleur transparente
ImageFilledRectangle($image,5,5,$largeur-5,$hauteur-5,$jaune);
// on trace un rectangle en jaune ( il sera donc transparent ) d'où l'effet de cadre.
// sinon rien de nouveau sous le soleil
ImageLine($image,0,$centre[1],$largeur,$centre[1],$noir);
ImageLine($image,$centre[0],0,$centre[0],$hauteur,$noir);
// on trace les deux axes ( on définit le point de départ, le point d'arrivé et la couleur )
$j=0;
for($i=$min;$i<=$max;$i=$i+0.1)
{ 
$abscisse[$j]=$i;
switch($fonction)
{
case("sin(x)"):$ordonne[$j]=sin($i);break;
case("cos(x)"):$ordonne[$j]=cos($i);break;
case("tan(x)"):$ordonne[$j]=tan($i);break;
case("exp(x)"):$ordonne[$j]=exp($i);break;
case("ln(x)"):$ordonne[$j]=log($i);break;
case("x*sin(1/x)"):$ordonne[$j]=$i*sin(1/$i);break;
case("sin(x)*cos(x/2)"):$ordonne[$j]=sin($i)*cos($i/2);break;
}
$j++;
//echo $eval."<br>";
}
$affichage=modifie($abscisse,$ordonne,$centre,$echelle);

// suivant le choix de la fonction, on dresse un tableau de valeur, puis on modifie abscisse et ordonnés pour préparer l'afichage

for($i=0;$i<=count($affichage[0]);$i++)
{
ImageSetPixel($image,$affichage[0][$i],$affichage[1][$i],$noir);
}
// enfin la partie qui nous interesse, on dessine chaque pixel ( définit par ses coordonnées ) en noir.

$titre="y=$fonction";
ImageString($image,3,10,10,$titre,$noir);
// on affiche le titre
header("content-type: image/png");
ImagePNG($image);
ImageDestroy();
// et on finit de façon classique : c'est une image png ( le header ), on la dessine et on détruit l'image en mémoire.
?>

Conclusion :


A voir sur mon site http://www.php-easy.com

A voir également

Ajouter un commentaire Commentaire
Messages postés
399
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
6 septembre 2004

d'un cote : pourquoi pas, bon code, 10/10 (que je te mets d'ailleurs)
de l'autre : la librairie GPL JpGraph, qui est 100 fois plus évoluée... difficile d'innover dans ce bas monde ;-) Bon job tout de même

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.