max
Erfahrenes Mitglied
Ich habe folgende Aufgabe bekommen: Ich soll einen Sitzplan für einen Saal dynamisch erstellen. Das Ganze funktioniert so dass ich die Maße (in Metern) des Saales angebe und dann Flächen hinzufügen auf die keine Stühle kommen (via Koordinatensystem).
Für die Ganze Verarbeitung habe ich mir ein Koordinatensystem mit einem 2 dimensionalen Array zusammengebaut.
So ein Koordinatensystem sieht mit ein Paar nicht bestückten Flächen so aus:
bzw. sieht das Array so aus:
1 … sind geschützte Flächen wie Gänge, Technikbereich usw.
0 … sind Freie Flächen
2 … sind Stühle
Um das ganze zu Bestuhlen durchgehe ich das Array und prüfe ob ein Stuhl Platz hat (also ob kein geschützter Bereich in die Fläche des Stuhls ragt), falls ja wird ein Stuhl gesetzt.
Das funktioniert auch alles wunderbar nur will ich aus dem Ganzen jetzt eine Grafik erstellen und da habe ich ein paar Probleme.
Zum Erstellen der Grafik berechne ich mir durch die Ausmaße der Grafik und des eigentlichen Raumes welche Größe die Rasterfelder haben (zB. 10 x 10 px).
Jetzt durchgehe ich das Array mit einer foreach Schleife und frage jeden Rasterpunkt ab welchen wert er hat und erzeuge dementsprechend ein Rechteck in der entsprechenden Farbe.
Mein Problem ist jetzt dass das Array mit dem Raster zwar vollständig ist, aber die Grafik wird je nach Größe des Raumes abgeschnitten, dh. es werden zB. nur 2 Rasterzeilen gezeichnet, komisch ist allerdings wenn ich mir die Werte in der Schleife ausgeben lasse sehe ich dass eigentlich das komplette Raster verarbeitet wird.
Ich komm irgendwie nicht auf die Lösung, würde mich sehr freuen wenn mir jemand Helfen könnte.
Meine Funktion zum Erstellen des Bildes:
Das Bild sollte ca. so Aussehen (nur andere Maße):
Und so sieht das Bild aus dass generiert wird:
Für die Ganze Verarbeitung habe ich mir ein Koordinatensystem mit einem 2 dimensionalen Array zusammengebaut.
So ein Koordinatensystem sieht mit ein Paar nicht bestückten Flächen so aus:
Code:
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 2 2 2 2 2 0 1 1 0 2 2 2 2 2 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 2 2 2 2 2 0 1 1 0 2 2 2 2 2 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 2 2 2 2 2 0 1 1 0 2 2 2 2 2 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 2 2 2 2 2 0 1 1 0 2 2 2 2 2 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1
1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1
1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1
1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
Code:
array(20) {
[0]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[1]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[2]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[3]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[4]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[5]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[6]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[7]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[8]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[9]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(1)
[3]=>
int(1)
[4]=>
int(1)
[5]=>
int(1)
[6]=>
int(1)
[7]=>
int(1)
[8]=>
int(1)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(1)
[12]=>
int(1)
[13]=>
int(1)
[14]=>
int(1)
[15]=>
int(1)
[16]=>
int(1)
[17]=>
int(1)
[18]=>
int(1)
[19]=>
int(1)
}
[10]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(1)
[3]=>
int(1)
[4]=>
int(1)
[5]=>
int(1)
[6]=>
int(1)
[7]=>
int(1)
[8]=>
int(1)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(1)
[12]=>
int(1)
[13]=>
int(1)
[14]=>
int(1)
[15]=>
int(1)
[16]=>
int(1)
[17]=>
int(1)
[18]=>
int(1)
[19]=>
int(1)
}
[11]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[12]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[13]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[14]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[15]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[16]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(1)
[6]=>
int(1)
[7]=>
int(1)
[8]=>
int(1)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(1)
[12]=>
int(1)
[13]=>
int(1)
[14]=>
int(1)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[17]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(1)
[6]=>
int(1)
[7]=>
int(1)
[8]=>
int(1)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(1)
[12]=>
int(1)
[13]=>
int(1)
[14]=>
int(1)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[18]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(1)
[6]=>
int(1)
[7]=>
int(1)
[8]=>
int(1)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(1)
[12]=>
int(1)
[13]=>
int(1)
[14]=>
int(1)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
[19]=>
array(20) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(0)
[5]=>
int(0)
[6]=>
int(0)
[7]=>
int(0)
[8]=>
int(0)
[9]=>
int(1)
[10]=>
int(1)
[11]=>
int(0)
[12]=>
int(0)
[13]=>
int(0)
[14]=>
int(0)
[15]=>
int(0)
[16]=>
int(0)
[17]=>
int(0)
[18]=>
int(1)
[19]=>
int(1)
}
}
0 … sind Freie Flächen
2 … sind Stühle
Um das ganze zu Bestuhlen durchgehe ich das Array und prüfe ob ein Stuhl Platz hat (also ob kein geschützter Bereich in die Fläche des Stuhls ragt), falls ja wird ein Stuhl gesetzt.
Das funktioniert auch alles wunderbar nur will ich aus dem Ganzen jetzt eine Grafik erstellen und da habe ich ein paar Probleme.
Zum Erstellen der Grafik berechne ich mir durch die Ausmaße der Grafik und des eigentlichen Raumes welche Größe die Rasterfelder haben (zB. 10 x 10 px).
Jetzt durchgehe ich das Array mit einer foreach Schleife und frage jeden Rasterpunkt ab welchen wert er hat und erzeuge dementsprechend ein Rechteck in der entsprechenden Farbe.
Mein Problem ist jetzt dass das Array mit dem Raster zwar vollständig ist, aber die Grafik wird je nach Größe des Raumes abgeschnitten, dh. es werden zB. nur 2 Rasterzeilen gezeichnet, komisch ist allerdings wenn ich mir die Werte in der Schleife ausgeben lasse sehe ich dass eigentlich das komplette Raster verarbeitet wird.
Ich komm irgendwie nicht auf die Lösung, würde mich sehr freuen wenn mir jemand Helfen könnte.
Meine Funktion zum Erstellen des Bildes:
PHP:
<?
///////////////////////////////////
//// Image Berechnen ////
function make_image() {
$imgWidth = $this->IMAGE_CONFIG['width']; // Breite des Bildes zB. 400 Pixel
$imgHeight = $this->IMAGE_CONFIG['height'];// Hoehe des Bildes zB. 600 Pixel
$rWidth = $this->IMAGE_CONFIG['raster_px_width']; // Breite eines Rasterpunktes in Pixel
$rHeight = $this->IMAGE_CONFIG['raster_px_height']; // Breite eines Rasterpunkte in Pixel
$im = imagecreate($imgWidth, $imgHeight);
foreach ($this->ROOM_RASTER as $keyLength => $valLength) {
foreach ($this->ROOM_RASTER[$keyLength] as $keyWidth => $valWidth) {
$curRasIndex = $valWidth; // wert des aktuellen Rasterpunktes zb. 1, 0 oder 2
/*
Array fuer Farben:
$this->IMAGE_CONFIG['color_config'] = array (
"0" => array( "name" => "white", "red" => 255, "green" => 255, "blue" => 255 ),
"1" => array( "name" => "gray", "red" => 159, "green" => 159, "blue" => 159 ),
"2" => array( "name" => "green", "red" => 92, "green" => 202, "blue" => 90 ),
"3" => array( "name" => "red", "red" => 250, "green" => 49, "blue" => 49 ),
);
*/
$curColor = imagecolorallocate($im, $this->IMAGE_CONFIG['color_config'][$curRasIndex]['red'], $this->IMAGE_CONFIG['color_config'][$curRasIndex]['green'], $this->IMAGE_CONFIG['color_config'][$curRasIndex]['blue']);
# echo "cur Val Y: $keyLength X: $keyWidth ";
// Kooridinate fuer aktuellen Rasterbereich im Bild berechnen
$x1 = $keyWidth * $rWidth; // zB. 1 x 10px = 10 horizontal
$y1 = $keyLength * $rHeight; // zB. 1 x 10px = 10 vertikal
$x2 = $x1 + $rWidth;
$y2 = $y1 + $rHeight;
# echo "| Farbe: ".$this->IMAGE_CONFIG['color_config'][$curRasIndex]['name']." X1: $x1 Y1: $y1 X2: $x2 Y2: $y2 \n";
imagefilledrectangle($im, $x1, $y1, $x2, $y2, $curColor); // Rechteck fuer aktuellen Rasterpunkt erstellen
}
}
imagejpeg($im,'plan.jpg');
}
///////////////////////////////////
?>
Und so sieht das Bild aus dass generiert wird: