# Algorithmus zum Glätten einer Kurve?



## fwn (25. Jun 2008)

Hallo zusammen,

ich programmiere im Moment ein Programm, in dem der Benutzer einen Freihand Polygonzug auf die Oberfläche malen kann. Ich würde diesen Polygonzug gerne glätten, um eine Kurve zu erhalten, hab aber keine Ahnung wie ich das anstellen soll. 
Eine Bézierkurve kann ich nicht verwenden, da die Anzahl der Punkte des Polygonzugs zu hoch ist, und ich kann die Kurve auch nicht durch ein Polynom approximieren, da sie sich nicht durch eine Funktion beschreiben lässt.
Kann mir da vieleicht jemand helfen?


----------



## Marco13 (25. Jun 2008)

Ja, mal wieder eine etwas schwammige Anforderung für ein Problem, über das 500 Leute jeweils 500seitige Dissertationen schreiben könnten, aber ... Ich gehe mal davon aus, dass "Glätten" in gewissem Sinne "vereinfachen" heißt (wenn nicht, musst du sagen, was "Glätten" ist :wink: ) Du hast einen Polygonzug. Dann kannst du dir alle Punkte ansehen, und überlegen, was passieren würde, wenn du den Punkt entfernen würdest. D.h. du kannst z.B. den Abstand des Punktes zur Verbindungslinie seiner Nachbarpunkte berechnen. Den Punkt, bei dem dort der kleinste Wert rauskommt, kannst du entfernen, und das ganze dann beliebig oft wiederholen...


----------



## Marco13 (25. Jun 2008)

Wenn du sagst ... "um eine Kurve zu erhalten" : Du kannst durch die wenigen Punkte, die dann übrig bleiben, natürlich eine Bezierkurve legen...


----------



## fwn (25. Jun 2008)

Sorry für die etwas ungenaue fragestellung, was du da beschreibst ist leider nicht was ich machen will. Ich versuch mal es besser zu beschreiben:

Der Benutzer kann in dem Programm bei gedrückter Maustaste die Maus bewegen, um einen Polygonzug auf die Oberfläche zu malen. Das Problem ist, dass wenn man die Maus etwas schneller bewegt die Abstände zwischen den einzelnen Punkten so groß sind das die entstehende Kurve recht viele Ecken hat, selbst wenn ich bei jedem durchs draggen ausgelöste MouseEvent einen Punkt zu dem Polygonzug hinzufüge.
Ich suche eine Möglichkeit, aus dem recht kantigen Polygonzug eine Kurve zu erhalten, allerdings ohne zu viele Punkte zu verlieren.


----------



## Marco13 (25. Jun 2008)

Hmja ... wenn man die Maus langsam bewegt, entsteht da ja schon eine sehr dichte Abfolge von Punkten. Wenn das OK ist, geht es ja nur um die weit voneinander entfernten Punkte. Da könnte man jetzt einfach die Länge eines segmentes eines solchen Polygonzuges betrachten: Wenn das Segment zu lang ist, wird eben NUR dort ein Bezier Spline eingefügt...


----------

