Registriert: Do Jun 22, 2006 19:13 Beiträge: 52 Wohnort: Lübeck
Hallo zusammen,
ich beschäftige mich zur Zeit mit dem Darstellen von Kurven des VDA-FS 3D-Formates.
In dem Anhang befindet sich ein Auszug der DIN-Norm für das Interprtieren dieses Formates. In diesem wird erklärt, wie man die "Kurvensyntax" zu lesen hat. Es befindet sich auch ein Beispiel in dem PDF.
Nun mein Problem: Ich denke, dass ich es richtig verstanden habe und die ganze Kurve in 4 Segmente eingeteilt habe. Jedes Segment stellt eine Kurve mit dem jeweiligen Polynom Grad dar.
Wenn man sich die Beispielwerte anschaut und diese mit der Zeichnung vergleicht, dann kommt man zu dem Entschluß das hier was nicht zusammenpasst. Evtl. ist die Zeichnung auch nur eine Veranschaulichung?
Die Beispielwerte habe ich so ausgelesen (Block 1 mit der 5,): x1, x2, x3, x4, x5, y1, y2, y3, y4, y5, z1, z2, z3, z4, z5
Dies habe ich mit allen Kurven so getan.
Das Ergebnis welches ich bekomme sieht total falsch aus. Das liegt wahrscheinlich doch daran, dass ich das total falsch mache.
Das Ergebnis welches ich bekomme sieht total falsch aus.
Wenn ich das richtig sehe sind die Koeffizienten dreidimensional, also ax ay az. Damit wäre das auch eine 3D-Kurve. Da die Abbildung nur 2D ist, ist das entweder eine Projektion der 3D-Kurve oder etwas ganz anderes. Vielleicht hast du ja doch das richtige.
Über die par wird gesteuert wann welches Segment benutzt wird: Im Beispiel sind die par-Werte: 0, 1, 2, 2.7, 4 D.h um die komplette Kurze zu zeichnen lässt du s von 0 bis 4 laufen. Im Bereich 0 <= s < 1 wertest du das erste Segment aus, im Bereich 1 <= s <= 2 das zweite Segment usw...
u wird dann so berechnet, dass es für jedes Segment von 0 bis 1 läuft.
Ich muss übrigens anmerken, dass diese Art Kurven zu definieren sehr merkwürdig ist. Die Kurven werden durch willkürliche Koeffizienten definiert, da es sich um die Monom-Basis (*) handelt. (oder?) Bei der Verwendung von Bezierkurven oder B-Splines sind die Koeffizienten aber Kontrollpunkte die auch wirklich eine geometrische Bedeutung haben. Trägt man diese Kontrollpunkt in ein Koordinatensystem ein sieht man schon auf den ersten Blick wie die Kurve verlaufen wird. Mit B-Splines kann man zudem je nach Wunsch C^0, C^1 oder C^2 stetige Übergänge zwischen den Segmenten erzeugen. => Vielleicht einen Blick wert, je nach dem was du genau machst.
Die gesamte Kurve ist eine Funktion f(s), wobei der Parameter s zwischen 0 und 4 liegen darf und die Ausgabe ein 3D-Punkt (x,y,z) ist. Diese Funktion f hat intern eine Fallunterscheidung um das Segment i zu bestimmen:
Code:
if (s < 0.0) then
// error
else if (s < 1.0) then
i := 1;
else if (s < 2.0) then
i := 2;
else if (s < 2.7) then
i := 3;
else if (s <= 4.0) then
i := 4;
else
// error
end;
Anhand von i berechnest du aus s den Parameter u, der dann zwischen 0 und 1 liegt:
Code:
u :=(s - par[i-1])/(par[i]- par[i-1]);
Nun wertest du das Kurvensegment i an der Stelle u aus wie in Zusatz.pdf beschrieben, also die drei Funktionen x(u), y(u) und z(u).
Mitglieder in diesem Forum: Google [Bot] und 7 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.