Nur Zahlen ohne Einheiten sind erlaubt, Listenpunkte müssen exakt mit ',' separiert werden, beides nur für das PHP-Skript. Generell gibt es keine gute Kontrolle von unsinnigen Werten, selber aufpassen!
Beschreibt ein graphisches Element oder eine Symmetriegruppe in Polarkoordinaten, im folgenden polar genannt. Einfachste sinnvolle Anwendung ist ein gleichmäßiges Polygon oder allgemein, um zweidimensionale diskrete Rotationsgruppen zu erforschen. Eine andere Anwendung ist das Erzeugen eines Loches in einem gleichmäßiges Polygon. Durch die Wahl der Semantik der Attribute und der Interpretation nicht angegebener Attribute ist es möglich, einfache Objekte nur mit wenigen Attributen oder Punkten in einem Attributwert zu erzeugen. Kompliziertere Objekte können definiert werden, wenn der komplette Satz von Attributen und Semantik von Attributwerten von fortgeschrittenen Autoren ausgeschöpft wird.
cx
= "<Koordinate>"
Die x-Achsenkoordinate des Zentrums des polar.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '0' angegeben.
Animierbar: Ja.
cy
= "<Koordinate>"
Die y-Achsenkoordinate des Zentrums des polar.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '0' angegeben.
Animierbar: Ja.
n
= "<ganze Zahl>"
Die Zahl der Ecken des polar. Bei einem negativen oder null n wird das polar
nicht angezeigt.
Für n="1" kann das polar zu einem Punkt degeneriert sein,
für n="2" kann das polar zu einer Linie degeneriert sein, falls
keine nicht trivialen Werte für andere Attribute angegeben werden.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '3' angegeben.
Falls versehentlich keine ganze Zahl angegeben ist, wird ceil(n) als Wert verwendet, also
aufgerundet.
Animierbar: Ja, nur diskrete Animation, nicht additiv.
turns
= "<Zahl>"
Die Zahl der Runden, um die Ecken anzuordnen.
Für Details siehe Beschreibung unten.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '1' angegeben.
Man beachte, daß für turns="0" das polar zu einer Linie oder einem Punkt degeneriert.
Das Vorzeichen bestimmt die Richtung des Fortschrittes von einer Ecke zur nächsten.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced).
offset
= "<Zahl>"
Winkelversatz zur Darstellung.
Der Drehversatz relativ zur x-Achse des aktuellen Nutzerkoordinatensystems für die Punkte.
Eine Einheit einer Zahl entspricht einer Drehung um 360/n Grad.
Für Details siehe Beschreibung unten.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '0' angegeben.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced).
z
= 0|1 oder <ganze Zahl>?
Pfad geschlossen oder nicht. 0 nicht geschlossen, sonst geschlossen.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '1' angegeben.
(Falls etwas anderes als 0 oder 1 spezifiziert ist, wird 1 für die 0|1 Variante; aktuell ist
die andere Variante implementiert, siehe unten.)
Animierbar: Ja, nur diskret, nicht additiv oder gleichmäßig (paced).
Diskussion: Die Funktionalität von z kann erweitert werden auf die Zahl separierter Fragmente (M/m Kommandos), geschlossen oder offen (z positiv oder negativ). Die Implementierung ist aktuell nicht komplett getestet und nicht weiter im Text auf dieser Seite erklärt. Falls n kein Vielfaches von Betrag von z > 0 ist, werden aktuell die letzten Werte wiederholt, um die Liste aufzufüllen.
r
= "<Liste von Zahlen>"
Liste von Radien für die entsprechenden Ecken des polar. Radien können
positiv, negativ oder null sein.
Falls die Zahl der Listenpunkte größer als n ist, werden die letzten überflüssigen
Listenpunkte ignoriert.
Falls die Zahl der Listenpunkte kleiner als n ist, werden die letzten überflüssigen
Listenpunkte wiederholt.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '0' angegeben.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced). Falls die Zahl der Listenpunkte innerhalb der Animation variiert wird, wird die Regel zur Ignorierung und Wiederholung von Listenpunkten auf jeden einzelnen Animationswert angewendet.
r1
= "<Liste von Zahlen>"
r2
= "<Liste von Zahlen>"
Liste von Radien für die entsprechenden Kontrollpunkte des polar. Radien können
positiv, negativ oder null sein.
Falls die Zahl der Listenpunkte größer als n ist, werden die letzten überflüssigen
Listenpunkte ignoriert.
Falls die Zahl der Listenpunkte kleiner als n ist, werden die
Listenpunkte wiederholt.
Falls das Attribut nicht angegeben ist, wird die gleiche Radienliste wie für das
Attribut r angenommen.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced). Falls die Zahl der Listenpunkte innerhalb der Animation variiert wird, wird die Regel zur Ignorierung und Wiederholung von Listenpunkten auf jeden einzelnen Animationswert angewendet.
dr
= "<Liste von Zahlen>"
Liste von Punkt-zu-Punkt-Deltas für den Radius, erstens für Punkte, zweitens
und drittens für Kontrollpunkte. Für Details siehe unten.
Falls die Zahl der Listenpunkte größer als 3 ist, werden die letzten überflüssigen
Listenpunkte ignoriert.
Falls die Zahl der Listenpunkte kleiner als 3 ist, werden die
unspezifizierten Zahlen als 0 angenommen.
Das Attribut kann hilfreich sein, um (diskrete) spiralartige Strukturen zu definieren.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced).
fractions
= "<Liste von Zahlen>"
Liste von anteiligen Rundenabweichungen für die entsprechenden Ecken des polar.
Der Anteil wird relativ zur Winkelposition des Eckpunktes eines regulären Polygons
genommen. Die Einheit eines Anteils ist turns/n (falls n keine positive Zahl ist,
wird das polar nicht angezeigt).
Falls die Zahl der Listenpunkte größer als n ist, werden die letzten überflüssigen
Listenpunkte ignoriert.
Falls die Zahl der Listenpunkte kleiner als n ist, werden die
Listenpunkte wiederholt.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '0' angegeben.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced). Falls die Zahl der Listenpunkte innerhalb der Animation variiert wird, wird die Regel zur Ignorierung und Wiederholung von Listenpunkten auf jeden einzelnen Animationswert angewendet.
f1
= "<Liste von Zahlen>"
f2
= "<Liste von Zahlen>"
Liste von anteiligen Rundenabweichungen für die entsprechenden Kontrollpunkte des polar.
Der Anteil wird relativ zur Winkelposition des Eckpunktes eines regulären Polygons
genommen. Die Einheit eines Anteils ist turns/n (falls n keine positive Zahl ist,
wird das polar nicht angezeigt).
Falls die Zahl der Listenpunkte größer als n ist, werden die letzten überflüssigen
Listenpunkte ignoriert.
Falls die Zahl der Listenpunkte kleiner als n ist, werden die
Listenpunkte wiederholt.
Falls das Attribut nicht angegeben ist, wird die gleiche fractions-Liste wie für das
Attribut fractions angenommen.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced). Falls die Zahl der Listenpunkte innerhalb der Animation variiert wird, wird die Regel zur Ignorierung und Wiederholung von Listenpunkten auf jeden einzelnen Animationswert angewendet.
df
= "<Liste von Zahlen>"
Liste von Punkt-zu-Punkt-Deltas für den Winkel in turns/n, erstens für Punkte, zweitens
und drittens für Kontrollpunkte. Für Details siehe unten.
Falls die Zahl der Listenpunkte größer als 3 ist, werden die letzten überflüssigen
Listenpunkte ignoriert.
Falls die Zahl der Listenpunkte kleiner als 3 ist, werden die
unspezifizierten Zahlen als 1 angenommen.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced).
i
= "<Zahl>"
Die Zahl der Eckens eines zusätzlichen Polygons (Inverter genannt).
Dies ist vorgesehen, es zu ermöglichen, ein Loch in einer Form zu erzeugen.
Für ein i kleiner als 3 wird dieses Pfadfragment nicht angezeigt.
Falls das Attribut nicht angegeben ist, ergibt das den gleichen Effekt als sei '4' angegeben.
Falls versehentlich keine ganze Zahl angegeben ist, wird ceil(i) als Wert verwendet, also
aufgerundet.
Animierbar: Ja, nur diskrete Animation, nicht additiv.
ir
= "<Zahl>"
Radius für den zusätzlichen Invertor. Der Radius kann
positiv, negativ oder null sein.
Falls das Attribut nicht angegeben ist, besteht der Effekt darin, daß
das zusätzliche Pfadfragment Inverter nicht angezeigt wird.
Besonders wenn i größer als 2 ist und der Betrag von von ir ist etwa
zweimal größer als der größte Wert der r-Liste, liegt das polar komplett
komplett im Inverter, was bedeutet, abhängig von der fill-rule und
der Richtung des polar und des Inverters kann das polar ein Loch
im Invertor erzeugen.
Animierbar: Ja, nicht additiv oder gleichmäßig (paced).
Zuerst werden die Listen für r und fractions komplettiert bezüglich der Regeln zum Ignorieren und Wiederholen von Listenpunkten.
Das Resultat sind Listen r(j), r1(j), r2(j) mit j von 0 bis n-1 und Listen fractions(j), f1(j), f2(j), mit j von 0 bis n-1. dr0,dr1,dr2 sind die Listenpunkte von dr, df0, df1,df2 sind die Listenpunkte von df.
Man beachte, daß die Formeln unten zu einfachen geraden Linien vereinfacht werden können (L statt C mit folgenden cx/y), falls keine f1, f2, r1, r2, dr1, dr2, df1, df2 angegeben sind.
Die Koordinaten x(j) und y(j) für jede Ecke werden wie folgt bestimmt:
Winkel: o0 = offset*2*Pi/n * turns a(j) = o0 + (j*df0+fractions(j))*2*Pi/n *turns b(j) = o0 + (j*df1+f1(j))*2*Pi/n *turns c(j) = o0 + (j*df2+f2(j))*2*Pi/n *turns Radien: (Listenwerte für dr werden als dr0,dr1,dr2 geschrieben) ra(j)=r(j)+j*dr0 rb(j)=r1(j)+j*dr1 rc(j)=r2(j)+j*dr2 Punkte: x(j) = cx + ra(j)*cos(a(j)) y(j) = cy + ra(j)*sin(a(j)) cx1(j) = cx + rb(j)*cos(b(j)) cy1(j) = cy + rb(j)*sin(b(j)) cx2(j) = cx + rc(j)*cos(c(j)) cy2(j) = cy + rc(j)*sin(c(j))
Bestimmung eines äquivalenten Pfadattributes d:
for j=0 to n-1 if (z) { if(j==0) { path ="M x(j) y(j) C cx1(j) cy1(j) cx2(j) cy2(j) " } else { path .="x(j) y(j) cx1(j) cy1(j) cx2(j) cy2(j) " } } else { if ((j==0) AND (n>1)){ path ="M x(j) y(j) C cx1(j) cy1(j) cx2(j) cy2(j) " } else if (j==0) { path ="M x(j) y(j)" } else if (j <(n-1)) { path .="x(j) y(j) cx1(j) cy1(j) cx2(j) cy2(j) " } else { path .="x(j) y(j) " } } endfor if !z pd = path else pd = path . "x(0) y(0)Z" endif
Pfad für zusätzliches Pfadfragment Inverter-Polygon:
a = j*2*Pi/i x(j) = cx + ir*cos(Pi/i - a) y(j) = cy + ir*sin(Pi/i - a) invertor="M x(0) y(0) L" for j=1 to i-1 invertor .="x(j) y(j) " endfor invertor .="x(0) y(0)Z"
Falls der Inverter nicht angezeigt wird (ir nicht angegeben oder i kleiner als 3): Wert
vom Attribut d= pd
sonst d .= invertor
a) Einfaches reguläres Polygon, konvex
turns="1"
z="1"
fractions="1"
cy, cy irgendwelche sinnvollen Werte
r exakt ein sinnvoller Wert, zum Beispiel 100
n irgendein sinnvoller Wert größer als 2
b) einfaches symmetrisches Polygon, konkav, 'Stern'
turns="1"
z="1"
fractions="1"
cy, cy irgendwelche sinnvollen Werte
r exakt zwei sinnvolle Werte mit gleichem Vorzeichen
n irgendein sinnvoller Wert größer als 2
c) symmetrisches Polygon, komplexer 'Stern' mit Überschneidungen
turns="1"
z="1"
fractions="1"
cy, cy irgendwelche sinnvollen Werte
r exakt zwei sinnvolle Werte mit unterschiedlichem Vorzeichen
n irgendein sinnvoller Wert größer als 2
d) Reguläres Polygon, mögliche Überschneidungen, ein anderer 'Stern'-Typ
z="1"
fractions="1"
cy, cy, n irgendwelche sinnvollen Werte
r exakt ein Wert
n irgendeine Zahl größer als 4
turns eine ganze Zahl ohne gemeinsamen Faktor mit n
(turns kann immer nicht größer als n gewählt werden, ohne einen Figurtyp zu verpassen).
e) Symmetrisches Polygon, komplexer mit guter Kombination von n und turns
z="1" fractions="1"
cy, cy, n irgendwelche sinnvollen Werte
r: k Werte
n = k * j mit j größer als 2,
turns eine ganze Zahl ohne gemeinsamen Faktor mit n
(turns kann immer nicht größer als n gewählt werden, ohne einen Figurtyp zu verpassen).