我在使用sierpinski地毯时遇到了一些问题,并且会提供任何帮助。
我能够定义停止条件,绘制中心矩形,并递归地绘制图像的下一级,同时保持计数。
恰巧我只能在左上方画画。我会说我混淆了变量,但我似乎无法弄明白。会不会提供任何帮助
这是我遇到问题的代码的一部分。
int smallerWidth = newWidth / 3;
int smallerHeight = newHeight / 3;
int sX = 0;
int sY = 0;
if (currentDeep > 1) {
for (int i = 0; i < 3; i++) {
sX = width / 9 + (i * 3 * (width / 9));
sY = height / 9;
g.fillRect(sX, sY, smallerWidth, smallerHeight);
for (int j = 0; j < 3; j++) {
sY = height / 9 + (j * 3 * (height / 9));
g.fillRect(sX, sY, smallerWidth, smallerHeight);
}
}
return 1 + printSquares(g, sX, sY, newWidth, newHeight, currentDeep
- 1);
} else
return 1;
}
这是完整的代码 https://pastebin.com/WPJ5tG8w
总而言之,我的问题是。我应该更改/创建什么才能让我的程序绘制剩余的7个方块?
答案 0 :(得分:0)
您的代码存在的问题是,您尝试一次执行递归的多个层的操作。通常,在递归中,您只绘制Quadrado中心,计算较小矩形的大小和坐标,并递归调用该方法。这样你就可以确保递归调用不会影响已经存在的东西。
private int printSquares(Graphics g, int xi, int yi, int width, int height, int currentDeep) {
//Quadrado central
int newWidth = width / 3;
int newHeight = height / 3;
int x = (width / 3) + xi;
int y = (height / 3) + yi;
g.fillRect(x, y, newWidth, newHeight);
int sX = 0;
int sY = 0;
if (currentDeep > 1) {
int sum = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
//This is the position of each of the small rectangles
sX = i * (width / 3) + xi;
sY = j * (height / 3) + yi;
// Call the method recursively in order to draw the smaller rectangles
sum += printSquares(g, sX, sY, newWidth, newHeight, currentDeep - 1);
}
}
return 1 + sum;
} else
return 1;
}
我希望,这可以解决你的问题。