Affichage d'une fonction mathématique sous forme de graphique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 445 fois - Téléchargée 27 fois

Contenu du snippet

voila une application php permettant d'afficher une fonction php de votre choix.

paramètres:

fonction: la fonction, necessite une syntaxe PHP

axex : nombre de pixel pour 1 unité sur laxe X

axey : nombre de pixel pour 1 unité sur laxe X

Source / Exemple :


<?
function graphe($formule, $axex, $axey){
$param[height] = "500";
$param[width] = "500";
$param[gradx] = "20"; //nbr de pixel pour 1 de largeur
$param[grady] = "20"; //nbr de pixel pour 1 de hauteur
$pos_top = "20";
$im = ImageCreate($param[width], $param[height]);
if ($axex != "" AND $axex >= "5" AND $axex <= "100"){ $param[gradx] = $axex; }
else { $param[gradx] = "20"; }
if ($axey != "" AND $axey >= "5" AND $axey <= "100"){ $param[grady] = $axey; }
else { $param[grady] = "20"; }
if ($formule  == "") $formule = 'x*x';

$formule = str_replace(' ', '+', $formule);

//Traitement de la formule
$formule1 = str_replace('x', '$x', $formule);
$formule2 = str_replace('x', '$x2', $formule);

function puis($x, $exposant){
$x2 = $x;
for ($i = "0"; $i< $exposant;$i++){
$x=$x*$x2;
}
return $x;
}

//colors
$white = ImageColorAllocate ($im, 255,255,255);
$black = ImageColorAllocate ($im, 0,0,0);
$red = ImageColorAllocate ($im, 220,0,0);
$backgr = ImageColorAllocate ($im, 220,220,220);
$grey_title = ImageColorAllocate ($im, 190,190,190);
$grey_sombre = ImageColorAllocate ($im, 100,50,50);
$quadrillage = ImageColorAllocate ($im, 200,200,200);
$axe_blue = ImageColorAllocate ($im, 193,161,114);
$box_border_top = ImageColorAllocate ($im, 100,100,100);
$box_border_left = $box_border_top;
$box_border_right = ImageColorAllocate ($im, 50,50,50);
$box_border_bottom = $box_border_right;
//Box
ImageFill($im, 0, 0, $backgr);
	//border
	ImageLine($im, 0, 0, 0, $param[height], $box_border_top);
	ImageLine($im, 0, 0, $param[width], 0, $box_border_left);
	ImageLine($im, ($param[width]-1), 0, ($param[width]-1), ($param[height]-1), $black);
	ImageLine($im, ($param[width]-1), ($param[height]-1), 0, ($param[height]-1), $black);
		

	//Axes
	ImageLine($im, ($param[width]/2), (30+$pos_top), ($param[width]/2), (($param[height]-180)+$pos_top), $axe_blue);
	ImageLine($im, 100, (((($param[height]-210)/2)+30)+$pos_top), ($param[width]-100), (((($param[height]-210)/2)+30)+$pos_top), $axe_blue);
		//fleches
		ImageLine($im, ($param[width]/2), (30+$pos_top), (($param[width]/2)-5), (40+$pos_top), $axe_blue);
		ImageLine($im, ($param[width]/2), (30+$pos_top), (($param[width]/2)+5), (40+$pos_top), $axe_blue);
		ImageLine($im, ($param[width]-100), (((($param[height]-210)/2)+30)+$pos_top), (($param[width]-100)-10), ((((($param[height]-210)/2)+30)+5)+$pos_top), $axe_blue);
		ImageLine($im, ($param[width]-100), (((($param[height]-210)/2)+30)+$pos_top), (($param[width]-100)-10), ((((($param[height]-210)/2)+30)-5)+$pos_top), $axe_blue);

$center_width = (($param[width]-200)/2)+100;
$center_height = ((($param[height]-210)/2)+30+$pos_top);

for ($i = 1; $i < "200"; $i++ ){
if ($i*$param[gradx] < "150"){
//quadrillage + graduage
ImageLine($im, 100, (((($param[height]-210)/2)+30)+$pos_top+($i*$param[grady])), ($param[width]-100), (((($param[height]-210)/2)+30)+$pos_top+($i*$param[grady])), $quadrillage);
ImageLine($im, 100, (((($param[height]-210)/2)+30)+$pos_top-($i*$param[grady])), ($param[width]-100), (((($param[height]-210)/2)+30)+$pos_top-($i*$param[grady])), $quadrillage);
ImageLine($im, (($param[width]/2)-($i*$param[gradx])), (30+$pos_top), (($param[width]/2)-($i*$param[gradx])), (($param[height]-180)+$pos_top), $quadrillage);
ImageLine($im, (($param[width]/2)+($i*$param[gradx])), (30+$pos_top), (($param[width]/2)+($i*$param[gradx])), (($param[height]-180)+$pos_top), $quadrillage);

ImageLine($im, ($center_width+($i*$param[gradx])), ($center_height-2), ($center_width+($i*$param[gradx])), ($center_height+2), $axe_blue);
ImageLine($im, ($center_width+($i*-$param[gradx])), ($center_height-2), ($center_width+($i*-$param[gradx])), ($center_height+2), $axe_blue);
}
if ($i*$param[grady] < "150"){
ImageLine($im, ($center_width-2), ($center_height+($i*$param[grady])), ($center_width+2), ($center_height+($i*$param[grady])), $axe_blue);
ImageLine($im, ($center_width-2), ($center_height+($i*-$param[grady])), ($center_width+2), ($center_height+($i*-$param[grady])), $axe_blue);

}
}
//texts
	ImageString($im, 3, 130, 10, "** Mathematical Function Shower **", $grey_title);
	ImageString($im, 3, 10, 35+320, "Entries:", $black);
	ImageString($im, 2, 10, 55+320, "function : ", $grey_sombre);
	ImageString($im, 2, 90, 55+320, "$formule", $grey_sombre);
	ImageString($im, 2, 10, 75+320, "Echelle [x] : 1/$param[gradx]", $box_border_top);
	ImageString($im, 2, 10, 90+320, "Echelle [y] : 1/$param[grady]", $box_border_top);
	ImageString($im, 3, 250, 480, " v.1 (c) by Colder - www.colder.ch", $grey_title);
	
//affichage des points
for ($i = "-140"; $i < "140"; $i++ ){
$x = (1/$param[gradx])*$i;
$x2 = (1/$param[gradx])*($i-1);
 eval( "\$result_op = $formule1;" );
 eval( "\$result_op_back = $formule2;" );
$result_op = $result_op*$param[grady]*(-1);
$result_op_back = $result_op_back*$param[grady]*(-1);
if ($result_op < 140 AND $result_op > -140 AND $result_op_back < 140 AND $result_op_back > -140 ){
ImageLine($im, ($center_width+$i), ($center_height+$result_op), ($center_width+($i-1)), ($center_height+$result_op_back), $black);
}
}

//affichange de l'image
Header ("Content-type: image/jpeg");
ImageJpeg($im);

ImageDestroy($im);
}
graphe($formule, $axex, $axey);
?>

Conclusion :


petite imprécision détectée avec la fonction x

j'ai absolument aucune idée d'ou ca peut venir.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
10
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
5 décembre 2003

ué je suis daccord c pas tres securisé.
Mais encore une foit c plutot un code fun que un truc a mettre sur son site : ouah affichez votre fonction, c vachement utile.....
deja
1 : les magic quotes sont on très souvent on
2 : ta jamais les permission pour modifier/supprimer des fichiers...

Si jamais le file n'est plus sur mon serveur.
pasque malgrés tout on peut toujour faire : print phpinfo
;)
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Statut
Membre
Dernière intervention
12 juillet 2006

Si on ut8ilise un formulaire pour pouvoir permettre a lutilisateur dentrer ses propres fonction il faut faire bien attention de filtrer les commande php car avec eval() on peut vraiment tout mettrer genre des unlink() ça ferait mal de voir son site partir en fumée... !
A+
Messages postés
435
Date d'inscription
vendredi 20 septembre 2002
Statut
Membre
Dernière intervention
20 novembre 2004

bravo pour ce code meme si jai une belle surprise avec des asymptote oblique et quelque fonction particulièrere.
Comme disent les profs de maths cest avec une machine qu'on a le plus de chance de faire faux.
Messages postés
10
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
5 décembre 2003

bon deja il accepte pas les division, ce qui est un peu dommage, bon c clair que je pourrait faire le monstre truc avec analiseur syntaxique etc.... mais bon... jai pas trop trop le temps... et ué la gestion d'erreur et tout ca, mais bon c pas vraiment fait pou rla distribution, dailleur ca sert pas a grad chose ;) si tu veut vraiment faire tu use Mathematica pis voila ;)
Messages postés
5
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
7 novembre 2003

Ca serait bien que ton script gère les divisions par 0
Car si on entre la fonction 1/x ca marche pas...
Sinon c'est un très bon script :)
Afficher les 9 commentaires

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.

Du même auteur (cs_Colder)