Bei einem diagonalen Raster die untersten Linien erkennen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RoulettePilot.

    Bei einem diagonalen Raster die untersten Linien erkennen

    Hi,

    erstmal entschuldige ich mich für den nicht aussagekräftigen Titel, mir ist nicht wirklich was eingefallen, wie ich das Problem kurz beschreiben könnte.

    Also, das Problem:

    ich möchte ein diagonales Raster zeichnen. Also quasi ein ganz normales Quadrat mit Linien darin, bloß um ca. 45° gedreht.
    Um das zu realisieren habe ich eine Klasse mit einer Funktion in der ich einfach den Mittelpunkt eines Körpers (also eines kleinen Kästchens) übergebe und die Klasse zeichnet dann einfach den Rest mittelpunktbasiert um den Punkt herum. Soweit sogut.

    Die Informationen, also wie das Raster aussieht, habe ich in einem Array(x,y) gespeichert.
    Wird halt von x = 0 bis irgendwas iteriert und wenn Array(x,y) = true dann wird halt x und y an die Funktion übergeben und es wird gezeichnet. Das klappt alles wunderbar.

    Nur würde ich das Ganze gerne etwas mehr nach 3D aussehen lassen und das Raster deswegen etwas dicker machen... Das habe ich zwar auch schon realisiert gehabt... aber ich habe das so gemacht, dass eben für jedes Kästchen/jeden Körper ein Boden gezeichnet wird. Das ist recht aufwändig und kostet viel Zeit...

    Nun zur eigentlichen Frage:
    Kann ich irgendwie (außer die Information bei der Initialisierung zu speichern) mathematisch oder so berechnen oder erkennen lassen, welche Fläche ganz unten - also quasi das Ende darstellt - ist?

    Also ein Raster das um 45° gedreht ist, und an den unterstehn beiden Seiten (quasi die hier \/ xD) möchte ich noch eine Art Fünfeck zeichnen die den Körper so darstellt, als wenn er 3-dimensional wäre und an der "Z-Achse" eben irgendwie 5 oder 10 Pixel "dick" wäre.

    Ich hoffe Ihr versteht mein Problem und könnt mir helfen.

    Danke im Voraus!
    Hallo Easily,

    Also ich versteh nur Bahnhof(und das liegt nicht an mir ;) ). Kannst du das mal anders beschreiben? z.B. was zeichnen und dann hier hochladen, damit man versteht, was du meinst?

    Grüsse,

    Higlav
    Ah, jetzt ist mir dein Problem ersichtlich.
    Wenn du ein Feld hast, in das du deine Quadrätchen füllen willst, dann kannst du von der einen Seite her und von der anderen Seite her schauen, wo da das Erste ist. Dort zeichnest du dann einfach dieses Pseudo-2.5D-Zeugs hin und kannst weitermachen.

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

    Du hast do ein Array von zu zeichnenden Quadraten, oder? Dann sind die zu füllenden Quadrate in irgendeinem Index verstaut und dort, wo nichts ist... ist halt eben nichts. Beispiel(1 = Quadrat, 0 = leer):

    Quellcode

    1. Arr = {{0, 1, 0},
    2. {1, 1, 0},
    3. {1, 1, 0},
    4. {0, 0, 0}}

    Dieses Array entspricht jetzt dem von dir geposteten Bild.
    Jetzt suchst du von unten nach oben nach dem ersten gefüllten Index. Wenn gefunden, suchst du dir die Koordinaten raus und hängst die Tiefen-Ebene hinzu. Das Gleiche von rechts nach links und du hast dein 2.5D-Raum.

    EDIT: Es scheint mir aber ein wenig eine Holzfällerlösung. Vielleicht gibt es eine Bessere...

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

    hmm..
    du hast ein Raster.. und willst es 3d-mäßig ihm eine Dicke geben....
    Du zeichnest es doch selber , da weisst du doch was unten ist.
    Vielleicht liege ich falsch.. aber.. ich würde..
    1. das "normale Raster zeichnen
    2. den StartPunkt um ein paar y-Punkte nach oben setzen
    3. das Raster (das obere) nocheinmal zeichnen
    4. und nun die äusseren Punkte beider Raster miteinander verbinden.
    4a oder: ( die Faulheitsmethode) das Raster immer wieder neu zeichen mit dem versatz von y-1 bis Endpunkt erreicht ist). Also wenn Höhe = 10, dann 10x das Raster zeichnen immer ein Pixel höher.

    Geht mit Sicherheit auch einfacher. Aber das würde ich versuchen, und darauf pfeiffen, das er ein paar Linien umsonst zeichnet, weil sie dann weder verdeckt werden *g*
    Darum kann man sich dann immernoch kümmern.