Im Tutorial ist allerdings nur die Formel für eine Kurve 2 Gerades angegeben. Für Kurven höheren Grades ist im Tutorial diese allgemeine Gleichung angegeben, wobei n der Gerad der Kurve ist und i die Nummer der Basisfunktion:
Tutorial Abseits eckiger Welten hat geschrieben:
Ich habe mir daraus eine Kurve für den dritten Gerad erstellt, erhalte aber komische Ergebnisse:
Code:
p0*(1-t)³ + p1*3*t(1-t)² + p2*3*t²(1-t) + p3*t³
Nun stelle ich mir die Frage ob meine Formel falsch ist, oder ob ich anders wo nach dem Fehler suchen muss.
MfG
Flo[/img]
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Zuletzt geändert von Flo am Di Jun 07, 2005 21:43, insgesamt 1-mal geändert.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Das ist das gleiche. Und deine Berechung hier ist nur eine Umsetztung der Formel des dritten Grades. Ich hab das ganze nochmal geprüft. Die Formel scheint richtig zu sein.
Ich hab das ganze nicht mit Delphi gemacht sondern mit der Skriptsprache von Warcraft 3. Da ich absolut keinen Fehler bei mir entdecken kann, fällt mir als einzigst mögliche Erklärung ein das sich die Rundungsfehler so stark auswirken.
Mein Code:
Code:
set udg_Weg_t = ( I2R(GetForLoopIndexA()) / 100.00 )
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
[edit] *hmpf* zu langsam ... naja beim nächsten mal vielleicht :-) [/edit]
Sofern das hoch x bei zB p0*(1-t)³ nur auf (1-t) bezogen ist sollte es eigentlich passen, denn eingesetzt:
f(0) = p0
f(1) = p3
Wodurch Anfangs- und Endpunkt durch die richtigen Punkte gehen sollten.
Und wenn man das jetz differenziert:
f'(t) = -3 p0 (1 - t)^2 + 3 p1 (1 - t)^2 - 6 p1 (1 - t) t + 6 p2 (1 - t) t - 3 p2 t^2 + 3 p3 t^2
und da jetzt eingesetzt erhält man für
f'(0) = - 3 p0 + 3 p1
f'(1) = - 3 p2 + 3 p3
Wodurch am Anfang und am Ende auch die Richtung passen sollte.
Wenn das nicht der Fall ist, hat einer von uns 2 nen Blödsinn gebaut :-).
Ja die ist richtg. Ich wusste nur nicht dass Nurbs und Beizer das Gleiche ist.
Es ist auch nicht das Gleiche. Bezier Kurven sind Kurven (Strecken, wenn man so möchte). Nurbs sind Flächen, die sich zusätzlich trimmen lassen (löcher reinschneiden, etc.).
Wie ist das den kann man Die Kurfen auch durch den Punkt legen lassen, ohne alles selber zu berechnen?
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Mi Apr 13, 2005 16:06 Beiträge: 67 Wohnort: Fulda
Zitat:
Es ist auch nicht das Gleiche. Bezier Kurven sind Kurven (Strecken, wenn man so möchte). Nurbs sind Flächen, die sich zusätzlich trimmen lassen (löcher reinschneiden, etc.).
Da muss ich widersprechen. NURBS sind prinzipiell auch erstmal Kurven. Beide lassen sich auch zu Flächen verbinden. Der eigentliche Unterschied liegt in der mathematischen Beschreibung, oder genauer in der Basisfunktion, welche bei NURBS auf B-Splines und bei Bézier auf dem Bernsteinpolynom beruht.
Der praktische Unterschied ist natürlich die Möglichkeit, NURBS zu trimmen.
Wie ist das den kann man Die Kurfen auch durch den Punkt legen lassen, ohne alles selber zu berechnen?
Falls du ne cubische Interpolation meinst, da musste die Coeffizienten anders berechnen:
Code:
Coeff[0] := (x4 - x3) - (x1 - x2);
Coeff[1] := (x1 - x2) - Coeff[0];
Coeff[2] := x3 - x1;
Coeff[3] := x2;
Berechnen wäre kein Problem, sowas lernt man ja schließlich in der Schule, aber ich möchte es halt OpenGL machen lassen( Automatisch )!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Es gab von NVidia auf der GF3 mal eine Extension die dreieckige und viereckige Bezier Patches mit HW Unterstützung zeichnen konnte. Das besondere war, dass man für jede Kante einen Gleitkommawert für die Unterteilung angeben konnte, so dass es kein Problem war die Flächen aneinander zu setzen. Leider war das ganze recht langsam und wurde in späteren Treibern wieder entfernt.
Dann gibt's da noch die glEval Funktionen aus dem normalen OpenGL.
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.