Zeichnen eines Kreisbogens

  • C#

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Zeichnen eines Kreisbogens

    Guten Tag,
    ich müßte zwei Punkte mit einem Kreisbogen verbinden. Leider komme ich nicht drauf wie ich das Rectangle, welches die Methode DrawArc benötigt, richtig instanzieren soll.
    Im Anhang findet sich ein Bild das dass ganze verdeutlichen soll. Ich würde gerne die Punkte pointTopLeft mit pointTopRight verbinden, der Startpunkt des Rectangles sowie die länge lassen sich ja problemlos aus den beiden Punkten ermitteln. Aber wie komme ich an die benötigte Höhe des Rectangles?
    Bilder
    • frm.PNG

      27,18 kB, 524×543, 175 mal angesehen
    Hi
    das Rechteck wäre das des Inneren, bzw. Äußeren Kreises. Du würdest die Winkel anpassen. Die beste Wahl, wenn es nur um's Verbinden geht, wäre, GraphicsPath zu verwenden und den Winkel zu errechnen. Welche Anfangsdaten hast du denn? Nur die Punkte?
    Es wäre auf jeden Fall durch Atan2, bzw. Asin oder Acos möglich. Die würdest du auf die inneren bzw. äußeren Punkte (relativ zum Mittelpunkt) anwenden und den Winkel zwischen ihnen erhalten. Diese Winkel kannst du dann an AddArc bzw. DrawArc weiterreichen.

    Viele Grüé
    ~blaze~
    Danke für deine Antwort.

    Welche Anfangsdaten hast du denn?

    Ich habe den Anfangs -und Endwinkel, anhand dieser berechne ich die Position der Punkte.

    Ich hab mir mal Atan2, Asin und Acos angesehen und wollte mein Problem nun mit Atan2 lösen.

    C#-Quellcode

    1. double dRadian = Math.Atan2(pointTopLeft.Y, pointTopLeft.X);
    2. float angle = (float)(dRadian * (180 / Math.PI));

    Das Ergebniss daraus habe ich als Anhang angehängt. Der Bogen wird auf ca. '5 Uhr' (rechte untere Ecke) gezeichnet. Mir ist nun leider nicht so ganz klar was ich falsch gemacht habe.
    Bilder
    • frm.PNG

      25,8 kB, 520×542, 167 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()

    @Fakiz DrawArc und Co wollen Winkel in Grad, nicht aber im Bogenmaß.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das macht er bereits, wenn du dir den Code anschaust. ;)

    Was du aber nicht machst, ist wohl, dass du relativ zum Mittelpunkt rechnest, d.h. pointTopLeft.Y - center.Y, pointTopLeft.X - center.X rechnest, wobei center = new Point(rectangle.X + rectangle.Width / 2, rectangle.Y + rectangle.Height /2) ist.

    Viele Grüße
    ~blaze~
    Was du aber nicht machst, ist wohl, dass du relativ zum Mittelpunkt rechnest

    Da hast du recht, dass mache ich nicht da ich den Startpunkt des Koordinatensystems auf die Mitte der Form festgelegt habe. Ich habe das ganze jetzt, wie in Post2 erwähnt, mit einem GraphicsPath gelöst.