Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,
gibt es ne Funktion, mit der ich mir die Koordinaten der Stelle x der Kurve ausgeben lassen kann?
Bis jetzt hab ich nur Funktionen gefunden die mir einen Vertex erstellen, aber ich brauch die Koordinaten um damit weiter rechnen zu können!
Was genau ist der Unterschied zwischen Koordinaten und Vertex? Jedenfalls.... Hier steht ein bischen was über das erzeugen von Bezier Kurven drin: http://wiki.delphigl.com/index.php/Tuto ... ger_Welten ; Erweitern auf Flächen ist nicht sonderlich schwer, findet sich aber auch im Netz, falls Du das brauchst.. Nützliche Stichworte sind etwa Bernsteinpolynom und Bezier
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,
das Tutorial kenn ich. aber wenn ich das so mach:
Code:
glBegin(GL_LINE_STRIP);
for i :=0to30do
glEvalCoord1f(i/30);
glEnd;
dann übergibt er ja die Koodinaten an OpenGL und es wird dann ne Linie gezeichnet. Ich will die Koordinaten aber in ner Variable haben und ich weiß net wie ich die aus der Kurve raus bekomm. So das ich dann mit der Variable rechnen kann.
Okay, dann schau doch mal in dem Tutorial unter den Überschriften "Prozedurale Linien", "Evolution zu Bezier Kurven" genau hin. Da stehen die Formeln, die Du dazu brauchst. Den grad der Kurve n setzt du fest. Dann berechnest Du die zu B_{i,n} gehörenden Faktoren n!/(i!(n-i)!) und legst sie irgendwo (in einem Array ?) ab, ersetzt die 2 in Q(t) durch n und kannst zu rechnen anfangen.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Also kann ich nich die von OpenGl erzeugte Kurve nutzenund muss die selbst berechnen?!
PUHH, da muss ich mich erstma rein friemeln. Aber jetzt weiß ich wenigstens wie's weiter geht.
Danke für die Hilfe.
Wenn du es schaffst die Fakulataeten wie vorgeschlagen vorzuberechnen, hilf das sicher, weil das erzeugt schon viele Multiplikationen. Ansonsten ist es vorteilhaft, wenn sie deine Punkte nicht ständig bewegen, sie fest vorzuberechnen und wiederzuverwerten (VBOs, DisplayLists, etc.)
Achso.. Am Ende Result := TempPoints geht nicht? Sind deine Vertices keine festen arrays/records?
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Man kann den Punkt einer Kurve finden ohne Iteration zu verwenden, diese Technik ist allerdings ein ziemlicher Brocken und ich hab auch gut 3Tage gebraucht es funktionsfähig zu implementieren. Dabei wird eine Abstraktion der Bezierkurve gemacht und dann kann man auf X oder Y Achse einfach Pixelweise langlaufen und bekommt die Distanz zur Bezierkurve. Wenn die Distanz an einen Wendepunkt ankommt und damit nicht mehr kleiner wird, sondern größer oder umgekehrt, dann hat man den Schnittpunkt auf der Kurve auf Pixelebene gefunden.
Das ganze benutze ich für ein Software Rasterizer und ist um einiges schneller und genauer als das normale Zerlegen in Teilstrecken, prüfen und wieder zerlegen.
Das ist der Mathematische Teil und war ein ziemlicher Brocken.
http://research.microsoft.com/~hoppe/proj/ravg/ Der Algo wurde für das Vektor Rasterisieren auf der GPU entwickelt und benutzt daher eine sehr schnelle Scanline prüfung auf Schnittpunkte.
Des so größer die Auflösung wird, des so langsamer wird der Algorithmus, da er halt Pixelbasierend ist aber da kann man noch ein spatial system verwenden und das Problem beseitigen. Der Verlust ist allerdings sehr gering, da man ja ganze Polygone Zeichnet und nicht nur Linien und diese Variante bringt schon Kantenglätung mit, mann muss sie nur benutzen.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Ich will mit der Camera auf der Linie fahren und dazu mus ich jedesma den Punkt neu berchnen.
Und Result := TempPoints geht auch. Is passiert, weil ich das vorher ja mit ner schleife machen musste^^
Und was ich noch gemerkt hab. wenn ich die punkte im Kreis anordne dann kommt das raus (siehe anhang)
also brauch ich keine Bezier Kurve sondern mehr sowas wie Waypoints. Lässt sich das genau so easy berechnen?
oder gibts dazu was bei Wiki? hab bis jetzt nix gefunden!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.