begin process at 2012 05 27 20:37:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > UN TRACEUR DE COURBES ( MINI,MINI)

UN TRACEUR DE COURBES ( MINI,MINI)


 Information sur la source

Note :
8,2 / 10 - par 5 personnes
8,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Débutant Date de création :04/03/2003 Date de mise à jour :04/03/2003 15:24:55 Vu :5 014

Auteur : phpeasy

Ecrire un message privé
Site perso
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

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

  • 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.
  • ?>
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


 Sources du même auteur

MA GESTION DE L'UPLOAD
FONCTION RECURSIVE POUR FACTORIELLE($N)
DÉCOMPOSITION EN NOMBRE PREMIER

 Sources de la même categorie

Source avec Zip Source avec une capture CAMEMBERT BD par dardelphi
Source avec une capture AMÉLIORATION : CAMEMBERT par asphator
GESTION DE COULEUR par manuche
Source avec Zip NAVIGATOR (+CSSDETECTOR) par xXVoxPopuliXx
COMMENT, AVEC GD, DESSINER UN RECTANGLE TRANSPARENT PLEIN AV... par Rainbow

Commentaires et avis

Commentaire de matrey le 04/03/2003 21:21:07

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

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales