在方法paint()中对分形使用递归



我正在学习递归,并试图使用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树。AlSO,我很挣扎,因为我无法调用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);

您正在重载paint()方法,因此swing不会知道它必须使用的是paint方法。如果你无论如何都想超载,只需添加:

public void paint(Graphics g){
    paint(g,n,x,y,size);//Place here your initial values
}

您可以创建一个新的方法名称,并将其添加到绘制方法中,以提高清晰度。

这样你就能把它涂上去。

至于绘制树的递归,可以如下所示:

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表示顶部。

不要忘记为递归设置一个限制,否则您将耗尽内存

最新更新