你好,我对编程还比较新,我正在尝试用Java创建一个函数,它可以从更大的三角形中心点开始创建递归三角形,其中新三角形的点在y值上偏离了正常位置。请参见下面的图片进行可视化。
第一张图片显示了没有任何偏差的递归算法的进展情况(order 0,1,2),而第二张图片显示了它具有(order 0,1)时的情况。
我已经成功编写了一个能够创建我想要的前几个订单的工作代码,但是当我们达到订单2及以上时,我会遇到问题,即较小的三角形不使用相同的中点,因此看起来像下面的图片。
因此,我需要一种方法来存储和调用每个三角形的正确中点。我一直在考虑实现一个控制中点计算和存储它们等的新类,但是如我所说,我需要帮助。
以下是我的当前代码
point类存储点的x和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);
}
}
感谢您的提前帮助。
维克托
Edge
和Vertex
类,因此您可以拆分边缘并使三角形引用共享的顶点等。 - ToriousgetMidpoint(Point a, Point b, double deviation)
方法(或类似方法),这应该有助于简化问题。此外,为什么您的偏差只在y
方向上?我不确定,但我怀疑您的问题可能是由于在传递给下一级时未保持点的一致顺序所致。 - Clockwork-Muse