Wie vergrößere ich ein Rechteck in alle Richtungen um eins und bekomme dessen Rand?

lgplay

Mitglied
Hi,
hoffe, mir kann jemand helfen. Also ich möchte in Minecraft ein Plugin schreiben, bei dem ich einen Bereich vergrößere.
Da ich aber nicht jedes Mal alle Blöcke durchgehen möchte um zu Checken, ob sie da sind. Will ich nur die Ränder des erweiterten Bereich bekommen.
Mein Ansatz war ist gerade das hier. Leider geht beim ersten Mal gar kein Block weg und zwischendurch fehlen auch ein paar

Java:
                Rectangle rec = new Rectangle(x,z,1,1);
                rec.setLocation((int) rec.getX() - 1, (int) rec.getY() - 1);
                rec.setSize((int) rec.getWidth() + 1, (int) rec.getHeight() + 1);

                for (int x1 = (int) rec.getMinX(); x1 <= rec.getMaxX(); x1++) {
                    destroy(new Location(world, x1, y, z + rec.getWidth()));
                }

                for (int z1 = (int) rec.getMinY(); z1 <= rec.getMaxY(); z1++) {
                    destroy(new Location(world, x + rec.getWidth(), y, z1));
                }

                for (int x1 = (int) rec.getMaxX(); x1 >= rec.getMinX(); x1--) {
                    destroy(new Location(world, x1, y, z - rec.getWidth()));
                }

                for (int z1 = (int) rec.getMaxY(); z1 >= rec.getMinY(); z1--) {
                    destroy(new Location(world, x - rec.getWidth(), y, z1));
                }
 
Mir erschließt sich das alles noch nicht so richtig (ich habe aber auch null Plan von Minecraft), ein paar Fragen:
1. Zum Verständnis
Code:
Du hast ein Rechteck

·--·
|  |
|  |
·--·

Das erweiterst du um 1 in x und y

·---·
|  ||
|  ||
|--·|
·---·

bzw durch deine Verschiebung

·---·
|·--|
||  |
||  |
·---·

Dann willst du die inneren Elemente (bei mir 5) entfernen

·---·
|   |
|   |
|   |
·---·

und weißt nicht wie du an die rankommst?

2. Was hat z in deinem Beispiel mit y zu tun? Heißt das du hast ein vertikales Rechteck? (Tür/Fenster....)

---

Angenommen 1 ist so korrekt, dann sind die inneren Elemente nach Verschiebung):
Code:
( 1 / [1, width[) + ( 1 / [2, height[)
 
Wenn das Rechteck um eins größer sein soll in alle Richtungen, dann ist die Breite und Höhe natürlich jeweils +2 - denn es ist ja +1 in jede Richtung.

Und Minecraft Addon Entwicklung kennen wir nicht. Kannst Du uns einmal erläutern, was die Methode destroy macht und was die Location wie ist?

Wenn Du mit Location lediglich einen Punkt in der Welt bekommst, wobei der Punkt definiert ist durch die welt, x, y und z und destroy dann das Objekt, so es eines gibt, an der Stelle entfernt:

Was genau willst du dann machen? Wie hängt das zweidimensionale Rechteck mit dem zusammen? Wenn es um eine Projektion geht (Die 3D Welt wird ja auf die 2D Anzeige projeziert, dann brauchst Du eine Umrechnung um dann zu wissen, welche Objekte da betroffen sind.

Und dann ist auch die Frage, wie Du da an alle Objekte heran gehst. Wenn du einfach einen Kubus hast mit einer Größe von dx, dy und dz und du willst alle Punkte prüfen, dann brauchst Du keine drei schleifen hintereinander sondern ineinander:
Schleife über alle x-Koordinaten des Kubus.
-> Schleife über alle y-Koordinaten des Kubus
--> Schleife über alle z-Koordinaten des Kubus
---> mach etwas mit x, y, z

Das ist aber ein Algorithmus, der extrem schlecht skaliert mit der Größe des Kubus....
 

Neue Themen


Zurück
Oben