Parametrisierte Kurve < Funktionen < eindimensional < reell < Analysis < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 09:10 Do 23.04.2009 | Autor: | Rebell |
Aufgabe | Gegeben: Eine quadratische Bezierkurve:
fx(t) = (1-t)²+x1 + 2*t*(1-t)*x2 + t²*x3
fy(t) = (1-t)²+y1 + 2*t*(1-t)*y2 + t²*y3
t(0..1)
Stützpunkte: P1, P2, P3, Pt
Gesucht: Abstand des Punktes Pt zur Kurve
|
Hallo (Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt).
Ich habe die oben gegebene Kurvenfunktion mit einer gewissen "Dicke". Damit ist gemeint, dass jede Normale im Punkt von t eine Strecke der Länge d ist.
Nun möchte ich gern den Abstand eines Punktes zur Kurve messen, genauer gesagt möchte ich wissen, ob sich der Punkt auf der Dicke der Kurve befindet.
[Dateianhang nicht öffentlich]
Ich habe dazu zwei Lösungsmöglichkeiten.
Die erste, schnellerer aber ungenaue:
1. Ich berechne anhand der Pt-Koordinaten den t-Parameter der Kurve.
2. Diesen verwende ich um die entsprechenden x/y-Koordinante der Kurve zu ermitteln.
3. Habe ich den entsprechenden Punkt Ps auf der Kurve, kann ich die Abstände zum Punkt Pt messen.
4. Befindet sich der Punkt in einem der beiden Radien, ist er auf der Kurve zu finden.
Diese Berechnung hat aber ein Problem, es ist ungenau, wenn sich der Punkt in einem ungünstigen Winkel zwischen den beiden Schnittpunkte befindet.
[Dateianhang nicht öffentlich]
Deshalb dachte ich an die offensichliche Lösung:
1. Normalengleichung am Punkt t erzeugen.
2. Gleichung finden, die durch den Testpunkt Pt läuft.
3. Abstand zwischen Pt und Punkt auf der Strecke an t (Ps) messen.
[Dateianhang nicht öffentlich]
Die erste Ableitung der Kurvenfunktion ist:
fx(t) = t²(x1-2x2+x3)+t(-2x1+2x2)+x1
fx'(t) = 2t(x1-2x2+x3)-2x1+2x2
Gilt ebenso für y.
Der Anstieg der Tangente ist:
mt = fy'(t) / fx'(t)
Der Anstieg der Normalen ist:
mn = -(fx'(t) / fy'(t))
Setze ich das in die Geradegleichung meines Punktes Pt ein:
y = mx + n
Erhalte ich die Geradegleichung der Normalen der quadratischen Bezierkurve, die durch den Testpunkt Pt verläuft.
Pt.y = -((2t(x1-2x2+x3)-2x1+2x2)/(2t(y1-2y2+y3)-2y1+2y2))*Pt.x + n
Allerdings weiß ich nicht, wie nun weiter.
Setze ich diese mit der Tangentengleichung der Kurve gleich?
Wie komme ich auf t?
Oder ist meine Lösung bereits im Ansatz falsch?
Dateianhänge: Anhang Nr. 1 (Typ: png) [nicht öffentlich] Anhang Nr. 2 (Typ: png) [nicht öffentlich] Anhang Nr. 3 (Typ: png) [nicht öffentlich]
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:28 Sa 25.04.2009 | Autor: | Rebell |
Hat denn niemand eine Idee oder bessere Lösung?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:31 Sa 25.04.2009 | Autor: | Rebell |
Ich glaube meine Frage geht in diesem Forum total unter.
Wenn ich auf "offene Fragen" gehe, lande ich auf Seite 10 oder weiter hinten, obwohl hier noch niemand darauf geantwortet hat.
Vermutlich ist das Forum einfach Broken-by-design. Und wenn niemand hierauf reagiert, bestätigt das nur meine Vermutung.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 11:14 Sa 25.04.2009 | Autor: | M.Rex |
Hallo
Ich denke, dass du mit der 2.ten Methode Erfolg haben wirst.
Ich nenne den Punkt, dessen Abstand du bestimmen willst, mal P, und den Schnittpunkt der Normalen auf f durch P mal S.
Mit [mm] |\overrightarrow{PS}| [/mm] kannst du dann ja die Länge der Strecke [mm] \overline{PS} [/mm] bestimmen, und diese mit der Dicke d des Schlauches vergleichen. Beachte, dass du bis zur Mittellinie nur die halbe Dicke d hast, also gilt:
Wenn [mm] |\overrightarrow{PS}|>\bruch{d}{2}, [/mm] ist P ausserhalb vom Schlauch
Wenn [mm] |\overrightarrow{PS}|<\bruch{d}{2}, [/mm] ist P innerhalb vom Schlauch
Wenn [mm] |\overrightarrow{PS}|=\bruch{d}{2}, [/mm] ist P auf der Kante vom Schlauch
Marius
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 19:36 So 26.04.2009 | Autor: | Rebell |
Hallo.
Die Frage ist ja, wie erhalte ich den Punkt Ps, um eine Strecke zwischen Pt und Ps mit dem Anstieg zu berechnen?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:20 Di 28.04.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|