Rationale Kurven

jno
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 18. Mai 2007 09:41

Rationale Kurven

Beitrag von jno »

Zu den Aufgaben 7/8 auf T1:

in 7b) Gegeben war ja \(f(u)= \left( \frac{a(1-u^2)}{1+u^2}, \frac{2bu}{1+u^2}\right)^T\). Sehe ich es richtig, dass das eine rationale Kurve, aber keine rationale Bezierkurve ist? ansonsten würde Aufgabe 8b) ja keinen Sinn machen. Die rationale bzw. nicht-rationale Bezierdarstellung von f würde ich jetzt folgendermaßen bestimmen:

1.) f in homogenen Koordinaten im 3D ausdrücken als \(f(u)= \left(a(1-u^2), 2bu, 1+u^2\right)^T\).

2.) Errechnen der homogenen Kontrollpunkte des Bezierpolygons. Der erste und der letzte ergeben sich hier durch Einsetzen von 0 und 1 in die Darstellung aus 1.), weil die Kurve zwischen 0 und 1 parametrisiert ist, der 2. Kontrollpunkt kann durch den Schnitt der Tangenten an den ersten beiden Punkten errechnet werden. In dem Fall kann er natürlich auch einfach abgelesen werden. Trotzdem ist hier die Frage wie man die Kontrollpunkte allgemein errechnet. Das mit dem Schnitt der Tangenten geht ja eigentlich nur für diesen Spezialfall.

3.) Jeden errechneten Kontrollpunkt \(P_i\) mit der entsprechenden Basisfunktion \(B_{i}^{2}\) multiplizieren und alles aufaddieren. So erhält man die nicht-rationale Bezier-Darstellung der Kurve in 3D.
Alternativ könnte man jeden Punkt vorher inhomogenisieren, indem man durch die 3. Koordinate teilt und den 2D-Punkt der neuen ersten beiden Koordinaten sowie die 3. Koordinate als das zugehörige Gewicht \(w_i\) speichert. Anschließend verfährt man so wie im nicht-rationalen Fall und teilt zum Schluss noch alles durch \(\sum_{i=2}^{2}B_i^2 w_i\). Und so erhält man dann die RATIONALE Bezierdarstellung.

Hat dieses Vorgehen gestimmt?

thomas_kalbe
Nerd
Nerd
Beiträge: 570
Registriert: 10. Jun 2006 14:58

Re: Rationale Kurven

Beitrag von thomas_kalbe »

also, dass Du dieses f(u) als Bezierkurve auffassen wolltest, schockt mich ein wenig!!!
Schaue Dir bitte nochmal genau Bezierkurven an, dann wirst Du feststellen, dass sie rekursiv
aus den linearen Polynomen u und 1-u gebildet werden, also bei Grad 2 folgt

u^2, (1-u)^2 und 2(1-u)u

wie kann dann f(u) eine Bezierkurve sein???

Ansonsten stimmt das, was Du sagst, soweit ich das sehe so ungefähr.
Die Gewichte müssen aber noch bestimmt werden -- dazu gab es doch ein Beispiel auf den Folien?

gruss,
thomas

jno
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 18. Mai 2007 09:41

Re: Rationale Kurven

Beitrag von jno »

Ääähm, wo genau soll ich geschrieben haben, dass f(u) eine Bezierkurve ist? Soweit ich das sehe, lautet mein erster Satz, dass f(u) keine rationale Bezierkurve ist, oder nicht? Wollte mich nur noch mal vergewissern, tut mir leid wenn die Frage zu dämlich war... Dass Bezierkurven rekursiv aus den Bernsteinbasen aufgebaut sind, hab ich inzwischen auch begriffen, danke..
Viel eher würde ich mich interessieren, wie man die Gewichte von rationalen Bezierkurven bestimmt und zwar im Allgemeinen. Für 3 Punkte hab ich das ja hinbekommen, wie unter 2.) beschrieben. In den Folien ist in der Tat ein Beispiel dafür, das verstehe ich allerdings nicht so ganz, weil ich nicht weiß, wieso man ausgerechnet durch einsetzen von 0,1,1/2 auf die entsprechenden Gewichte kommt.

Gruß Jens

thomas_kalbe
Nerd
Nerd
Beiträge: 570
Registriert: 10. Jun 2006 14:58

Re: Rationale Kurven

Beitrag von thomas_kalbe »

gut. Hab schon gelesen, dass Du eher der Meinung war, f ist keine Bezierkurve.
Und dumme Fragen gibt es sowieso nicht :-)

Setze 0 ein in die Kurve und Du erhälst den ersten Punkt, setze 1 ein und Du erhälst den letzten Kurvenpunkt.
Hilft das?

gruss,
thomas

jno
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 18. Mai 2007 09:41

Re: Rationale Kurven

Beitrag von jno »

Noch nicht ganz, trotzdem danke. ;) Ich interessiere mich eher für die mittleren Punkte! Wieso erhält man w1 ausgerechnet durch einsetzen von 0.5? Bzw. wie würde man bei mehreren inneren Kontrollpunkten verfahren?

Benutzeravatar
Ronny
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 18. Nov 2005 14:33
Wohnort: IGD

Re: Rationale Kurven

Beitrag von Ronny »

Bernsteinpolynome haben unter anderem folgende Eigenschaft:
\(B_{0}^{n}\) = 1 für u = 0 während die anderen \(B_{i}^{n}\) gleich 0.
\(B_{n}^{n}\) = 1 für u = 1 während die anderen \(B_{i}^{n}\) gleich 0.

Das heist, wenn man in \(f(u)= \left(a(1-u^2), 2bu, 1+u^2\right)^T = \sum_{i=0}^{2}P_i B_i^2\) u = 0 setzt bleibt \(P_0\) übrig.
Setzt man u = 1 bleibt \(P_2\) übrig. Wenn man jetzt u ungleich 0 und 1 setzt erhält man einen Ausdruck, in dem \(P_0\), \(P_1\) und \(P_2\) immernoch enthalten sind. Da \(P_0\) und \(P_2\) mittlerweile bekannt sind, kann \(P_1\) bestimmt werden.
Man kann also ein beliebiges u einsetzen. Z.B eben 0.5. Es darf nur nicht 0 oder 1 sein.
Da u in \(f(u)\) quadratisch vorkommt, muss man eine quadratische Bernstein-Bezier Kurve zu Grunde legen.
Wenn u in \(f(u)\) jetzt mit einem noch höheren Grad vorkommen würde, könnte man \(P_0\) und \(P_n\) noch einfach bestimmen. Für die Zwischenpunkte vermute ich, das man mehrere u's zwischen 0 und 1 einsetzen müsste und dann ein Gleichungssystem erhält, mit dem man die Zwischenpunkte erhält.

jno
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 18. Mai 2007 09:41

Re: Rationale Kurven

Beitrag von jno »

Okay, so in der Art hätte ich mir das auch gedacht, ich war mir nur nicht sicher, ob das u=\(\frac{1}{2}\) tatsächlich beliebig gewählt war. Aber müsste schon funktionieren so. Danke.

Antworten

Zurück zu „Archiv“