Pythagoras-Baum

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Lupus.

    Pythagoras-Baum

    Hi!

    Ich sollte einen Pythagoras-Baum in Visual Basic programmieren. Aber da ich ein absoluter Neuling bin fällt mir das ziemlich schwer. ?( Ich weiss es gibt tausende Programme von diesen Bäumen, aber ich sollte das Programm vielleicht auch noch verstehen...

    Für erfahrene Nutzer ist das wahrscheinlich nichts schweres. Kann mir mal jemand ein Programm von diesem Baum geben und beschreiben was das Programm da gerade macht? Falls ihr nicht wisst was ein Pythagoras-Baum ist, hier ein Bild:
    hallo rolex,

    so etwas löst man am elegantesten durch eine rekursion
    rekursion = eine sich selbst aufrufende funktion

    diese musst du in ihrer verschachtelungstiefe natürlich begrenzen.
    ansonsten denke ich das du das ganze mathematisch schon handhaben kannst.

    eine rekursion zu verstehen ist nicht ganz so einfach, vor allem nicht für einen der neu zu programmieren beginnt.

    gruss

    mikeb69
    Wäre nicht auch eine Schleife möglich, die sagen wir 10 Durchgänge hätte und bei jedem Durchgang entsprechend neue Koordinaten für die nächsten Striche berechnet und diese dann anschließend zeichnet ?
    Ich weiss ist bestimmt nicht die eleganteste Lösung aber für einen Anfänger der noch nie mit VB gearbeitet hat...
    Ich selber habe auf diese Art und Weise schon Graphen im Bereich der Differentialrechnung gezeichnet, das hat so eigendlich ganz gut geklappt.

    Ansonsten ziemlich interessante Sache, ich höre das erste Mal von diesem Pythagoras-Baum.
    hallo dragonfly,

    sicher ist auch eine schleife möglich.
    dennoch ist das eine typische rekursive aufgabe.

    wikipedia

    aber in einem geb ich dir recht
    eine sehr interessante aufgabe und gehört hatte ich bisher auch noch nicht davon.

    gruss

    mikeb69
    hallo dragonfly,

    interessant ist auch die frage, wie man die berechnungen zwischenspeichert.
    wegen der performance würde ich das zeichnen erst am ende der berechnungen durchführen.

    gruss

    mikeb69
    Ja auf jeden Fall, zuerst die ganzen Werte berechnen und dann anschließend zeichnen.
    Du brauchst in diesem Fall natürlich enorm viele Variablen, für jede der Koordinaten zwei Stück...
    Das ist dann nicht so als ob du eine mathematische Funktion mit vielleicht drei maßgebenden Koordinatenpunkten zeichnen willst.

    Vor einiger Zeit habe ich mal ein Raster gezeichnet, hierbei wurden die Werte dann mithilfe des jeweiligen Zählerstandes versetzt. Ob sich das auf den Pythagoras-Baum anwenden lässt ? Ist natürlich etwas komplexer...

    VB.NET-Quellcode

    1. Private Sub Hintergrundstriche()
    2. For i = 0 To imaxWert
    3. Select Case Zuordnungsverweis
    4. Case Is = "XRichtung"
    5. AbstandsZaehler = i * 10 * 4
    6. XA = 0
    7. YA = 0 + AbstandsZaehler
    8. XE = 560
    9. YE = 0 + AbstandsZaehler
    10. Case Is = "YRichtung"
    11. AbstandsZaehler = i * 10 * 8
    12. XA = 0 + AbstandsZaehler
    13. YA = 0
    14. XE = 0 + AbstandsZaehler
    15. YE = 400
    16. End Select
    17. graphBMP.DrawLine(stift1, XA, YA, XE, YE)
    18. If i > imaxWert - 1 Then
    19. AbstandsZaehler = 0
    20. End If
    21. Next
    22. End Sub
    hallo dragonfly,

    ich denke für jedes dieser quadrate reicht ein rectangle zum speichern der koordinaten aus.
    das interessante ist die eltern-kind beziehung der einzelnen elemente dieses baumes.

    gruss

    mikeb69
    Stimmt, es handelt sich ja im Grunde genommen nur um ein System welches aus lauter Rechtecken besteht.
    Wenn ich momentan nicht so viel zu tun hätte, würde ich es glatt mal versuchen das Ding zu programmieren. :D

    Mad Andy hat ja schon geschrieben dass das ganze interessant aussieht wenn es sich aufbaut.
    Müsste man vermutlich künstlich irgendeine Verzögerung reinbauen (Zähler oder so), das könnte echt interessant aussehen...
    hallo dragonfly,

    Wenn ich momentan nicht so viel zu tun hätte, würde ich es glatt mal versuchen das Ding zu programmieren

    sowas ähnliches hab ich mir auch schon gedacht.

    vielleicht gibt mir meine frau heute abend ein viertelstündchen frei. malsehen.

    gruss

    mikeb69
    viertelstündchen?? Viel Spaß :D ich hock grad seit ner dreiviertel std dran, wie ich den dritten punkt vom Dreieck berechen kann ^^ is ne meterlange gleichung, hab gleich das zweite blatt vollgeschrieben
    hallo lupus,

    nagut - vielleicht war das mit dem viertelstünchen ein wenig übertrieben.
    jedoch:
    phytagoras hat doch folgende formel aufgeschrieben

    A² = B² + C²

    wenn du als A, B und C jeweils die pixel annimmst müsste das doch sehr kurz sein.
    kann mich aber auch täuschen
    habs nicht probiert - aber nach a umgestellt müsste der code

    VB.NET-Quellcode

    1. a = Math.Sqrt(b+c)

    lauten

    wie gesagt - hauptschüler

    gruss

    mikeb69
    du hast vergessen b & c zu quadrieren:

    VB.NET-Quellcode

    1. a = math.sqrt(math.pow(b,2) + math.pow(a,2))

    aber um die Punkte rauszubekommen ist glaub ich noch mehr nötig, ich hab jetzt schonmal nen Ansatz, funktioniert aber noch nicht so ganz... musste noch Strahlensätze & Kathetensatz reinbauen un so

    Edit: ich habs geschafft! Also man brauch am besten den Kosinus, den Kathetensatz und dieStrahlensätze, um jeweils den dritten Punkt des Dreiecks berechnen zu können. Ich habs auch so allgemein geschrieben, dass man jeden beliebigen Winkel oder Größe des Startquadrates verwenden kann.
    Nur so nen Tipp: Mal dir am besten auf, was du beim Dreieck rausbekommen willst und denk dann nach, wie du es schaffen kannst

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

    Mal sehen vielleicht werde ich mich noch im Laufe des Tages hinsetzen und versuchen das Ding zu programmieren. :thumbsup:
    Wie die Berechnung der jeweiligen Koordinaten ablaufen könnte habe ich mal in einer kleinen Skizze dargestellt.
    Schwierig wird es da die aktuelle Schräglage berücksichtigt werden muss und sich bestimmte Vorzeichen je nach Lage der zu berechnenden Koordinate ändern...
    Ist irgendwie eher eine Matheaufgabe als eine Programmiereraufgabe finde ich :)



    Die schräge Skizze ist im Prinzip die gerade Skizze nur eben gekippt, ich habe da bewusst ein paar Werte weggelassen.
    Ich denke man sieht auch so wo sich z.B. der Punkt C in der schrägen Skizze befindet...

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Dragonfly“ ()