Länge einer Kurve berechnen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Firstdeathmaker

Betreff: Länge einer Kurve berechnen?

BeitragMo, Okt 17, 2005 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

kann mir jmd erklären oder einen Link posten wo ich lernen kann wie man die Länge einer Strecke auf einer durch eine Funktion festgelegten Kurve berechnen? Also wenn ich z.B. die Funktion f(x) = X^3-x^2+2 hat, und jetzt die Lände von X= 2 bis X=15 haben möchte, wie geht man dann vor?


(Also Flächenberechnung von durch Kurven eingegrenzte Flächen beherrsche ich schon, aber eben keine Längenberechnung)
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Triton

BeitragMo, Okt 17, 2005 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
oha, schwierig. Zumindest wüsste ich nur eine Näherungsmethode. Gehe die Strecke von x=2 bis x=15 in kleinen Schritten ab (kleiner = genauer) und bilde die Tangentengleichungen an den jeweiligen Punkten. Dann über Pytagoras die Länge bis zum nächsten Abschnitt, alles Addieren und man hat einen Näherungswert.

Relativ aufwändig, aber ne andere Möglichkeit wüsste ich jetzt nicht.
Coding: silizium-net.de | Portfolio: Triton.ch.vu
 

Steffen

BeitragMo, Okt 17, 2005 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Zitat:
(Also Flächenberechnung von durch Kurven eingegrenzte Flächen beherrsche ich schon, aber eben keine Längenberechnung)


Also geh ich mal davon aus, dass du dich mit Integral- und Differentialrechnung auskennst. Dann sollte auch das kein Problem sein:
user posted image
x1 ist die untere und x2 die obere Grenze

[edit]Ich seh gerade, dass es im Wikipedia-Orakel einen Artikel dazu gibt:
http://de.wikipedia.org/wiki/Bogenl%C3%A4nge
[/edit]

Aber die Näherung von Triton ist schon ziemlich gut. Damit lässt sich auch arbeiten.

Gruß Steffen
>PC: Pentium III 750MHz, ATI Rage 128 mit 32Mb, Windows Me, Blitz3D 1.87
>Laptop: Pentium M 1,4GHz, 512 Mb DDR, ATI Mobility Radeon 9000 mit 64Mb DDR, Windows XP Home, Blitz3D 1.87

Firstdeathmaker

BeitragDi, Okt 18, 2005 7:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, das Problem ist, dass ich eine Bezierkurve habe von der ich die Länge haben möchte.


user posted image


Obwohl, wenn ich mir es recht überlege geht das ja doch. Es kommen zwar für bestimmte X-Werte unterschiedliche Y-Werte heraus, aber man rechnet ja mit t als veränderbarer Wert zu X oder Y, also ist es ja immer noch eine Funktion im mathematischen Sinne.. Mal schauen, wenn ich heute aus der Schule komme müsste ich das hinbekommen. Danke Triton und danke Steffen, dass müsste ich mit der angegebenen Formel einfach hinbekommen.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Vertex

BeitragDi, Okt 18, 2005 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Firstdeathmaker: Ich habe dir mal eine Animation gemacht, wie man überhaupt auf diese Formel kommt. Es sind eigentlich nur 3 lineare Interpolationen.

Code: [AUSKLAPPEN]
Graphics(640, 480, 0, 2)
SetBuffer BackBuffer()

Dim Points#(2, 1)
Global T#
Global S1X#, S1Y#
Global S2X#, S2Y#
Global PX#, PY#

Points#(0, 0) = 100.0 : Points#(0, 1) = 300.0
Points#(1, 0) = 200.0 : Points#(1, 1) = 100.0
Points#(2, 0) = 400.0 : Points#(2, 1) = 200.0

For T# = 0.0 To 1.0 Step 0.002
   S1X# = Points#(0, 0)*(1.0-T#) + Points#(1, 0)*T#
   S1Y# = Points#(0, 1)*(1.0-T#) + Points#(1, 1)*T#

   S2X# = Points#(1, 0)*(1.0-T#) + Points#(2, 0)*T#
   S2Y# = Points#(1, 1)*(1.0-T#) + Points#(2, 1)*T#
   
   PX# = S1X#*(1.0-T#) + S2X#*T#
   PY# = S1Y#*(1.0-T#) + S2Y#*T#
   
   Cls()

   Color(255, 255, 0)
   Line(Points#(0, 0), Points#(0, 1), Points#(1, 0), Points#(1, 1))
   Line(Points#(1, 0), Points#(1, 1), Points#(2, 0), Points#(2, 1))
   
   Color(255, 0, 0)
   Oval(S1X#-3, S1Y#-3, 6, 6)
   Oval(S2X#-3, S2Y#-3, 6, 6)
   
   Color(150, 150, 150)
   Line(S1X#, S1Y#, S2X#, S2Y#)
   
   Color(0, 255, 0)
   Oval(PX#-3, PY#-3, 6, 6)
   
   Flip()
Next

WaitKey()
End()

Da sind mehrere Strecken drinne, die dir event. bei der Berechnung nützlich sein könnten.

mfg olli
vertex.dreamfall.at | GitHub

Firstdeathmaker

BeitragDi, Okt 18, 2005 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, ich brauch ja die Länge, wie das ganze von der Formel her funktioniert weis ich ja schon. Hier mein bisheriger Weg:


1. Ableitung von f(x) = (1-x)^2P_0+2x(1-x)P_1+x^2P_2
ist f'(x) = 2P_0(x-1)+2P_1(-2x+1)+2P_2X
das gäbe in die Formel eingesetzt:

l = X1 S X2 sqr( 1 + (2P_0(x-1)+2P_1(-2x+1)+2P_2X)^2) dx

Die Stammfunktion daraus wäre also

[sqr ( X + 4/3P_0^2X^3-4P_0^2X^2+4P_0^2X-8/3P_0P_1X^3+6P_0P_1X^2-4P_0P1X+4/3P_0P_1X^3-4P_0P_2X^2+16/3P_1^2X^3-8P1^2X^2+4P_1^2-8/3P_1P_2X^3+2P_1P_2X^2+4/3P_2^2X^2)] von 0 bis 1

oder gibt es einen einfacheren Weg?
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group