Polar Simulation eines Elementes polar. Siehe den XHTML-Teil dieses Komponentendokumentes für Details.

Spezifiziere das polar

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!

Zentrum (viewBox zentriert bei 0):
cx (Zahl):
cy (Zahl):
Eckenzahl, Drehungen und Versatz, geschlossen?:
n (Ganze Zahl >0):
Drehungen, turns (Zahl):
Versatz, offset (Zahl):
z (0|1 (oder ganze Zahl)):
Radii:
r (Liste von Zahlen):

r1 (Liste von Zahlen):

r2 (Liste von Zahlen):
Radiale Änderung / Verschiebung pro Ecke; dr:
dr (Liste von 3 Zahlen):
Winkelabweichungen; Anteile:
fractions (Liste von Zahlen):

f1 (Liste von Zahlen):

f2 (Liste von Zahlen):
Winkeländerung /Verschiebung pro Ecke; df:
df (Liste von 3 Zahlen):
Inverter:
i (ganze Zahl):
ir (Zahl):
Nur zum Justieren:
fill (nur gültige Werte!)

stroke (nur gültige Werte!)

background-color (nur gültige Werte!)

stroke-width (Zahl):
stroke-opacity (0-1):
stroke-miterlimit (Zahl):

stroke-linejoin:
ausgewählt miter:
miter:
bevel:
round:
stroke-linecap:
ausgewählt round:
round:
butt:
square:
Malen:

Element polar

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.

Beispiele:

<polar r="100" /> ein gleichseitiges Dreieck mit einem Abstand von 100 zwischen dem Zentrum bei 0 und den Ecken.

<polar r="30,150,90" fractions="-0.5 0.2 0.3" /> einfaches Dreieck.

<polar r="100" cx="100" cy="50" /> oder
<polar r="100" transform="translate(100 50)" />
ein gleichseitiges Dreieck mit einem Abstand von 100 zwischen dem Zentrum bei (100,50) und den Ecken.

<polar r="100" n="5" /> ein Pentagon oder Fünfeck.

<polar r="100" n="5" turns="2" /> oder
<polar r="100" n="5" turns="-3" /> oder
<polar r="100" n="5" turns="3" /> oder
<polar r="100" n="5" turns="-2" /> ein Pentagram.

<polar r="100" n="4" offset="0.5" ir="300" /> Ein quadratisches Loch in einem Quadrat.

<polar r="100 50" n="12" /> ein einfacher gleichmäßiger 'Stern'.

<polar r="100" n="6" turns="2" z="2" offset="0.25" fractions="0,0,0,0.5,0.5,0.5" /> Davidsstern.

<polar r="100,50,160,20,120,40,140,60" fractions="0,-0.5,0,-1,0,0.3,0,0.2" n="8" /> ein einfacher ungleichmäßiger 'Stern'.

<polar r="100 -50" n="12" /> oder
<polar r="100 50" n="12" turns="7" /> ein komplexerer 'Stern' mit Überschneidungen.

<polar r="100" r1="0" r2="0" n="5" turns="-3" /> spitze, pentagramartige kubische Kurve.

<polar r1="100,75" n="24" ir="120" i="3" /> Basis für das Warnsymbol 'laser' (benötigt einen zusätzlichen zentrierten Kreis, eine Linie nach unten und eine Drehung um 90 Grad, um komplett zu sein).

<polar r="100,40,90,70" r1="0" r2="0" n="20" turns="3" /> komplexere spitze Kurve, andere 'turns'/Drehungen ebenfalls versuchen.

<polar r="100,50,75,25,75,50" r1="2" r2="2" n="30" turns="17" /> einfache, regelmäßige 'Sternenexplosion'.

<polar r="100,40,80,20,70,50,120,60,70,30,60,40" r1="1" r2="1" f1="0.4,0.6,0,0.2" f2="0.6,0.4,0,0.8" n="30" turns="17" z="5" /> unregelmäßige 'Sternenexplosion'.

<polar r="0" r1="120" r2="80" n="11" turns="-3" f1="0.7" f2="0.3" /> einfache symmetrische blumenähnliche Kurve.

<polar r="0" r1="120" r2="60" n="7" turns="2" f1="0" f2="0.6" dr="0, -6, 4" /> einfache asymmetrische blumenähnliche Kurve.

<polar r="100,-100" n="8" r1="-120 120" r2="-80 80" /> mehr 'Blumenenergie' ...

<polar r="100,-100" n="14" turns="8" r1="-120 120" r2="-80 80" f1="0.65" f2="-0.2" /> mehr 'Blumenenergie' ...

<polar n="30" turns="6" r1="120,100,80,60,40,20" r2="80,70,60,50,40,30" f2="-1" in="150" ir="64" /> mehr 'Blumenenergie' ...

<polar r="100,50" n="16" turns="7" fractions="0.5 -0.5" f1="-0.25 0.25" f2="-0.75 0.75" /> kompliziertere symmetrische kubische Kurve.

<polar n="81" z="27" turns="23" r="100,-50,-25" f1="-1" f2="-4" /> eine kompliziertere reguläre Gruppe von kubischen Kurven.

<polar n="81" z="27" turns="25" r="100,-50,-25" r1="-100,-25,50" r2="50,-25,-100" f1="5" f2="-7" i="300" ir="100" /> ... Mandala ...

<polar n="200" turns="-10" r="10" r1="10.6" r2="11.2" f1="0.3333" f2="0.6667" dr="1,1,1" z="0" /> Näherung Archimedische Spirale (geraten, nicht gerechnet).

Technische Details, Attribute:

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).

Wie werden die Pfaddaten für ein polar erzeugt?

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

Weitere typische Anwendungsbeispiele:

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).