Willkommen in der Webstatt Zum Webstatt Blog und Stories
nuit nuit am 08.08.10 22:42

Ich habe vor ein paar Wochen einer Kommolitonin bei einer Matheaufgabe für ihre Kids gearbeitet.
Die Aufgabe war: "Du hast auf einer Landkarte beliebig viele Brunnen an beliebigen Punkten angeordnet...zeichne in die karte die Flächen ein, um immer den kürzesten Weg zu einem Brunnen zu haben"

im Prinzip einfach lösbar...naja...zumindest hab ich mich hingesetzt und hab eine neue online-lösung geschrieben. Man kann zwar die Punkte nicht eingeben :) aber wenigstens sieht man das prinzip

Brunnenproblem

points.php
<?php
session_start();

if($_GET['width'] > 500 or $_GET['height'] > 500) {
die('Choose smaller size, less than 500');
}
if($_GET['n'] > 20) {
die('Please Choose lesser points...less then 20');
}
$arr = array();
for($i = 0; $i < $_GET['n']; $i++) {
$arr[] = rand(0,$_GET['width']).','.rand(0,$_GET['height']);
}

$_SESSION['width'] = $_GET['width'];
$_SESSION['height'] = $_GET['height'];
$_SESSION['points'] = join(';',$arr);
print '<img src="pics.php">';
?>


pics.php
<?php
session_start();
header('Content-type:image/png');

$picture = array(
'width' => $_SESSION['width'],
'height' => $_SESSION['height']
);
$im = @imagecreate($picture['width'],$picture['height']);

$points = array();
$colors = array();

$white = ImageColorAllocate($im,0,0,0);

$p = explode(';',$_SESSION['points']);
for($i = 0; $i < count($p); $i++) {
list($points[$i]['x'],$points[$i]['y']) = explode(',',$p[$i]);
$colors[$i] = ImageColorAllocate($im,rand(0,255),rand(0,255),rand(0,255));
}

for($x = 0; $x <= $picture['width']; $x++) {
for($y = 0; $y <= $picture['height']; $y++) {
$shortestDistance = array(
'distance' => ceil(sqrt(pow($picture['width'],2)+pow($picture['height'],2))),
'point' => 0
);

for($i = 0; $i < count($points); $i++) {
$d = sqrt(pow(($x-$points[$i]['x']),2)+pow(($y-$points[$i]['y']),2));
if($d < $shortestDistance['distance']) {
$shortestDistance = array(
'distance' => $d,
'point' => $i
);
}
}
$p = $shortestDistance['point'];

imagesetpixel($im,$x,$y,$colors[$p]);
}
}

for($i = 0; $i < count($points); $i++) {
imagesetpixel($im,$points[$i]['x'],$points[$i]['y'],$white);
imagesetpixel($im,$points[$i]['x']+1,$points[$i]['y'],$white);
imagesetpixel($im,$points[$i]['x']-1,$points[$i]['y'],$white);
imagesetpixel($im,$points[$i]['x'],$points[$i]['y']+1,$white);
imagesetpixel($im,$points[$i]['x'],$points[$i]['y']-1,$white);
imagesetpixel($im,$points[$i]['x']+2,$points[$i]['y'],$white);
imagesetpixel($im,$points[$i]['x']-2,$points[$i]['y'],$white);
imagesetpixel($im,$points[$i]['x'],$points[$i]['y']+2,$white);
imagesetpixel($im,$points[$i]['x'],$points[$i]['y']-2,$white);
}

ImagePNG($im);
?>

netcup.de Warum gibt es hier Werbung?
Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt