带有偏差的Java递归三角形

Ver*_*zus 9 java recursion geometry deviation

您好,我对编程很新,我正在尝试创建一个函数,该函数从角落之间的较大三角形中点创建递归三角形,其中新三角形点偏离y值中的正常位置.有关可视化,请参见下面的图片.

可视化 - 图像1

可视化 - 图像2

第一张图显示了没有任何偏差的递归算法的进展(0,1,2阶),第二张图显示了(阶数0,1).

我已经设法生成了一段代码,它可以为前几个订单创建我想要的东西,但是当我们达到2阶及以上时,我遇到的问题是较小的三角形不使用相同的中点,因此看起来像下图.

工作正在进行中

所以我需要帮助来存储和调用每个三角形的正确中点.我一直在考虑实现一个新的类来控制中点的计算并存储它们等等,但正如我所说,我需要帮助.

以下是我目前的代码

点类存储点的ax和y值

lineBetween在所选点之间创建一条线

void fractalLine(TurtleGraphics turtle, int order, Point ett, Point tva, Point tre, int dev) {


    if(order == 0){
        lineBetween(ett,tva,turtle);
        lineBetween(tva,tre,turtle);
        lineBetween(tre,ett,turtle);
    } else {

            double deltaX = tva.getX() - ett.getX();
            double deltaY = tva.getY() - ett.getY();

            double deltaXtre = tre.getX() - ett.getX();
            double deltaYtre = tre.getY() - ett.getY();

            double deltaXtva = tva.getX() - tre.getX();
            double deltaYtva = tva.getY() - tre.getY();

            Point one;
            Point two;
            Point three;

            double xt = ((deltaX/2))+ett.getX();
            double yt = ((deltaY/2))+ett.getY() +RandomUtilities.randFunc(dev);
            one = new Point(xt,yt);

            xt = (deltaXtre/2)+ett.getX();
            yt = (deltaYtre/2)+ett.getY() +RandomUtilities.randFunc(dev);
            two = new Point(xt,yt);

            xt = ((deltaXtva/2))+tre.getX();
            yt = ((deltaYtva/2))+tre.getY() +RandomUtilities.randFunc(dev);
            three = new Point(xt,yt);

            fractalLine(turtle,order-1,one,tva,three,dev/2);
            fractalLine(turtle,order-1,ett,one,two,dev/2);
            fractalLine(turtle,order-1,two,three,tre,dev/2);
            fractalLine(turtle,order-1,one,two,three,dev/2);            
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

胜利者

Rid*_*lly 0

您可以在递归的不同路径中一次又一次地计算任何顶点的中点。只要你不随机改变它们,每条路径都会得到相同的中点,所以没有问题。但是,当然,如果您随机修改中点,您将在两个不同的递归路径中以两个不同的中点结束。

您可以修改算法,不仅可以传递三角形的 3 个角,还可以传递每个顶点的修改后的中点。或者你将它们保存在一个单独的列表或地图或其他东西中,只计算一次,然后再查找它们。