kleinerChemiker
Here to stay
|
Ich will ein Raster aus lauter Sechsecken zeichnen. Eigentlich denke ich, daß ich der COde stimmen müßte, tut er aber nicht. Anstatt Sechsecken werden Rechtecke gezeichnet. Der Punkt ganz rechts und der Punkt ganz links auf Höhe des Mittelpunktes werden nicht mitgezeichnet. Hier das Ergebnis und hier der dazugehörige Code: <?php
$seite = 20;
$xoff = 50;
$yoff = 50;
$xzahl = 40;
$yzahl = 40;
$sin = sin(deg2rad(60));
$cos = cos(deg2rad(60));
function sechseck ($x, $y, $s) {
global $sin, $cos;
$e[] = $x - $s*$cos;
$e[] = $y + $s*$sin;
$e[] = $x + $s*$cos;
$e[] = $y + $s*$sin;
$e[] = $x + $s*$cos;
$e[] = $y;
$e[] = $x + $s*$cos;
$e[] = $y - $s*$sin;
$e[] = $x - $s*$cos;
$e[] = $y - $s*$sin;
$e[] = $x - $s*$cos;
$e[] = $y;
foreach ($e as $t) {
$return[] = round($t);
}
#print_r($return);
return $return;
}
function raster ($x, $y, $s, $xa, $ya) {
global $sin, $cos;
header ("Content-type: image/png");
$im = imagecreate($s*$xa+2*$x, $ya*2*$sin*$s+2*$y);
$schwarz = ImageColorAllocate ($im, 0, 0, 0);
$weiss = ImageColorAllocate ($im, 255, 255, 255);
imagefill($im,0,0,$weiss);
for ($i = 0; $i <= $xa; $i++) {
for ($j = 0; $j < $ya; $j++){
$xt = $x + 2*$s*$i;
if ($i/2 == round($i/2)) {
$yt = $y + $j*2*$sin*$s - $sin*$s;
}
else {
$yt = $y + $j*2*$sin*$s;
}
imagepolygon($im, sechseck($xt, $yt, $s), 6, $schwarz);
}
}
Imagepng($im);
}
raster($xoff, $yoff, $seite, $xzahl, $yzahl);
?>
Bearbeitet von kleinerChemiker am 22.01.2008, 15:20 (solved)
|
Gegi
Here to stay
|
also bei mir werden 6ecke angezeigt...
|
Obermotz
Fünfzylindernazi
|
Gleichfalls
|
Nico
former person of interest
|
jo, aber gestern noch nicht, er hats anscheinend korrigiert
|
kleinerChemiker
Here to stay
|
ja, bin in der nacht draufgekommen und habs grad eben korrigiert. der fehler lag in der 6eck berechnung.
|
pupsy
Bloody Newbie
|
Also ich hab nur so ne art vierecke, kannst du kleiner Chemiker kannst du vieleicht den funktionierrenden Code nochmal Posten?? wäre super danke
|
kleinerChemiker
Here to stay
|
wie schon geschrieben, der fehler lag in der seckseck berechnung. wenn man sichs überlegt, ists eh klar. php
$seite = 20;
$xoff = 50;
$yoff = 50;
$xzahl = 40;
$yzahl = 40;
$sin = sin(deg2rad(60));
$cos = cos(deg2rad(60));
function sechseck ($x, $y, $s) {
global $sin, $cos;
$e[] = $x - $s*$cos;
$e[] = $y + $s*$sin;
$e[] = $x + $s*$cos;
$e[] = $y + $s*$sin;
$e[] = $x + $s;
$e[] = $y;
$e[] = $x + $s*$cos;
$e[] = $y - $s*$sin;
$e[] = $x - $s*$cos;
$e[] = $y - $s*$sin;
$e[] = $x - $s;
$e[] = $y;
foreach ($e as $t) {
$return[] = round($t);
}
#print_r($return);
return $return;
}
function raster ($x, $y, $s, $xa, $ya) {
global $sin, $cos;
header ("Content-type: image/png");
$im = imagecreate($s*$xa+2*$x, $ya*2*$sin*$s+2*$y);
$schwarz = ImageColorAllocate ($im, 0, 0, 0);
$weiss = ImageColorAllocate ($im, 255, 255, 255);
imagefill($im,0,0,$weiss);
for ($i = 0; $i <= $xa; $i++) {
for ($j = 0; $j < $ya; $j++){
$xt = $x + 2*$s*$i;
if ($i/2 == round($i/2)) {
$yt = $y + $j*2*$sin*$s - $sin*$s;
}
else {
$yt = $y + $j*2*$sin*$s;
}
imagepolygon($im, sechseck($xt, $yt, $s), 6, $schwarz);
}
}
Imagepng($im);
}
raster($xoff, $yoff, $seite, $xzahl, $yzahl);
|
pupsy
Bloody Newbie
|
Supi, danke das leuft super!
Eine frage hab ich noch, wie kann ich die einzelenen Sechsecke beschriften?
Also z.b oben links x1 / y1 ins zweite sechseck oben links x2 / y1 usw. ??
|
kleinerChemiker
Here to stay
|
z.b. in dem du nach imagepolygon noch was reinschreibst
|
pupsy
Bloody Newbie
|
auf die Idee kamm ich auch schon, bis jetzt hats aber noch nicht hingehauen
|
pupsy
Bloody Newbie
|
ich werds mal mit imagestring versuchen, oder gibts eine bessere löung?
|
kleinerChemiker
Here to stay
|
dafür ist imagestring ja da. ps: es gibt eine editfunktion
|
pupsy
Bloody Newbie
|
Yehhaa habs hin bekommen, kaum bringt man sein gehirn in wallung gehts auch schon ganz leicht danke für deine hilfe!! Eine frage hätte ich aber noch.... eigentlich sinds zwei 1) wie kann ich die sechseke mit farbe füllen? (nur die sechsecke nicht das ganze png) 2) wie kann ich die schsecke drehen so das die zwei parallelen seiten nicht horizontal stehen sondern senkrecht? Also eigentlich sind ja immer zwei seiten Parallel (liegt in der natur des secksecks ) ich will die sechsecke einmal um 90 grad drehen. Das erste Problem hab ich inzwischen hin bekommen, beim zweiten steh ich aber ziemlich auf dem schlauch
Bearbeitet von pupsy am 17.04.2008, 10:54
|
kleinerChemiker
Here to stay
|
ad 1: du könntest dir ruhig die php-dok anschauen, dann würdest du schnell über imagefilledpolygon() stolpern.
ad 2: überleg dir, wie die punkte in der funktion sechseck berechnet werden. dann sollte es ein leichtes sein, das 6eck zu drehen wie es dir beliebt.
|