我正在学习递归,并且我试图使用java制作分形H树。我的方法称为简单H,它使得H树的顺序为1.我的方法的主要是这一个:
public void simpleH(Graphics g, int x, int y, int size){
g.drawLine(x, y, x, y+tamaño); //right
g.drawLine(x, y+tamaño/2, x+tamaño, y+tamaño/2); //middle
g.drawLine(x+tamaño,y,x+tamaño,y+tamaño); //left
}
我尝试做的是使用paint()方法使用递归方法重绘H树,但我因为无法找到调用simpleH方法的方法而陷入困境根据用户输入的内容,按2,3,4顺序绘制H树。另外,我正在努力,因为我不能调用paint()方法绘制线条。谁能给我一些提示?
public void paint(Graphics g,int n, int x, int y, int size){
if(n==0){
return;
}
int x1 = x-size/2;
int y1=y;
int x2=x+size/2;
int y2=y;
g.drawLine(x1, y1, x2, y2);
//left line
y1 = y-size/2;
x2=x1;
y2=y+size/2;
g.drawLine(x1, y1, x2, y2);
//left recursion
paint(g,n-1,x1,y1,size/2);
paint(g,n-1,x2,y2,size/2);
//right line
x1=x+size/2;
x2=x;
g.drawLine(x1, y1, x2, y2);
//right recursion
paint(g,n-1,x1,y1,size/2);
paint(g,n-1,x2,y2,size/2);
答案 0 :(得分:2)
你重载了paint()方法,因此swing不知道它是必须使用的paint方法。如果你想重载它,无论如何只需添加:
public void paint(Graphics g){
paint(g,n,x,y,size);//Place here your initial values
}
您可以创建一个新的方法名称,并将其添加到paint方法中以便清晰。
这样你就可以画画了。
至于绘制树的递归,你可以像:
public void simpleH(Graphics g, int x, int y, int tamaño, int steps){
if (steps == 0)
return;
g.drawLine(x, y, x, y+tamaño); //right
g.drawLine(x, y+tamaño/2, x+tamaño, y+tamaño/2); //middle
g.drawLine(x+tamaño,y,x+tamaño,y+tamaño); //left
//TopLeft
simpleH(g,x-tamaño/4,y+tamaño*3/4,tamaño/2,steps-1);
//BottomLeft
simpleH(g,x-tamaño/4,y-tamaño/4,tamaño/2,steps-1);
//TopRight
simpleH(g,x+tamaño*3/4,y+tamaño*3/4,tamaño/2,steps-1);
//BottomRight
simpleH(g,x+tamaño*3/4,y-tamaño/4,tamaño/2,steps-1);
}
由于您已在左下角设置了每个 H 的来源,要获得新原点的新原点,您必须将其移动 X 到未来大小的左半部分:
x - tamaño/ 2/2 - > (x - tamaño/ 4)表示左侧。
x +tamaño-tamaño/ 2/2 - > (x +tamaño* 3/4)为右侧。
同样适用于 Y 坐标,底部为y - tamaño/4
,顶部为y + tamaño * 3/4
。
不要忘记设置递归限制,否则运行内存。