Webstatt.org - Community seit 2006 - 2012 (2024?)

Brunnenproblem

Avatar user-271
08.08.2010 20: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 lächeln 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'zwinkern;
}
if($_GET['n'] > 20) {
die('Please Choose lesser points...less then 20'zwinkern;
}
$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'zwinkern;

$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);
?>

#!/bin/bash
traurig){ neutral:& };: