Ein simpler Funktions-Plotter.
<?php
/*
Plotter
Aktion: PHP Scripte für die armen dieser Welt
Der Erlös geht für mein Pausenbrot drauf
Copyright (c) 2004 by Phillip 'Firebird' Berndt
*/
$imagesx = 320;
$imagesy = 240;
$einteilungx = 10;
$einteilungy = 10;
$formelx = 10;
$formely = 10;
$genauigkeit = .01;
$font = "C:\WINNT\Fonts\Arial.ttf";
set_time_limit(2);
error_reporting(0);
if (!isset($formel))
{
?>
Formel zeichnen<br><br><br>
<form method=get target=_blank>
Formel: <input type=text name=formel value="x">
<input type=submit value="Zeichnen">
</form>
<?
die();
}
$orig = $formel;
// Sicherheit
if(eregi("echo ",$formel)) die();
if(eregi("fopen",$formel)) die();
if(eregi("file",$formel)) die();
if(eregi("unset",$formel)) die();
if(eregi("mkdir",$formel)) die();
if(eregi("rmdir",$formel)) die();
if(eregi("dir",$formel)) die();
if(eregi("\\\$",$formel)) die();
$formel = str_replace("x","\$x", $formel);
$bild = imagecreatetruecolor($imagesx, $imagesy);
$weiss = imagecolorallocate($bild, 255, 255, 255);
$schwarz = imagecolorallocate($bild, 100, 100, 100);
$grau = imagecolorallocate($bild, 200, 200, 200);
imagefill($bild, 1, 1, $weiss);
// Formel
imagettftext($bild, 8, 0, $formelx, $formely, $schwarz, $font, "f(x) = ".$orig);
// Gitter
imageline($bild, 0, $imagesy / 2, $imagesx, $imagesy / 2, $grau);
imageline($bild, $imagesx / 2, 0, $imagesx / 2, $imagesy, $grau);
// Gitter beschriften
// X - Achse
for($i=($imagesx/$einteilungx/2); $i<=$imagesx; $i += ($imagesx/$einteilungx/2))
{
imageline($bild, $i, $imagesy / 2 - 2, $i, $imagesy / 2 + 2, $grau);
imagettftext($bild, 8, 0, $i - 3, $imagesy / 2 + 16, $grau, $font, $i / ($imagesx/$einteilungx/2) - $einteilungx);
}
// Y - Achse
for($i=($imagesy/$einteilungy/2); $i<=$imagesy; $i += ($imagesy/$einteilungy/2))
{
imageline($bild, $imagesx / 2 - 2, $i, $imagesx / 2 + 2, $i, $grau);
imagettftext($bild, 8, 0, $imagesx / 2 - 15, $i + 3, $grau, $font, ($imagesy - $i) / ($imagesy/$einteilungy/2) - $einteilungy);
}
// Zeichnen zeichnen
for($x=-$einteilungx; $x<=$einteilungx; $x += $genauigkeit)
{
// Auflösen
$erg = eval("return (".$formel.");");
if($erg) {
$mx = $x * ($imagesx/$einteilungx) + ($imagesx/2);
$my = $imagesy - ($erg * ($imagesy/$einteilungy/2) + ($imagesy / 2));
imagesetpixel($bild, $mx, $my, $schwarz);
}
}
imagejpeg($bild);
?>