Hallo allerseits,
im beiliegendem PDF ist die Aufgabenstellung formuliert. Ich komme leider auf keine effiziente Idee wie ich die Überlappung vermeide. Die einzige Methode auf die ich gekommen bin, wäre es für jedes einzelne Viereck, welches ein Viereck zwei Rekursionsstufen vorher überlappt, gesondert eine Bedingung zu schreiben. Die Aufgabe auf diese Art und Weise zu lösen würde ja aber hunderte Bedingungen erfordern. Bin sehr dankbar für jede Hilfe.
im beiliegendem PDF ist die Aufgabenstellung formuliert. Ich komme leider auf keine effiziente Idee wie ich die Überlappung vermeide. Die einzige Methode auf die ich gekommen bin, wäre es für jedes einzelne Viereck, welches ein Viereck zwei Rekursionsstufen vorher überlappt, gesondert eine Bedingung zu schreiben. Die Aufgabe auf diese Art und Weise zu lösen würde ja aber hunderte Bedingungen erfordern. Bin sehr dankbar für jede Hilfe.
Java:
final float SQUARE_LENGTH = 300;
int maxRecursionDepth = 6;
int currentRecursionDepth = 0;
float offsetX;
float offsetY;
void setup() {
size(720, 720);
offsetX = width/2 - SQUARE_LENGTH/2; // 210
offsetY = height/2 - SQUARE_LENGTH/2;
}
void draw() {
background(255);
recursiveSquare(offsetX, offsetY, SQUARE_LENGTH, 0);
fill(0);
textSize(25);
text("Current recursion depth: " + currentRecursionDepth, 10, 25);
fill(255);
}
void recursiveSquare(float x, float y, float l, int depth) {
if (depth == currentRecursionDepth) {
// Gibt Farbe für Vierecke der letzten Rekursionsstufe
if (depth == 0) {
fill (150, 200, 0);
} else if (depth == 1) {
fill (0, 100, 200);
} else if (depth == 2) {
fill (200, 200, 0);
} else if (depth == 3) {
fill (200, 0, 200);
} else if (depth == 4) {
fill (0, 200, 200);
} else if (depth == 5) {
fill (50);
} else if (depth == 6) {
fill (200, 100, 0);
}
drawSquare(x, y, l);
fill (255);
} else if (currentRecursionDepth <= maxRecursionDepth) {
float x1 = x - l/4;
float y1 = y - l/4;
float x2 = x + 3 * l/4;
float y2 = y + 3 * l/4;
// Geben Farben für Vierecke aller Rekursionsstufen bis auf letzte Rekursionsstufe.
if (depth == 0) {
fill (150, 200, 0);
}
if (depth == 1) {
fill(0, 100, 200);
}
if (depth == 2) {
fill (200, 200, 0);
}
if (depth == 3) {
fill (200, 0, 200);
}
if (depth == 4) {
fill (0, 200, 200);
}
if (depth == 5) {
fill (50);
}
drawSquare(x, y, l);
fill (255);
recursiveSquare(x1, y1, l/2, depth + 1);
recursiveSquare(x2, y1, l/2, depth + 1);
recursiveSquare(x1, y2, l/2, depth + 1);
recursiveSquare(x2, y2, l/2, depth + 1);
}
}
void drawSquare(float x, float y, float l) {
rect(x, y, l, l);
}
void mouseClicked() {
if (mouseButton == LEFT && currentRecursionDepth < maxRecursionDepth) {
currentRecursionDepth++;
} else if (mouseButton == RIGHT && currentRecursionDepth > 0) {
currentRecursionDepth--;
}
}