Kreisbogen

Eine der grundlegendsten Funktionen jeder Grafikbibliothek ist das Zeichnen eines Ausschnitts aus einem Kreis. Ausgerechnet diese Funktion fehlt uns aber in PDF. Wir haben lediglich die bekannte Funktion für Bézierkurven. Wie wir aber aus dem Kapitel über Linien und Kurven wissen, lassen sich 90° Kurven mit ausreichender Genauigkeit als Bézierkurven darstellen. Das geht auch für andere Winkel. Nur die Formeln sind komplizierter.

0° - 90°

Hier ein Beispiel mit der Anordnung der Punkte. Der Winkel beträgt in diesem Fall 80°.

Auch hier müssen wir zuerst den Abstand zwischen P0 und P1 berechnen. Die folgende Formel ist nicht exakt, aber eine in den meisten Fällen ausreichend genaue Näherung:

$$k=\left(\frac{\alpha}{90°}\right)^{1.053}\frac{4}{3}\left(\sqrt{2}-1\right)$$

Wobei r der Radius und α der Winkel in Grad ist. Falls wir den Winkel in Radians haben (wie im Computerbereich häufig), so muss die Formel folgerichtig so lauten:

$$k=\left(\frac{2\alpha}{\pi}\right)^{1.053}\frac{4}{3}\left(\sqrt{2}-1\right)$$

Das Resultat k ist dabei im Verhältnis zum Radius, und somit bei 0° - 90° ein Wert im Bereich 0 bis etwa 0,5523.

Um jetzt die eigentlichen Positionen zu berechnen gehen wir zunächst mal davon aus, dass der Kreismittelpunkt auf dem Nullpunkt liegt, der Anfang des Bogens bei 0° (ganz Rechts auf dem Kreis), und der Bogen im Gegenuhrzeigersinn gezeichnet wird. Damit lassen sich die Koordinaten der 4 Punkte folgendermassen errechnen.

x0 = r
y0 = 0
x1 = r
y1 = r * k
x2 = r * (cos(α) + k * sin(α))
y2 = r * (sin(α) − k * cos(α))
x3 = r * cos(α)
y3 = r * sin(α)

Um einen Kreisbogen im Uhrzeigersinn zu erhalten, negiert man einfach die Y-Koordinaten. Nun kann man Transformation verwenden, um den Bogen an die gewünschte Stelle zu verschieben, und mittels Rotation den gewünschten Startwinkel zu erreichen.

Häufig wird übrigens für die Berechnung der Punkte mit einem Radius von 1 gearbeitet, und der Bogen zum Schluss per Skalierung auf die richtige Grösse gebracht. Dass macht es auch einfacher, einen Ausschnitt aus einer Ellipse darzustellen.

90° - 360°

Für grössere Winkel als 90° ist die vorgestellte Formel nicht geeignet. Statt dessen empfiehlt es sich in diesem Fall, je nach Bedarf 1 bis 3 90° Segmente zu berechnen und aneinanderzuhängen. Zum Schluss berechnet man den restlichen Winkel (der nun kleiner oder gleich 90° sein sollte), und hängt diesen noch an. Den resultierenden Pfad kann man nun wie gehabt an die richtige Stelle verschieben, rotieren und allenfalls skalieren.

korrekte Formel

Die oben beschriebene Formel ist, wie gesagt, nur eine Näherung. Wenn es mathematisch exakt sein soll, kann man statt dessen folgenden Formelsatz zur Berechnung von k verwenden. Wie bei der obigen Formel ist k im Verhältnis zum Radius, und wie oben ist die Formel nur für Kreisbogen bis 90° geeignet. Achtung: Ein Winkel von 0° führt zu einer Division durch 0.

$$c = cos\left(\frac{\alpha}{2}\right)$$ $$t = tan\left(\frac{\alpha}{2}\right)$$ $$x = \frac{1-0.25c}{0.75}-c$$ $$k = \sqrt{x^2+\left(\frac{x}{t}\right)^2}$$

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
P R N S Y
 
grafik/kreisbogen.txt · Zuletzt geändert: 2012/12/26 11:43 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC0 1.0 Universal
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki