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


第一张图显示了没有任何偏差的递归算法的进展(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)
提前致谢
胜利者
您可以在递归的不同路径中一次又一次地计算任何顶点的中点。只要你不随机改变它们,每条路径都会得到相同的中点,所以没有问题。但是,当然,如果您随机修改中点,您将在两个不同的递归路径中以两个不同的中点结束。
您可以修改算法,不仅可以传递三角形的 3 个角,还可以传递每个顶点的修改后的中点。或者你将它们保存在一个单独的列表或地图或其他东西中,只计算一次,然后再查找它们。
| 归档时间: |
|
| 查看次数: |
1093 次 |
| 最近记录: |