www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Uni-Numerik" - Bezierkurve aufteilen
Bezierkurve aufteilen < Numerik < Hochschule < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Bezierkurve aufteilen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:37 Mo 25.10.2010
Autor: cgimda

Wie kann eine Bezierkurve in gleichgroße Abschnitte aufgeteilt werden?
Oder Wie können auf einer Bezierkurve Punkte in gleichgroßen Abständen platziert werden?

        
Bezug
Bezierkurve aufteilen: Antwort
Status: (Antwort) fertig Status 
Datum: 18:53 Mo 25.10.2010
Autor: MathePower

Hallo cgimda,

> Wie kann eine Bezierkurve in gleichgroße Abschnitte
> aufgeteilt werden?
> Oder Wie können auf einer Bezierkurve Punkte in
> gleichgroßen Abständen platziert werden?


Wenn die Punkte der Bezierkurve so platziert werden,
dann müssen sie auf einer Geraden liegen.

Ist die Bezierkurve durch  die Punkte [mm]b_{i}, \ 0 \le i \le n[/mm] gegeben,
dann lautet die Gerade auf der die Bezierpunkte verteilt sind.

[mm]g:\overrightarrow{x}=\overrightarrow{b_{0}}+u*\left(\overrightarrow{b_{n}}-\overrightarrow{b_{0}}\right)[/mm]

Dabei gilt: [mm]\vmat{\overrightarrow{b_{i+1}}-\overrightarrow{b_{i}}}=\bruch{1}{n}\vmat{\overrightarrow{b_{n}}-\overrightarrow{b_{0}}}, \ 0 \le i < n[/mm]


Gruss
MathePower


Bezug
                
Bezug
Bezierkurve aufteilen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:08 Mo 25.10.2010
Autor: Al-Chwarizmi


> Hallo cgimda,
>  
> > Wie kann eine Bezierkurve in gleichgroße Abschnitte
> > aufgeteilt werden?
> > Oder Wie können auf einer Bezierkurve Punkte in
> > gleichgroßen Abständen platziert werden?
>
>
> Wenn die Punkte der Bezierkurve so platziert werden,
>  dann müssen sie auf einer Geraden liegen.
>  
> Ist die Bezierkurve durch  die Punkte [mm]b_{i}, \ 0 \le i \le n[/mm]
> gegeben,
>  dann lautet die Gerade auf der die Bezierpunkte verteilt
> sind.
>  
> [mm]g:\overrightarrow{x}=\overrightarrow{b_{0}}+u*\left(\overrightarrow{b_{n}}-\overrightarrow{b_{0}}\right)[/mm]
>  
> Dabei gilt:
> [mm]\vmat{\overrightarrow{b_{i+1}}-\overrightarrow{b_{i}}}=\bruch{1}{n}\vmat{\overrightarrow{b_{n}}-\overrightarrow{b_{0}}}, \ 0 \le i < n[/mm]
>  
>
> Gruss
>  MathePower



Hallo MathePower,

diese Antwort kann ich überhaupt nicht verstehen !

Die Frage war doch, wie man eine vorgegebene (nicht
geradlinige) Bézierkurve in eine Anzahl gleich langer
Kurven-Abschnitte unterteilen könne.  
Meiner Ansicht nach antwortest du aber offenbar auf eine
ganz andere Frage.

Zur ursprünglichen Aufgabe von cgimda würde ich sagen,
dass sie vermutlich sehr schwierig zu lösen ist, da schon
die Längenberechnung von Bézierkurven durch Integration
auf nicht exakt darstellbare Integrale führt.

LG     Al-Chwarizmi

Bezug
                        
Bezug
Bezierkurve aufteilen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:53 Mo 25.10.2010
Autor: cgimda

Danke für die Antworten.

Al-Chwarizmi hat natürlich recht. Ich wollte wissen, wie eine Bezierkurve in gleichgroße Abschnitte geteilt werden kann oder wie Punkte in gleichen Abständen auf ihr verteilt werden können.

Ich habe also zum Beispiel eine kubische Bezierkurve, die durch 4 Kontrollpunkte beschrieben wird. Diese Kurve kann dann durch folgende Funktion berechnet werden:

[mm]C(t) = (-P_0 + 3P_1 -3P_2 + P_3) t^3 + (3P_0 - 6P_1 + 3P_2) t^2 + (-3P_0 + 3P_1) t + P_0[/mm]

t ist der Parameter der von 0 bis 1 läuft. Wenn t = 0, dann C(t) = [mm] P_0. [/mm] Wenn t = 1, dann C(t) = [mm] P_3. [/mm] Würde ich nun die Kurve zeichnen, dann würde ich für t erst 0 einsetzen, dann 0,1, dann 0,2 usw. Das Problem ist, dass die Ergebnispunkte nicht die gleichen Abstände haben, auch wenn t gleichmäßig hochgezählt wird.

Hier ein Bild zur Veranschaulichung. t wurde gleichmäßig hochgezählt, aber die Punkte haben unterschiedliche Abstände:
[Dateianhang nicht öffentlich]

Dateianhänge:
Anhang Nr. 1 (Typ: png) [nicht öffentlich]
Bezug
                                
Bezug
Bezierkurve aufteilen: Antwort
Status: (Antwort) fertig Status 
Datum: 21:30 Mo 25.10.2010
Autor: Al-Chwarizmi


> Danke für die Antworten.
>  
> Al-Chwarizmi hat natürlich recht. Ich wollte wissen, wie
> eine Bezierkurve in gleichgroße Abschnitte geteilt werden
> kann oder wie Punkte in gleichen Abständen auf ihr
> verteilt werden können.
>
> Ich habe also zum Beispiel eine kubische Bezierkurve, die
> durch 4 Kontrollpunkte beschrieben wird. Diese Kurve kann
> dann durch folgende Funktion berechnet werden:
>  
> [mm]C(t) = (-P_0 + 3P_1 -3P_2 + P_3) t^3 + (3P_0 - 6P_1 + 3P_2) t^2 + (-3P_0 + 3P_1) t + P_0[/mm]
>  
> t ist der Parameter der von 0 bis 1 läuft. Wenn t = 0,
> dann C(t) = [mm]P_0.[/mm] Wenn t = 1, dann C(t) = [mm]P_3.[/mm] Würde ich
> nun die Kurve zeichnen, dann würde ich für t erst 0
> einsetzen, dann 0,1, dann 0,2 usw. Das Problem ist, dass
> die Ergebnispunkte nicht die gleichen Abstände haben, auch
> wenn t gleichmäßig hochgezählt wird.
>  
> Hier ein Bild zur Veranschaulichung. t wurde gleichmäßig
> hochgezählt, aber die Punkte haben unterschiedliche
> Abstände:

   [Dateianhang nicht öffentlich]
Hallo cgimda,

für die Lösung sehe ich da nur eine numerische Lösung
mittels Computer.

Die Kurvendarstellung kann man auflösen in zwei Gleichungen
für x(t) und y(t) (bei einer ebenen Kurve):

      [mm] x(t)=a*t^3+b*t^2+c*t+d [/mm]

      [mm] y(t)=e*t^3+f*t^2+g*t+h [/mm]

Differentiale:

       [mm] dx=(3*a*t^2+2*b*t+c)*dt [/mm]

       [mm] dy=(3*e*t^2+2*f*t+g)*dt [/mm]

       [mm] ds=\sqrt{dx\,^2\,+\,dy\,^2\,} [/mm]

Ersetzung der Differentiale durch kleine, aber endliche
Schrittlängen [mm] \Delta{x}, \Delta{y}, \Delta{s} [/mm] ermöglicht dann die Berechnung der
gesamten Bogenlänge der vorgegebenen Kurve sowie
deren Einteilung in eine Anzahl gleich langer Abschnitte.


LG      Al-Chw.


Bezug
                                        
Bezug
Bezierkurve aufteilen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 23:43 Mo 25.10.2010
Autor: cgimda

Danke für die Antwort.

Ich habe es jetzt so gelöst, wie du gesagt hast, also beispielsweise so:

[mm]\Delta x = x(0,001) - x(0,000)[/mm]
[mm]\Delta y = y(0,001) - y(0,000)[/mm]
[mm]\Delta s_0 = \wurzel{\Delta x^2 + \Delta y^2}[/mm]

[mm]\Delta x = x(0,002) - x(0,001)[/mm]
[mm]\Delta y = y(0,002) - y(0,001)[/mm]
[mm]\Delta s_1 = \wurzel{\Delta x^2 + \Delta y^2}[/mm]

...

[mm]\Delta x = x(1,000) - x(0,999)[/mm]
[mm]\Delta y = y(1,000) - y(0,999)[/mm]
[mm]\Delta s_{999} = \wurzel{\Delta x^2 + \Delta y^2}[/mm]

Wenn ich nun die Gesamtlänge der Bezierkurve haben möchte, dann rechne ich einfach alle s zusammen:

[mm]s = \summe_{i=0}^{999}s_i[/mm]

Funktioniert alles wunderbar.

Aber noch eine Frage. Für was brauche ich die Ableitungen, die du angegeben hast?:
[mm]dx=(3*a*t^2+2*b*t+c)*dt[/mm]
[mm]dy=(3*e*t^2+2*f*t+g)*dt[/mm]


Bezug
                                                
Bezug
Bezierkurve aufteilen: Antwort
Status: (Antwort) fertig Status 
Datum: 06:59 Di 26.10.2010
Autor: Al-Chwarizmi


> Danke für die Antwort.
>  
> Ich habe es jetzt so gelöst, wie du gesagt hast, also
> beispielsweise so:
>  
> [mm]\Delta x = x(0,001) - x(0,000)[/mm]
>  [mm]\Delta y = y(0,001) - y(0,000)[/mm]
>  
> [mm]\Delta s_0 = \wurzel{\Delta x^2 + \Delta y^2}[/mm]
>  
> [mm]\Delta x = x(0,002) - x(0,001)[/mm]
>  [mm]\Delta y = y(0,002) - y(0,001)[/mm]
>  
> [mm]\Delta s_1 = \wurzel{\Delta x^2 + \Delta y^2}[/mm]
>  
> ...
>  
> [mm]\Delta x = x(1,000) - x(0,999)[/mm]
>  [mm]\Delta y = y(1,000) - y(0,999)[/mm]
>  
> [mm]\Delta s_{999} = \wurzel{\Delta x^2 + \Delta y^2}[/mm]
>  
> Wenn ich nun die Gesamtlänge der Bezierkurve haben
> möchte, dann rechne ich einfach alle s zusammen:
>  
> [mm]s = \summe_{i=0}^{999}s_i[/mm]
>  
> Funktioniert alles wunderbar.
>  
> Aber noch eine Frage. Für was brauche ich die Ableitungen,
> die du angegeben hast?:
>  [mm]dx=(3*a*t^2+2*b*t+c)*dt[/mm]
>  [mm]dy=(3*e*t^2+2*f*t+g)*dt[/mm]
>  


Guten Morgen !

für die numerische approximative Rechnung braucht man die
Ableitungen nicht unbedingt bzw. spart nicht sehr viel an Rechen-
aufwand. Wenn man ohnehin alle 1001 Punkte berechnet, ist es
ja leicht, jeweils die [mm] \Delta{s}_i [/mm] mittels Pythagoras zu berechnen.
Trotzdem denke ich, dass die Berechnung der Bogenlänge (wenn
man nur diese will und nicht gleichzeitig die Kurve plotten will)
mittels der Ableitungen weniger Rechenaufwand erfordert -
aber bei den heutigen schnellen Prozessoren ist das ja kaum mehr
ein Thema ...

Die Berechnung der Polynome mit den Koeffizienten a, b, c, ..... , g
würde ich dir aber trotzdem empfehlen (anstatt für jeden der 1001
Punkte auf die Koordinaten aller 4 Stützpunkte zurückzugreifen).
Das spart erheblichen Rechenaufwand.

LG     Al-Chw.


Bezug
                                                        
Bezug
Bezierkurve aufteilen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:23 Mi 27.10.2010
Autor: cgimda

Hallo Al-Chwarizmi,

ich habe noch mal über die Möglichkeit nachgedacht, die Länge mit den Ableitungen zu berechnen, aber irgendwie verstehe ich das nicht ganz. Vielleicht kannst du mir das noch mal genauer erklären, wie du mit den Ableitungen die Länge berechnest.

Bezug
                                                                
Bezug
Bezierkurve aufteilen: Antwort
Status: (Antwort) fertig Status 
Datum: 00:18 Do 28.10.2010
Autor: Al-Chwarizmi

$\ s\ [mm] \approx\ \summe_{i=1}^{n}\Delta s_i$ [/mm]

wobei

[mm] $\Delta s_i\ [/mm] =\ [mm] \sqrt{(3\,a\,t_i^2+2\ b\,t_i+c)^2\ +\ (3\,e\,t_i^2+2\ f\,t_i+g)^2}*\Delta [/mm] t$

Aus numerischen Gründen am liebsten mit $\ [mm] t_i=\frac{i-\frac{1}{2}}{n}$ [/mm] ,
falls t für die ganze Kurve von 0 bis 1 läuft.


LG     Al-Chw.

Bezug
                                                                        
Bezug
Bezierkurve aufteilen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:27 Fr 29.10.2010
Autor: cgimda

Danke für die Antwort. Es hat funktioniert und die Variante mit der Ableitung ist wirklich schneller. Es wird 30 bis 40 Prozent weniger Zeit benötigt.

Bezug
                                                                                
Bezug
Bezierkurve aufteilen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:54 Fr 29.10.2010
Autor: Al-Chwarizmi


> Danke für die Antwort. Es hat funktioniert und die
> Variante mit der Ableitung ist wirklich schneller. Es wird
> 30 bis 40 Prozent weniger Zeit benötigt.


Oh, danke für die Information !

LG    Al-Chwarizmi      :-)


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]