Perfektes Sechseck?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    Programmierung

    Hi Mad Andy,

    Programmierung... 8)

    Ich habe mir das Ganze am Anfang so gedacht:

    Linie in mm, dann Winkel von 120° (Uhrzeigersinn), Linie in mm, dann Winkel von 120°... usw.. bis ich wieder an Punkt 1 rauskomme... :D

    Leider war das (?) zu einfach gedacht?!? ;(

    Hab mich ein wenig in die Graphics eingearbeitet und die Polygon-Funktion gefunden. Jetzt arbeitet die ja (Standard) mit Pixeln... und da es nur "ganze" Pixel gibt... 8)

    Also am Ende soll eigendlich folgendes raus kommen:

    In einer PictureBox (wenn das das richtige Instrument dafür ist) soll eine (z.B.) Landkarte angezeigt werden. Über diese Landkarte möchte ich ein Feld von Sechsecken legen, so wie bei CoSim Brettspielen...

    ... und alles andere habe ich noch nicht fertig gedacht... 8o

    Viele Grüße
    André
    Beim Zeichnen kann ich dir leider auch nicht helfen :(
    Aber beim Berechnen :)

    Am besten machst du das mit Linien, 6 linien für jedes 6-Eck.
    Es gibt immer 2 parallele Linien
    Du fangst mit einer vertikalen Linie an
    Alle anderen Stehen 60° aufeinander

    Am Besten zuerst alles in nen Array und dann erst zeichnen, da jeder Punkt von einem 6-Eck doppelt vorkommt (einmal als Anfangspunkt, einmal als Endpunkt einer Line).
    Wenn du mal eins hast, sind die anderen 6-Ecke nurnoch ne Schleife :)

    Als Bsp-Wert jetzt einfach mal 100px lange Seiten:

    VB.NET-Quellcode

    1. Dim p() As Point
    2. ReDim p(5)
    3. p(0).x = 100
    4. p(0).y = 200
    5. p(1).x = 100
    6. p(1).y = 100
    7. p(2).x = p(1).x + Math.Sin(Math.pi / 3) * 100
    8. p(2).y = p(1).y - Math.Cos(Math.pi / 3) * 100
    9. p(3).x = p(2).x + Math.Sin(Math.pi / 3) * 100
    10. p(3).y = p(2).y + Math.Cos(Math.pi / 3) * 100
    Pi/3 = 60° in RAD
    Sind jetzt zwar nur die ersten 4 punkte, so funktionierts aber vom Prinzip her :)
    Wie man in .net die Linien zeichnet, weiß ich leider selbst nicht :(

    Du musst auf jeden Fall noch die Seitenlänge berechnen, damit du Runde Werte hast:
    z.B. Das 6-Eck soll b breit sein:

    Quellcode

    1. Sin(pi / 3) * x + Sin(pi / 3) * x = b | x herausheben
    2. x * (Sin(pi/3) + Sin(pi/3)) = b
    3. x * 2 * Sin(pi/3) = b | /2 /Sin(pi/3)
    4. x = b / (2 * Sin(pi/3))
    Jetzt musst du da nurnoch die Breite einsetzen ;)


    so long...
    Andy

    ...Super... danke!

    Hi Mad Andy,

    vielen Dank für den Code und die Tipps.

    Bin jetzt (leider) das ganze WE weg. Werde mir das mal Anfang nächster Woche genau ansehen.

    Wenn's funktioniert poste ich den Code hier.

    Schönes Wochenende!

    Viele Grüße
    André

    ... ein Stück weiter...

    Hi Mad Andy,

    so, hat ein wenig länger gedauert, dafür hab ich's jetzt. :))

    Hier der Code für ein Sechseck, dass oben links in der Ecke "steht". :D

    VB.NET-Quellcode

    1. Dim r As Integer = 50
    2. Dim p() As Point
    3. ReDim p(6)
    4. p(0).X = 0
    5. p(0).Y = 2 * r - (r / 2)
    6. p(1).X = 0
    7. p(1).Y = r - (r / 2)
    8. p(2).X = p(1).X + Math.Sin(Math.PI / 3) * r
    9. p(2).Y = p(1).Y - Math.Cos(Math.PI / 3) * r
    10. p(3).X = p(2).X + Math.Sin(Math.PI / 3) * r
    11. p(3).Y = p(2).Y + Math.Cos(Math.PI / 3) * r
    12. p(4).X = p(3).X
    13. p(4).Y = p(0).Y
    14. p(5).X = p(4).X - Math.Sin(Math.PI / 3) * r
    15. p(5).Y = p(4).Y + Math.Cos(Math.PI / 3) * r
    16. p(6).X = p(5).X - Math.Sin(Math.PI / 3) * r
    17. p(6).Y = p(5).Y - Math.Cos(Math.PI / 3) * r
    18. e.Graphics.DrawLines(New Pen(Brushes.Black, 1), p)


    Jetzt muss ich mir noch was ausdenken wie ich das ganze Form damit fülle... ?(

    Viele Grüße
    André

    ... nein, dass wäre zu einfach... ;o)

    Hi Mad Andy,

    nein, dass waere zu einfach. Das Feld soll ja gleichmäßig ausgefüllt sein... :D

    Bin aber kurz davor... wenn Du willst, kann ich ja dann da Ergebnis hier posten... wenn es jemanden interessiert... :rolleyes:

    Viele Grüße
    André