gpt4 book ai didi

有偏差的 Java 递归三角形

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:51 26 4
gpt4 key购买 nike

你好,我是编程新手,我正在尝试在 Java 中创建一个函数,该函数从两个角之间的较大三角形中点创建递归三角形,其中新三角形点偏离 y 值的正常位置。请参阅下面的图片以进行可视化。

Visualization - Image 1

Visualization - Image 2

第一张图显示递归算法的进展没有任何偏差(顺序 0,1,2),第二张图显示它(顺序 0,1)。

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

work in progress

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

下面是我当前的代码

点类存储点的 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);
}
}

提前致谢

维克多

最佳答案

您可以通过 3 个点(顶点)定义一个三角形。所以顶点a、b、c将形成一个三角形。 ab,acbc 的组合将是边缘。所以算法是这样的:

  1. 首先从三个顶点a,b,c开始
  2. 获取 3 条边 p1、p2 和 p3 的中点,并获取 4 个较小三角形的 4 组顶点。即 (a,p1,p2),(b,p1,p3),(c,p2,p3) 和 (p1,p2,p3)
  3. 递归地找到 4 个三角形的子三角形,直到达到深度。

作为粗略的指南,代码如下

findTriangles(Vertexes[] triangle, int currentDepth) {
//Depth is reached.
if(currentDepth == depth) {
store(triangle);
return;
}
Vertexes[] first = getFirstTriangle(triangle);
Vertexes[] second = getSecondTriangle(triangle);
Vertexes[] third = getThirdTriangle(triangle);;
Vertexes[] fourth = getFourthTriangle(triangle)

findTriangles(first, currentDepth+1);
findTriangles(second, currentDepth+1);
findTriangles(third, currentDepth+1);
findTriangles(fourth, currentDepth+1);
}

您必须将相关的三角形存储在数据结构中。

关于有偏差的 Java 递归三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13242050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com