Kontrollpunkte für Bezierkurve ermitteln



  • Hallo zusammen,

    ich habe ein kleines/großes Problem 😃
    Und zwar muss ich anhand von vorhandenen Punkten eine elliptischen Form auf dem Bildschirm zeichnen. Sind meist zwischen 128 und 256 Punkte für die ich Koordinaten habe (x/y).

    Für das Zeichnen dieser Form benutze ich die GDI+ Bibliothek, die mit Antialiasing arbeitet, um die Kanten zu glätten. In dieser Bibliothek gibt es eine Funktion zum Zeichnen von Bezierkurven, der man als Parameter den Anfangs- und den Endpunkt plus die beiden Kontrollpunkte übergibt.

    Ich möchte also nun immer von einem zum anderen meiner bereits gegebenen Punkte eine Bezierkurve zeichnen, für die ich aber keine Kontrollpunkte habe. Diese möchte ich mir nun selbst berechnen, um somit eine leichte "Krümmung" zu erzeugen, sodass die Kanten nachher noch schöner zur Geltung kommen.

    Nun meine Frage:
    Geht sowas überhaupt pauschal und wenn ja, wie stelle ich das am besten an?

    Vielen Dank im Voraus 👍



  • elliptischen Form

    Was meinst du damit, eine Ellipse?


  • Mod

    So wie ich das verstanden habe, geht es da drum, irgendeine Art "runde" Kurve durch die Punkte zu legen. Unter dieser Prämisse: Muss es unbedingt Bezier sein? Ein Catmull–Rom spline hätte zum Beispiel den Vorteil, dass die umgebenden Punkte selbst die Kontrollpunkte sind.



  • SeppJ schrieb:

    So wie ich das verstanden habe, geht es da drum, irgendeine Art "runde" Kurve durch die Punkte zu legen. Unter dieser Prämisse: Muss es unbedingt Bezier sein? Ein Catmull–Rom spline hätte zum Beispiel den Vorteil, dass die umgebenden Punkte selbst die Kontrollpunkte sind.

    Genau, das ist das Vorhaben.
    Grundsätzlich muss es kein Bezier sein, die Vorgabe ist halt, dass man/ich die GDI+ Bibliothek verwende(t). Da gibt es leider nichts zu rütteln.

    Hier mal ein Überblick über die Graphics-Klasse und was die so kann:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms534453(v=vs.85).aspx

    Bisher benutze ich diese Funktion:
    Graphics::DrawBezier(Pen*,POINT&,POINT&,POINT&,POINT&)

    Danke schonmal für die Antworten 🙂



  • Schau dir mal DrawCurve an.



  • Bashar schrieb:

    Schau dir mal DrawCurve an.

    So sieht die DrawCurve()-Funktion aus bzw. was sie produziert:
    http://i.imgur.com/nf7FO27.jpg

    Ich möchte das halt irgendwie abrunden 😕


  • Mod

    😕 Das ist doch total abgerundet.

    Kann es sein, dass du gar nicht möchtest, dass die Kurve genau durch die Punkte geht, sondern dass du eher eine Ausgleichskurve zwischen die Punkte legen möchtest?

    Gib mal eine gute Problembeschreibung.



  • Habit schrieb:

    Bashar schrieb:

    Schau dir mal DrawCurve an.

    So sieht die DrawCurve()-Funktion aus bzw. was sie produziert:
    http://i.imgur.com/nf7FO27.jpg

    Vielleicht sind deine Punkte nicht so genau wie du glaubst? Die Bezier-Idee würde, wenn du es richtig machst, genau das gleiche Ergebnis liefern, das sind schließlich auch nur Splines.


Anmelden zum Antworten