Linie glätten 5

Wie in Linie glätten 4 versprochen, folgt nun das – im Vergleich zu 2 Polynomen 3. und 4. Grades – deutlich einfachere und trotzdem funktionierende Prinzip zur Bestimmung einer Tangente mit den beiden Nachbarpunkten.

Gegeben seien ein Anfangspunkt A, ein Mittenpunkt M und ein Endpunkt E, durch die eine geglättete Kurve verlaufen soll.
Gesucht ist die Tangente im Punkt M, die jener der von mir favorisierten Straklatte am nächsten kommt.
Tangentenvektor \( \vec m \) als Linearkombination der normierten Vektoren \( \vec a = \vec {AM} \) und \( \vec e = \vec {ME} \): \( \vec m = p \cdot \frac {\vec a}{\vert \vec a \vert} + \frac 1p \cdot \frac {\vec e}{\vert \vec e \vert} \)
Gewichtungsfaktor \( p \) ist dabei eine Potenz mit dem Quotienten der Vektorenbeträge als Basis und einem Gewichtungsexponenten \( q \) als Exponent: \( p = \left ( \frac { \vert \vec e \vert }{ \vert \vec a \vert } \right ) ^q = \left ( \frac { \vert \vec e \vert ^2 }{ \vert \vec a \vert ^2 } \right ) ^{q/2} \)
Der Tangentenwinkel \( \varphi \) ergibt sich zu: \[ \varphi = \arctan \frac {m_y}{m_x} = \arctan \frac {\left ( \vert \vec e \vert ^2 \right ) ^{0{,}5+q} a_y + \left ( \vert \vec a \vert ^2 \right ) ^{0{,}5+q} e_y}{\left ( \vert \vec e \vert ^2 \right ) ^{0{,}5+q} a_x + \left ( \vert \vec a \vert ^2 \right ) ^{0{,}5+q} e_x} \]
Damit lässt sich mit \( – \infty \le q \le + \infty \) der Tangentenwinkel \( \varphi \) beliebig zwischen den beiden Vektoren \( \vec a \) und \( \vec e \) einstellen.
Die Microsoft’sche Methode ergibt sich somit beim Gewichtungsexponenten \( q = -0{,}5 \).

Das Tabellenblatt Gewichtung dient der Bestimmung des Gewichtungsexponenten \( q \):

  • 5 unterschiedlichen Gewichtungsexponenten \( q \) lassen sich in Zelle B8 aktivieren, um die Vektoraddition \( \vec a_p + \vec e_p \) und den Verlauf der Segmente 1 und 2 im Diagramm zu veranschaulichen.
  • Wie in einem Falle von Linie glätten 4 liegen ja auch hier 2 Polynome 3. Grades vor. Um für den dortigen Fall mit A(-1;1), M(0;0) und E(1;2) den gleichen Tangentenwinkel zu erhalten, bräuchte es \( q=0{,}722557… \), was mit einer Abweichung von nur 2,2% “verdächtig” nahe an \( \frac {1}{\sqrt{2}} = 0{,}707106… \) liegt!
  • Der Kehrwert des Goldenen Schnittes mit \( \frac {\sqrt {5} – 1}{2} = 0{,}618033… \) wäre mir übrigens auch sehr willkommen gewesen. 😉

Im Tabellenblatt Spline werden an 4 Segmenten folgende Effekte demonstriert:

  • Tangentenlänge \( l \): Die Länge der Tangenten der 5 Punkte
  • Anzahl der Zwischenpunkte \( n \): Nach dem Grundsatz “So wenig wie möglich, so viel wie nötig” braucht es hierfür noch einen variablen Ansatz. Da der Gradient der Steigung im Allgemeinen an den Punkten größer ist, wurde die Verteilung der Punkte sinusförmig gewählt.
  • Spannung \( c \): In die einzelne Kurve eines kubisch hermiteschen Splines integriert, lässt sich damit der Verlauf zwischen den Punkten steuern: \( f(t) = (1 + 2 t) (1 – t)^2 p_1 + t^2 (3 – 2 t) p_2 + c t (1 – t) \left [ (1 – t) m_1 – t m_2 \right ] \). Standard sei 1, 0 führt zu einem Polygonzug und negative Werte rufen eine Schleifenbildung hervor.
  • Gewichtungsexponent \( q \): Mein Favorit ist \( \frac {1}{\sqrt{2}} \), Microsoft würde \( -0{,}5 \) verwenden.
  • Methode: “Geyer” ist der Versuch einer Verbesserung der Option “Linie glätten”, “Microsoft” ist der aktuelle Standard.
  • Verzerrung: “Unzulässig” bewirkt gleiche Achsen-Skalierungen durch die automatisierte Wahl geeigneter Achsen-Grenzen, “Zulässig” überlässt diese Wahl Excel.

Die folgende Datei enthält die beiden obig beschriebenen Tabellenblätter zum spielerischen Nachvollziehen meines Ansatzes: