SechsEck in Java zeichnen.. nicht alle Ecken liegen auf dem Kreis

  • Hallo Leute,

    Wenn ich ein Sechseck (mit einer Ecke A nach oben zeigend)nehme und den Abstand von diesem oberen Punkt zur Geraden g durch die danebenliegenden (einer links, einer rechts) Punkte (B,C) berechne, müsste das doch theoretisch so aussehen:

    PHP
    int diffH = (int) (l/Math.tan(Math.PI/3.0));



    l = Abstand von B zum Schnittpunkt des Lotes von A auf g.
    (Da ich mit großen Pixelzahlen arbeite dachte ich mir, es macht nichts, das ganze zu runden (int). (Die beobachteten Abweichungen sind mehr als nur 1 px.)
    l wäre doch Gegenkathete und mein gesuchter Abstand die Ankathete. der Winkel am Punkt A ist 60° (PI/3, 2PI entspricht ja 360°) also:
    tan 60° = Gegenkathete/Ankathete multipliziert mit der Ankathete und dividiert durch tan 60° wäre doch dann meine Formel oben.

    PHP
    int[] xCoord = new int[] {    0,    l,   2*l,     2*l,         l,       0};
    int[] yCoord = new int[] {diffH,    0, diffH, diffH+l, 2*diffH+l, diffH+l};
    Polygon sechsEck = new Polygon(xCoord,yCoord,6);
    g2.drawArc(x, y, 2*l, 2*diffH+l, 0, 360);


    Der Anfangspunkt hier ist B.

    Ich find es super schwer das alles ohne Zeichnung zu erklären aber ich hoffe ihr versteht trotzdem was ich meine und könnt mir helfen.

    Vielen Dank im Voraus :)

    Gruß

    Nicholas

  • Sehr gut :) Noch für die Zukunft ein Tip nachgeschmissen: Hättest du ganz am Anfang ein aufs Minimum reduziertes, aber vollständiges lauffähiges Programm gepostet, hätte vielleicht irgendwer die Motivation gehabt, das Programm zu starten und sich die Ergebnisse anzuschauen.

    Mit den kleinen Snippets, die du gepostet hast, hat es im Prinzip zwei Möglichkeiten für eine positive Antwort gegeben:
    a) Der Fehler ist irgendwo in diesen Snippets und so offensichtlich (für andere), daß er gleich ins Auge springt.
    b) Der Fehler ist irgendwo in diesen Snippets und ist nicht offensichtlich, aber jemand macht sich -- sehr unrealistisch! -- die Mühe, ein lauffähiges Programm drumherumzubasteln und kann damit rausfinden, was das Problem ist.

    Wie es der Zufall so will, sind weder a) noch b) eingetreten, weil der Fehler woanders war. Das illustriert einen Punkt, der überraschend vielen Leuten nicht klar ist: Wenn dein Programm sich unerwartet verhält, verstehst du dein Programm nicht. Wenn du dein Programm nicht verstehst, verstehst du üblicherweise auch nicht, welchen Aspekt des Programms du nicht verstehst; du bist also in einer sehr schlechten Position, fünf Zeilen aus einem größeren Programm rauszupicken und zu sagen "da ist irgendwo der Fehler". Du verstehst das Programm nicht gut genug, um das sagen zu können.

    Der Tip also nochmal kurz und knackig: Immer ein aufs Minimum reduziertes, aber vollständiges, ohne irgendwelche Änderungen oder Zusätze lauffähiges Programm posten, wenn du Hilfe mit deinem Code brauchst.

    *plantsch*

  • Werd mir die Tipps merken.

    Auch wenn der Fehler doch in den Code-Snippets lag ;)

    und zwar hier

    PHP
    g2.drawArc(x, y, 2*l, 2*diffH+l, 0, 360);


    Denn der Kreis ist natürlich breiter, als der Abstand von B zu C also auch mehr als 2*l (l = Abstand von B zum Schnittpunkt des Lotes von A auf g.).
    Denn "Breite" und "Höhe" müssen natürlich beim Kreis schon gleich sein.

    Trotzdem danke

    Gruß


    Nicholas

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!