Formen zeichnen in PHP

ich beschäftige mich gerade mit dem Zeichnen von Formen in PHP

Ellipsen, Rechteche und Linien hab ich schon ausgetestet (gefüllte und ungefüllte) nur eine Funktion macht mir noch Schwierigkeiten um komplexere Formen zu zeichen benötigt man wahrscheinlich die Funktion ‚imagepolygon‘. mein kleines zwischenziel ist es dreiecke zu zeichen (gleichseitige und gleichschenklige sowie welche mit verschiedener seitenlänge und winkeln). und später sollen auch noch komplexere formen folgen.
hauptproblem ist das unverständnis der koordinaten welche man bei imagepolygon als array übergeben soll.
gibts zufällig schon fertige formeln etc um solche formen zu zeichnen?

Hi…

Was für Probleme hast Du denn damit?
Im Prinzip ist das ganze ganz leicht…

int imagepolygon ( int im, array points, int num_points, int col)

ImagePolygon() erzeugt ein Vieleck innerhalb von im. Points ist ein PHP-Array, das die Werte für die Eckpunkte des Polygons enthält, z.B. Points[0] = x0, Points[1] = y0, Points[2] = x1, Points[3] = y1 usw. Num_points enthält die Gesamtzahl an Points (Points[n]).

so - das nun mal in simplified german…
so sieht es in etwa aus:
imagepolygon ( $im, $koordinaten, count($koordinaten)/2, $col);
$im ist klar - der Zeiger für welches Bild das gemacht werden soll.
$col kennst Du sicher auch schon.
$koordinaten sind im Prinzip nur die X und Y Koordinaten für die Eckpunkte.
Wobei abwechselnd eine x und eine y koordinate eingetragen wird…
sprich das array wird z.b. so aufgebaut:
$koordinaten[] = 10; //links
$koordinaten[] = 10; //oben
$koordinaten[] = 100; //rechts
$koordinaten[] = 10; //oben
$koordinaten[] = 10; //links
$koordinaten[] = 100; //unten

Du bewegst Dich mit den Zahlen also abwechselnd von links nach rechts und von oben nach unten.
Du kannst u.U. mit input type=image arbeiten und Dir die Ausgabe des Formulars mit print_r($_POST); ansehen.
Es gibt da zwei Angaben für x und y koordinate auf dem Punkt, den Du geklickt hast.
Damit hab ich mir schon mal so eine Imagepolygon-Form gebastelt…

Die Nummer der Eckpunkte ist denke ich klar, oder?

wichtig ist noch folgendes:
$koordinaten[] = 10; //links
$koordinaten[] = 10; //oben
denn - wir wollen ja wieder zum Ursprungspunkt zurück, nicht wahr? :wink:

nachdem die Anzahl der Punkte im normalfall ja auch der Anzahl der Koordinaten / 2 entsprechen sollte kann man das denke ich auch mit der oberen Formel lösen.
Nur in Sonderfällen dürfte da ein anderer Wert benötigt werden…

Grüße
Munich

ok is mir schon einiges klarer :smiley:
aber kann man eigentlich solche formen auch drehen???

imagerotate funktioniert nur bei kompletten bildern (hat zumindest den anschein)

jein…
drehen kannst Du ja mit Vektorverschiebung lösen…
Du musst halt die Koordinaten neu ausrechnen und setzt es dann passend rein…
Alternativ wird das Bild eben komplett erzeugt und das Ergebnis dann in ein neues Bild eingefügt…
Mit transparenzen ist das vielleicht sogar ohne Probleme möglich.
Allerdings hast Du so durch das gif/png speichern halt wieder Qualitätsverluste drin…
Deswegen würde ich auf die Mathematische herleitung zurückgreifen…

das hab ich mir gedacht :smile:
naja dann werd ich mal bei gelegenheit mein mathebuch rauskramen und mal bissel rumrechnen

danke für die hilfe