你好,我是相当新的编程,我试图在Java中创建一个函数,从一个更大的三角形创建递归三角形的角点之间的新三角形点偏离正常位置y值。查看下面的图片了解可视化。Java递归三角形与偏差
第一图为递归算法的进展而没有任何偏差(顺序0,1,2)和所述第二图像与(顺序0,1)示出了它。
我设法生成了一段代码,它创建了我想要的第一对订单,但是当我们达到2级及以上订单时,遇到小三角形不使用相同中点的问题因此看起来像下面的图片。
所以我需要一种方法来存储和调用正确的中点为每个三角形的帮助。我一直在考虑实施一个控制中点计算和存储等的新班,但正如我所说的,我需要帮助。
下面是我当前的代码
点类存储斧头和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);
}
}
感谢
Victor
拥有'Edge'和'Vertex'类,以便您可以拆分边并使三角形引用共享顶点等。 – Torious
为什么需要随机数?开发的目的是什么?请不要在这里回答,编辑您的原始帖子。谢谢 – durron597
我衷心推荐你创建一个'getMidpoint(Point a,Point b,double deviation)'方法(或类似的),这应该有助于简化这一点。另外,为什么你的偏差只在'y'方向?我不确定,但我怀疑你的问题可能是因为在转移到下一个等级时不能保持积分一致。 –