Laden...

Bezier-Kurve aus vielen Punkten erstellen

Erstellt von steschu vor 14 Jahren Letzter Beitrag vor 14 Jahren 4.218 Views
steschu Themenstarter:in
24 Beiträge seit 2009
vor 14 Jahren
Bezier-Kurve aus vielen Punkten erstellen

Hallo,

Ich habe viele Punkte, die zusammen näherungsweise eine Kurve beschreiben. Natürlich sind die einzelnen Segmente, die sich jeweils aus zwei Punkten ergeben, gerade.

Wie kann man für jedes dieser Segmente die zwei zusätzlichen benötigten Aufhängungspunkte einer Bezierkurve errechen, so dass nach der Umwandung, eine tatsächliche Kurve herauskommt? Oder noch besser wäre es, wenn ich eine komplett neue Bezierkurve errechnen könnte, die mit so wenig Punkten wie möglich auskommt?

Ich habe etwas nach dem Thema gesucht, bin aber nicht so richtig schlau aus den vorgeschlagenen Lösungsmöglichkeiten geworden. 😦 Vieleicht hat jemand noch einen guten Hinweis. Mein Ziel wäre es eine Methode zu programmieren, der man ein Array von Punkten übergibt, und die das entsprechende Bezier zurückgibt.

Danke und viele Grüße,
Stephan

F
100 Beiträge seit 2009
vor 14 Jahren
49.485 Beiträge seit 2005
vor 14 Jahren

Hallo steschu,

Wikipedia sagt dazu:

Der Einfluss eines Kontrollpunktes auf die [Bézier-]Kurve ist global. Das heißt: Verschiebt man einen Punkt, verändert sich die gesamte Kurve. Daher verwendet man in der Praxis meist Splines, zusammengesetzte Kurven festen Grades, die stetig ineinander übergehen.

Ich würde an deiner Stelle also eher mal nach Splines gucken.

herbivore

S
401 Beiträge seit 2008
vor 14 Jahren

Servus,

Bezier-Kurven sind eine spezielle Art von Splines. In vielen Vorlessungen tastet man sich über die Bezier-Kurven und Segmente an die B-Spline heran.
Der Wikipedia-Artikel ist nicht schlecht. Wo liegt eigentlich dein Problem genau?
Eine gute Einführung bietet auch "Computergrafik" von Bender Brill oder GEMS. Kaufen würde ich diese Werke nicht, aber vielleicht gibt es irgendwo ein Bibliothek.
Oder wie wärs damit?

Wie kann man für jedes dieser Segmente die zwei zusätzlichen benötigten Aufhängungspunkte einer Bezierkurve errechen

Du nimmst einfach deine Punkte und erstellst daraus Segmente? Wird in den meisten Artikeln erklärt.

eine tatsächliche Kurve herauskommt

Ähmm, liegt da dein Problem? Ist es keine glatte Kurve? Wie zeichnest du dein Ergebnis?

Oder noch besser wäre es, wenn ich eine komplett neue Bezierkurve errechnen könnte, die mit so wenig Punkten wie möglich auskommt?

Das geht durchaus. In CAD-Programm nennt man das meistens Glätten oder begrenzte Spline. Du musst hier nur beachten, dass du eine max. Abweichungstoleranz (von den derzeitigen Punkten oder von der ersten Kurve) vorgibst. Der Rest ist hohe Mathematik oder Brute-Force 😃

Vieleicht hat jemand noch einen guten Hinweis.

Wie gesagt, wo liegt dein Problem?

steschu Themenstarter:in
24 Beiträge seit 2009
vor 14 Jahren

Hi,

Was ich gesucht habe ist ein Algorithmus, der aus den Koordinaten mehrerer Punkte (die verbunden eine eckige Linie ergeben) die Koordinaten (inkl. Aufhängungspunkte) der Punkte einer Bezierkurve errechnet, die diese eckige Linien als runde Linie "annähert".

Ich habe im Nachhinein festgestellt, dass die Assembly, die ich benutze (PDFSharp), bereits so eine Methode anbietet. Von daher ist mein Problem gelöst 😉

Vielen Dank und viele Grüße,
Stephan