tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
534
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    amArsch amArsch ist offline Grünschnabel
    Registriert seit
    Mar 2010
    Beiträge
    1
    Hallo,

    ich muss momentan für ein projekt folgendes tun.

    also ich möchte ein beliebiges shape (polynom) in ein raster transformiern / convertieren.
    dabei sind mir natürlich die koordinaten der einzelnen zellen wichtig welche innerhalb des polynoms sind. (brauch ich dann für weitere funktionen)
    da ich mich jedoch nicht gut mi c# auskenne und auch nicht so gut mit .NET wüsste ich gerne ob es bereits eine solche funktionalität gibt. (man muss ja nicht alles neu erfinden)
    oder kennt jemand eine geeignete open source lösung?

    wenn es keine open source lösung gibt und auch nicht im .NET Framework nichts geeignetes vorhanden ist,
    wie gehe ich nun an die Sache heran?
    und welche Klassen / Verweise benötige ich?

    im prinzip das hier
    http://webhelp.esri.com/arcgisdeskto...nd_feature.gif

    Danke
    amArsch
     

  2. #2
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    158
    gibt bestimmt eine paar libs,
    aber sollte auch per Hand nicht so schwer sein,
    dein Bild besteht ja aus Pixel, ist ja nichts anderes wie ein Raster.
    über die Methode:
    Code :
    1
    
    GetPixel(x, y)
    kannst du sämtliche Informationen, aus den Bild-Pixel auslesen, (einzelne Farben, Sättigung, usw).
    Da du jetzt ein "gröberes" Raster haben willst, als das dir die Pixel selbst bieten, musst du entweder:
    - Die Farbinformation eines Rechtecks (also die Pixel von x = a bis x = a+10 und von y = b bis y b+10) zusammen addieren und dann den Mittelwert bilden, das würde auch Abstufungen der Farbe am Randbereich zulassen.
    oder
    - Die Farbinformation im Rechteck zusammen addieren und dann über einen Schwellenwert entscheiden ob die Farbe ausreichen vorhanden ist oder nicht.

    diese Information Zeichnest du dann in ein neues Bild

    ich hoffe ich konnte die helfen.
     

  3. #3
    pwVergessen Tutorials.de Gastzugang
    Erstmal danke FJK,

    leider war es nicht das was ich gesucht habe.
    Ich wollte einfach aus gegebenen Punkten ein polygon erzeugen, dieses mit möglichst wenig aufwand in ein raster einteilen und diese zellen dann verwenden zum weiter zu arbeiten.
    Ich soll nämlich dieses "Gebiet" möglichst gleichäßig und effizient einteilen... also in gleich große stücke einteilen. Daher war mein Ansatz es in viele zellen zu zerlegen und dann
    je nachdem wie viele "Teilgebiete" es werden sollen zusammenfassen bzw. einzuteilen.

    Aber evtl Hilft mir die Funktion später weiter. Wusste ich bisher auch nicht das das möglich ist.

    Habe im .NET Framework leider keine konvertierungsmethode gefunden. Daher die Idee ob es dafür etwas im open source bereich gibt.
    Falls jemand weiß ob es doch im .NET Framework etwas gibt oder ne open source möglichkeit kennt würde ich mich über einen Hinweis sehr freuen.

    Falls nicht habe ich es mir so gedacht...

    1. ich ermittel die punkte die am weitesten recht, link, oben und unten sind... so hätte ich dann die grenzen meines rasters.
    2. ich generiere eine 2dim list mit zellen die mein raster komplett abdecken (größe muss angegeben werden) .... je kleiner, desto genau wird das polygon natürlich abgedeckt.
    3. ich durchlauf jede zelle und frage ob der zellenmittelpunkt im polygon drin is (erst mal so "ungenau")
    4. die zellen die drin sind speicher ich mir wieder in einer liste und kann anschließend damit arbeiten.

    Ist die idee gut oder eher aufwändig zu realisieren?

    Gruß
    amArsch
     

  4. #4
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.002
    Das dürfte einfach sein. Im Drawing2D-Namespace findest du beispielsweise die GraphicsPath-Klasse. Diese Klasse stellt eine Linie dar, die du aus Geraden, Kurven, Splines, etc. zusammenbasteln kannst. Wenn du die Linie dann dort enden lässt, wo sie anfängt, dann hast du eine Fläche. Mit der IsVisible-Methode der GraphicsPath-Klasse kannst du prüfen, ob ein Punkt innerhalb deiner Fläche oder außerhalb deiner Fläche liegt.

    Ich weiß aber nicht ob es reicht einfach zu überprüfen, ob der Mittelpunkt der Rasterfläche in der Fläche liegt. Ich habe dazu ein Bild angehängt um das zu verdeutlichen: orange sei hier zur Fläche zugehörig, weiß soll außerhalb der Fläche liegen und das Bild stellt einen einzigen Rasterpunkt dar. Wenn du so eine Fläche hast, die den Rasterpunkt übermäßig ausfüllt, dann sollte der Rasterpunkt orange werden, obwohl der Mittelpunkt hier nicht in der Fläche liegt.
    Angehängte Grafiken Angehängte Grafiken  
    Geändert von Shakie (15.03.10 um 10:36 Uhr)
     
    hihi = -h²

  5. #5
    pwVergessen Tutorials.de Gastzugang
    Hey danke Shakie für die schnelle antwort.

    ich glaube, es könnte sein, evtl, ich hoffe sehr das es das ist was ich brauche...
    bisher scheint es zu funktionieren. merci vielmals

    ja ich weiß schon das das mit der mitte der zelle nicht die optimale lösung ist...
    wäre auch nur probeweise... was genaueres hätte ich mir dann ggf. schon noch ausgedacht.

    Gruß
    amArsch
     

  6. #6
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Für die Erstellung deines Polygons kannst du auch die Methode AddPolygon verwenden. Und mit GetBounds() ermittelst du dann das umschließende Rechteck. Ob ein Punkt innerhalb deines Polygons ist, kannst du ermitteln, indem du prüfst, ob er die Füllfarbe hat.
    Wenn du weißt, wie viele Zellen du hast, kannst du auch berechnen, wie gross eine Teilfläche sein muss. Um sie zu berechnen, kannst du einen Wachstumsalgorithmus verwenden. Du nimmst eine Zelle als Keim für deine neue Fläche und nimmst nacheinander jeweils die Nachbarzellen hinzu, welche die meisten Flächenzellen oder Außenzellen als Nachbarn haben. So bekommst du auch eine möglichst gerade Grenzlinie.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 16.12.09, 14:14
  2. Objekt im Raster
    Von peter333 im Forum Flash Plattform
    Antworten: 0
    Letzter Beitrag: 05.07.08, 20:00
  3. polynom drehen
    Von thomy800 im Forum Java
    Antworten: 3
    Letzter Beitrag: 05.06.07, 18:05
  4. raster?
    Von kalicki2k im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 10.05.05, 16:56
  5. Raster
    Von benyio im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 30.12.01, 16:01