joerghuelsermann.de SVG Grundformen

SVG Grundformen

Auf verschiedene Weisen kann man in SVG das selbe Ergebnis erzielen. Das fängt bei den Grundformen im Grunde schon an. In den folgenden Beispielen möchte ich verschiedene Wege vorstellen. Mehr aber aus dem Grunde um zu zeigen das SVG sehr leistungsfähig ist. Anhand der Beispiele möchte ich aber auch gleich auf weitere Funktionen in SVG aufmerksam machen auch wenn sie im betreffenden Falle nicht unbedingt sinnvoll erscheinen. Im Prinzip ist jede Grundform durch einen Pfad ersetzbar und man könnte mit dieser Methodik alleine sämtliche Formen erstellen.

Quadrat zeichnen

Zuerst habe ich das Quadrat mit einem Rechteck gezeichnet. Das stellt die normale Vorgehensweise dar. Alternativ habe ich einen Pfad für das Quadrat verwendet. Aber es würde sich auch ein Polygon wie auch eine Linie dafür eignen.

Quadrate mit SVG erstellen
<rect x="5" y="5" width="90" height="90" fill="maroon" />
<path d="M105,5 h90 v90 h-90 Z" fill="green" />
<polygon points="5,105 5,195 95,195 95,105" fill="navy" />
<line x1="105" y1="150" x2="195" y2="150" stroke="gray" stroke-width="90" />

Kreis zeichnen

Zuerst habe ich wieder die zutreffende Funktion für einen Kreis verwendet. Danach habe ich ein Rechteck mit abgerundeten Ecken genommen. Auch durch eine Ellipse wo beide Radien denselben Wert haben gelangt man zu einem Kreis. Und wenn man 2 Kreisbögen um 180° durch einen Pfad aufbaut erhält man auch einen Kreis.

Kreise mit SVG erstellen
<circle cx="50" cy="50" r="45" fill="maroon" />
<rect x="105" y="5" rx="45" ry="45" width="90" height="90" fill="green" />
<ellipse cx="50" cy="150" rx="45" ry="45" fill="navy" />
<path d="M150 105 a45,45 0 0,1 0,90 A45,45 0 0,1 150,105" fill="gray" />

Ellipsen

Auch Ellipsen sind mit Pfaden darstellbar. Je nach Breite und Höhe der beiden Radien ergebn sich leichte Unterschiede im Aubau des Pfades.

Erstellung von Ellipsen
<ellipse cx="50" cy="50" rx="45" ry="30" fill="maroon" />
<path d="M105 50 a45,30 0 0,1 90,0 a45,30 0 0,1 -90,0" fill="green" />
<ellipse cx="50" cy="150" rx="30" ry="45" fill="navy" />
<path d="M150 105 a30,45 0 0,1 0,90 a30,45 0 0,1 0,-90" fill="gray" />

Polygone und Polylinien

Polygone und Polylinien sind durch Pfade ebenso ersetzbar. Im Grunde stellen sich auch nur minimale Unterschiede dar, wenn man Pfade mit absoluten Werten verwendet.

Polygone und Polylinien durch Pfade ersetzen
<polyline points="5,5 95,95 5,95 95,5" stroke="maroon" stroke-width="3" fill="none" />
<path d="M105,5 L195,95 L105,95 L195,5" stroke="green" stroke-width="3" fill="none" />
<polygon points="5,105 95,195 5,195 95,105" stroke="navy" stroke-width="3" fill="none" />
<path d="M105,105 L195,195 L105,195 L195,105 Z" stroke="gray" stroke-width="3" fill="none" />

Linien

In diesem Beispiel ersetzen wir vier Linien durch zwei Angaben mit Pfaden. Der Unterschied bei den Pfaden liegt darin das einmal absolute Angaben verwendet werden und das letzte Beispiel auf relativen Werten besteht. Der Vorteil der Angabe der relativen Werte wäre das wenn man die Form verschieben möchte nur den Startwert anpassen müsste. Sicher wäre so eine Verschiebung in den beiden anderen Fällen auch leicht mit dem transform Attribut mit entsprechenden Werten für translate möglich.

Linien und die Alternative Pfade
<line x1="5" y1="5" x2="95" y2="95" stroke="maroon" stroke-width="3" />
<line x1="5" y1="95" x2="95" y2="5" stroke="maroon" stroke-width="3" />
<line x1="50" y1="5" x2="50" y2="95" stroke="maroon" stroke-width="3" />
<line x1="5" y1="50" x2="95" y2="50" stroke="maroon" stroke-width="3" />
<path d="M105,5 L195,95 M105,95 L195,5 M150,5 V95 M105,50 H195" stroke="green" stroke-width="3" />
<path d="m5,105 l90,90 m-90,0 l90,-90 m-45,0 v90 m-45,-45 h90" stroke="navy" stroke-width="3" />

Gleichseitiges Dreieck

Um ein gleichseitiges Dreieck zu erstellen benötigt man nur etwas Mathematik.

Gleichseitiges Dreieck
<polygon fill="maroon" points="25,175 175,175 100,45.09618943" />

Dreieck

Ein weiteres Dreieick

Dreieck
<polygon fill="maroon" points="25,175 175,175 100,25" />

Rechtwinkliges Dreieck

Da ein rechtwinkliges Dreieck auch eine Form ist die man häufiger benötigt stelle ich zwei Methoden vor.

Rechtwinkliges Dreieck
<polygon fill="maroon" points="25,175 175,175 100,100" />
<path fill="navy" d="M25,25 L175,25 L100,100 Z" />

Achteck

Näherungsweise kann man mit Polygonen oder Pfaden auch Achtecke erstellen. Zumindest kann man mit Angabe von ganzen Zahlen zu einem vernünftigen Ergebnis kommen.

Achteck
<polygon points="100,1 30,30 1,100 30,170 100,199 170,170 199,100 170,30" transform="rotate(22.5,100,100)" fill="maroon" />
<path d="m300,1 l-70,29 l-29,70 l29,70 l70,29 l70,-29 l29,-70 l-29,-70 z" transform="rotate(22.5,300,100)" fill="navy" />

Sechseck

Auch für Sechsecke existieren vernünftige Näherungswerte um mit ganzen Zahlen diese Form erstellen zu können.

<polygon id="hex" points="0,30 15,4 45,4 60,30 45,56 15,56" fill="maroon" />
<path d="m60,30 l15,-26 l30,0 l15,26 l-15,26 l-30,0 z" fill="navy" />

Relative und Absolute Pfade

Bewusst habe ich auf dieser Seite relative und absolute Angaben für Pfade verwendet. Auch in gemischter Form wurden diese Angaben verwendet. Kleine Buchstaben entsprechen relativen Angaben und große Buchstaben besitzen absolute Koordinatenwerte. Meiner Ansicht nach sind die relativen Werte in der Regel vorteilhafter.