Laden...

Quadratische Bezierkurve: Tangente in beliebigem Punkt berechnen?

Erstellt von srynoname vor 14 Jahren Letzter Beitrag vor 14 Jahren 5.285 Views
S
srynoname Themenstarter:in
223 Beiträge seit 2006
vor 14 Jahren
Quadratische Bezierkurve: Tangente in beliebigem Punkt berechnen?

Hallo,

ich habe eine quadratische Bezierkurve. Für einen beliebigen, gegebenen Punkt auf dieser Bezierkurve möchte ich die Steigung berechnen. Ich habe deshalb die erste Ableitung gebildet. Damit erhalte ich jedoch falsche Werte, obwohl ich mir eigentlich sicher bin, dass die Ableitung richtig ist (man findet sie auch so zumindest auf einer Seite im Netz). Ist es möglich, dass bei quadratischen Bezierkurven die Tangenten nicht einfach über die erste Ableitung bestimmt werden können? 🤔

Hier einmal meine Ableitung und Rechnung:
(siehe Anhang) Anmerkung: slope = Steigung

3.170 Beiträge seit 2006
vor 14 Jahren

Hallo,

Dein Ergebnis ist nicht verwunderlich, denn wenn Du die gleiche Ersetzung mit Pi -> xi in der Ursprungsgleichung vornimmst, ergibt sich diese zu B(t) = 400t und die Ableitung ist konstant 400.
Genauer gesagt mit P0 = 0, P2 = 2
P1 ergibt sich B(t) = 2tP1 und die Ableitung konstant zu 2*P1.
Mathematisch ist das also alles völlig korrekt, leider kenne ich mich mit Bezier-Kurven nicht weiter aus um Dir zu sagen wo der Fehler liegt.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

1.361 Beiträge seit 2007
vor 14 Jahren

Hi srynoname,

Für einen beliebigen, gegebenen Punkt auf dieser Bezierkurve möchte ich die Steigung berechnen.

Das ist leider nicht ganz so einfach. Denn beispielsweise Kurven wie diese hier gehen mehrfach durch ein und den selben Punkt. Wie ist denn nun die Steigung an diesem Punkt? Eben, nicht eindeutig definierbar.

Zweite Sache ist, dass Kurven im R^2 eben mehr darstellen können als nur die Graphen von Funktionen f(x)=y. Die Kurven können auch senkrecht nach oben gehen. Dann gibt es zu einem x mehrere y-Werte und die Steigung wäre gar nicht wirklich definiert. (bzw. "unendlich")

Wenn ich deine Skizze aber sehen, dann wird bei dir durch die Wahl deiner Stützpunkte sowas zwar nicht zugelassen (weil sie kontinuierlich auf der x-Achse verteilt sind). Also kann man das schon über nen Umweg berechnen.

über die erste Ableitung bestimmt

Ableitung wonach? Wenn du die Steigung im normalen Sinne haben willst, entspricht das dy/dx. Du berechnest aber dx/dt. Das hat also schonmal wenig miteinander zu tun und ist auch dein gedanklicher Fehler.

Und inhaltlich stimmt das auch mit den 400 natürlich. t läuft von 0 bis 1. Und deine x-Werte sind äuqidistanz von 0 bis 400 verteilt. und dx/dt ist nun die Geschwindigkeit mit der die x-Werte wachsen. Die ist eben überall konstant 400 weil du 400 Xs in einer t-Einheit durchläufst.

Aber kommen wir nun zur (Auf-)Lösung 😉
Wie schon gesagt, Kurven haben keine Steigung im eigentlichen Sinne mehr. Und sie haben sogar nichtmal überall eine einzige fest definierte Tangente (siehe Link aufs erste Bild).
Wenn die Kurve allerdings parametrisiert ist, dann können wir schon Tangenten zuweisen - das können bei solchen Doppelpunkten dann zwar mehrere sein, abhängig ob wir den Punkt mit t1 oder t2 besuchen, aber wir können welche zuweisen.

Und das tun wir mittels der Ableitungen dx/dt und dy/dt an einem gegebenen Punkt p(t).Diese beiden Komponenten bilden zusammen einen 2D-Tangentenvektor am Punkt p(t). (oder auch Tangentialvektor)
Wenn du nun durch deine Stützpunkte sicherstellst, dass keine senkrechten Abschnitte vorkommen, dann kannst du sogar den Anstieg dieses Tangentenvektors berechnen, indem du y-Komponente durch die x-Komponenten teilst. (Eben der Anstieg dieser Tangente)

Was du also berechnen musst, ist y'(t) / x'(t).

beste Grüße
zommi

S
srynoname Themenstarter:in
223 Beiträge seit 2006
vor 14 Jahren

Hallo,

ich halts mal kurz: Vielen Dank an dich, MarsStein, fürs kontrollieren!
Und super vielen Dank an zommi für die wirklich sehr ausführliche Erklärung! Jetzt weiß ich nicht nur wie es richtig geht, sondern auch warum es zuvor falsch war! Funktioniert nun alles prima! (Ich arbeite übrigens ausschließlich mit quadratischen Bezierkurven, d.h. eine Tangente schneidet auch nur in einem Punkt).

So schauts nun aus beim Mittelpunkt (x=200) und ein Viertel (x=100) 😃
(Die Tangente für den Mittelpunkt geht hier ab dem Mittelpunkt los, hätte wohl auch mal weiter nach links zeichnen sollen...)

Stolperfalle: Gerade mit Steigung 0 nicht darstellbar (Höhe = 0!). Einfach "künstlich" einen Wert ≤1 beim Ziel Y dazu addieren!