Regions (geometrische Formen) Sortieren

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von DragsTrail.

    Regions (geometrische Formen) Sortieren

    Hallo,

    Ich bekomme aus einer mathematischen Funktion eine Liste mit geometrischen Konturen. In den Fall Rechtecke.

    Bitte Siehe Bild.

    Sortiert sind diese vom kleinsten Flächeninhalt bis zum größten. Also 0,1,2,3,4,5,6,7
    Ich würde aber folgende Sortierung benötigen: 0,2,4 1,3,5 6,7

    Das Rechteck 6 enthält jetzt 2 Gruppen mit je 3 Rechtecken. Es können aber auch mehrere gruppen sein.

    Mein Problem ist eigentlich, dass ich nicht drauf komm wie ich die For - Schleifen dazu machen soll oder generell programmieren soll.

    LG
    Bilder
    • 20201122_213117.jpg

      2,93 MB, 4.032×3.024, 70 mal angesehen
    Und in welcher Reihenfolge gibt die ominöse mathematische Funktion die Flächen wieder? Woher soll diese mathematische Funktion die koordinative/lokale Anordnung der Rechtecke kennen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    nach meim Verständnis könnte man das als Baum-Ansicht darstellen, speichern, verarbeiten:

    Quellcode

    1. 7
    2. 6
    3. 5
    4. 3
    5. 1
    6. 4
    7. 2
    8. 0

    So ein Baum ist nur eine andere Visualisierung derselben im Bild aufgemalten Verhältnisse:
    7 enthält 6
    6 enthält 5, 4
    5 enthält 3 enthält 1
    4 enthält 2 enthält 0
    Wenn du meine Baumansicht von unten nach oben durchgehst, kommste glaub auf deine gewünschte Reihenfolge.
    Es ist allerdings nur innerhalb jeder Ebene ein Vergleich der Grössen möglich.
    Also 5 kann mit 4 verglichen werden, aber 3 kann nicht mit 2 verglichen werden - weil sie in anderen Pfaden/Zweigen/Rechtecken liegen.
    Wäre sowas brauchbar?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @DragsTrail Wie sollen denn die gleichgroßen Rechtecke {0,1}, {2,3}, {4,5} unterschieden werden bzw. nach welchem Kriterium sollen sie sortiert werden, damit Deine Reihenfolge zwangsläufig herauskommt?
    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!
    @ErfinderDesRades Genau so. Mann muss vom kleinsten Anfangen. Andere Möglichkeit sehe ich nicht.

    @RodFromGermany ibb.co/nDMwYDj

    Wenn 0 und 1, 2 und 3, 4 und 5 den gleichen Flächeninhalt haben wird es trotzdem gleich abgespeichert. Siehe Bild. (0,1,2,3,4,5,6,7)
    In diesem Fall wehre es relativ einfach zu sortieren nach der Fläche. Wenn die Flächen unterschiedlich sind wie im 1. Beispiel, habe ich mir gedacht mit Region zu arbeiten um zu sehen welche Region eine andere Region enthält.

    DragsTrail schrieb:

    (0,1,2,3,4,5,6,7)
    Du hast meine Frage nicht beantwortet.
    Was ist mit
    (1,0,2,3,4,5,6,7)
    (0,1,3,2,4,5,6,7)
    (0,1,2,3,5,4,6,7)
    (1,0,3,2,5,4,6,7)
    usw.?
    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!

    DragsTrail schrieb:

    Eine Konstellation wie 1,0,..... kann es nicht geben
    Sorry, ich hab mir eben nochmal Dein Bild angesehen. :whistling:
    Ist gesichert, dass alle Regionen unterschiedliche Fläche haben?
    Wenn Ja, wo liegt eigentlich das Problem?
    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!
    Naja, deine Anforderung hast du nicht richtig gestellt.
    Die Abfolge, die du brauchst geht nicht vom Kleinsten zum Grössten, sondern vom Inneren zum Äusseren.
    (logisch sind die inneren kleiner als die sie enthaltenden äusseren - daher die Verwechslung - aber Grösse ist bei deim Problem nicht das richtige Kriterium.)
    Wie gesagt: in einer Baumstruktur ist sowas elegant zu handhaben.

    Übrigens gibts für das Reihenfolge-Kriterium "von innen nach aussen" mehrere richtige Lösungen.
    Man kann ein Zusatz-Kriterium einführen "auf gleicher Ebene das kleinere zuerst" - das ergäbe eine eindeutige Reihenfolge.
    Aber völlig offen, ob das überhaupt notwendig ist.

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

    DragsTrail schrieb:

    Schau dir bitte das Video an.
    Soviel ich bis zur nicht verschiebbaren Werbung gesehen habe, hat das eigentlich nichts mit Deinem Problem zu tun.
    ====
    Falls das "Verkleinern" der Form Dein primäres Problem ist, sieh Dir mal die Bildverarbeitungs-Filter Erosion und Dilatation an.
    Frau Google => bildverarbeitung erosion dilatation
    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!
    @RodFromGermany Ich habe doch im Video erklärt das es um eine Offset-Funktion geht. Siehe de.wikipedia.org/wiki/Parallelkurve

    Was hat den das mit der Bildbearbeitung zu tun, verstehe ich wirklich nicht. Hier geht es um geometrische Elemente ( Linie, Kreisausschnitt )
    Eine Offset-Funktion skaliert NICHTS. Sie verschiebt das jeweilige Element in vorgegebener Richtung und trimmt es mit angrenzenden Elementen.
    Wenn der Offset größer ist als ein Radius wird dieser komplett verschwinden.

    Im 1. Bild siehst du eine rote Kontur, welche die original Kontur ist. Die weisen Konturen sind Offset´s von der roten Kontur in 1mm Schritten.

    Die Offset-Funktion gibt IMMER die Offset-Konturen nach Ihrer Fläche zurück, wobei in der Liste die Stelle NULL die kleinste Fläche ist. BILD 2.

    Die Aufgabe ist es die Liste zu sortieren wie in Bild 3. Dabei spielt ja der Flächeninhalt als Zahl ja keine Rolle.

    Hier meine Logik ( in der For-Schleife ) für BILD2:

    Region 0 ==> enthält keine Region ==> Continue For
    Region 1 ==> enthält keine Region ==> Continue For
    Region 2 ==> enthält Region 0 ==> irgendwo speichern
    Region 3 ==> enthält Region 1 ==> irgendwo anders speichern
    Region 4 ==> enthält Region 2 ==> irgendwo speichern
    Region 5 ==> enthält Region 4 ==> irgendwo speichern
    Region 6 ==> enthält Region 3 und Region 5 ==> keine Achnung wo abspeichern
    Region 7 ==> enthält Region 6 ==> noch mehr keine Achnung wo abspeichern

    und jetzt

    irgendwo speichern
    +
    irgendwo anders speichern
    +
    keine Achnung wo abspeichern
    +
    noch mehr keine Achnung wo abspeichern
    =======================================
    Ergebnis


    @ErfinderDesRades Erklär doch bitte deine Baumstruktur anhand eines Code-Beispiels
    Bilder
    • 2020-11-23 09_41_22-Window.png

      17,36 kB, 982×396, 67 mal angesehen
    • Bild2.png

      129,13 kB, 1.392×561, 55 mal angesehen
    • Bild3.png

      129,12 kB, 1.390×558, 55 mal angesehen

    DragsTrail schrieb:

    Erklär doch bitte deine Baumstruktur anhand eines Code-Beispiels


    von einem Codebeispiel hättest du sicher nichts, weil ich hab kein Beispiel für Offest-Konturen.
    Ich verwende zur Anzeige von Baumstrukturen immer ein Treeview - und da habich auch einige Codebeispiele zu.
    Aber wie gesagt: meine Treeviews zeigen keine Offset-Konturen an. Ich hab welche für Xml, für Datei-Ordner und für mathematische Formeln.
    Und meine Beispiele handeln jeweils hauptsächlich von anderen Problemen - dass da eine Baumstruktur vorkommt und im TV präsentiert wird ist jeweils eine Nebensache.

    Es ist eher an dir, mir ein Codebeispiel zur Verfügung zu stellen: Ich bräuchte ein Programm, was eine Liste von Offset-Konturen bereitstellt.
    Weiters bräuchte ich eine Methode, mit der ich ermitteln kann, ob eine Kontur in einer anderen enthalten ist.
    Wenn du das bereitstellst, kann ich den Algo entwickeln, der die Dinger in eine Baumstruktur einsortiert.
    Die Baumstruktur kann ich wiederum im Treeview anzeigen.
    Und kann ich auch von unten nach oben durchlaufen - was ja die gewünschte Reihenfolge ergibt.

    Ich frage mich aber auch, ob du meinen Gedanken ühaupt verstanden hast - nämlich dass diese ineinandergeschachtelten Konturen sich perfekt auf ineinandergeschachtelte Knoten einer Baum-Struktur abbilden lassen.

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

    DragsTrail schrieb:

    Ich habe doch im Video erklärt
    Wie ich sagte, konnte ich das Video nur bis da hin sehen, bis mir die Werbung das Bild zugemüllt hat.
    Ansonsten dieses Beispiel aus der Bildverarbeitung:
    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!