gpt4 book ai didi

java - 我如何在java中组织这个多边形列表以便它们易于使用?

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:26 25 4
gpt4 key购买 nike

我的问题涉及可以使用混沌游戏生成的分形的地址空间。这些地址空间只是主要形状相互之间的转换。

enter image description here

图中here ,您可以看到有一个标记为“2”的三角形。三角形“21”、“22”和“23”与三角形 2 相关,因为您必须对其进行变换才能获得这些较小的子三角形。

这就是我想要做的......给定以下参数:

  • Int s:原始形状的边数
  • Int d:我们想要的形状树的深度(在图像中,d=2,因为我们生成主三角形的 3 个较小的三角形,然后也生成它们的子三角形)
  • 多边形 p:我们打算从中创建子元素的原始形状

...我想获取这些参数并开始使用计数器“i”向下迭代每个深度级别。您可以检查在第 i 层是否有需要的 s^d 形状。这些形状中的每一个都取决于上面级别中的多边形,所以我如何以某种方式存储这些形状,以便我可以以简单的方式创建大量深度级别,并且还可以使用 for 循环或某些还有其他高效简单的方法吗?我最大的希望是,在每个深度级别,我都可以访问我想要在此级别创建的三角形的父级。我还想稍后引用这些形状,可以通过直接名称(因为这是唯一的 ID),也可以通过其他简单的方式。

我最初的计划是以某种方式处理每个形状的名称(图像中看到的标签)。我可以以某种方式拥有大量形状,但只填充索引“1”、“2”、“3”、“11”、“12”、“13”、“21”、“22”等。然而,这似乎不仅困惑且效率低下,而且看起来很荒谬,因为我必须想办法以我可以处理的方式获得 1、2 和 3 的这些排列。一定有更好的方法!

如果有帮助,我提供了我的源代码:

package chaosaddresses;

import java.util.ArrayList;
//import java.awt.Polygon;

public class AddressManager
{
public Address originalPoly;
public ArrayList<Address>[] array;
public int depth;
public int sides;


public AddressManager(int d, int s, Address a)
{
depth = d;
sides = s;
originalPoly = a;
initArray();
}

private void initArray()
{
//loop through each depth and get all needed polygons
//number of polys at each depth is s^d.
for (int i=1; i <= depth; i++)
{
int numPolys = (int)Math.pow(sides,i);
int numParentPolys = array[i-1].size();
ArrayList<Address> thisLevel = new ArrayList<>();

//iterate parent polys and have each generate their children
for (int j= 0; j < numParentPolys; j++)
{
Address[] babies = array[i-1].get(j).makeChildren();

//add babies to current level
for (int k=0; k < babies.length; k++)
{
thisLevel.add(babies[k]);
}
}
array[i] = thisLevel;
}
}


}

最佳答案

分形适合递归,因为它们的计算本质上是递归的。组织此操作的一种方法是让每个级别保存对下一个级别的实例的引用,从而为您提供一个级别树,每个级别都递归地创建其子级。

<小时/>

编辑
例如,按照以下顺序进行操作:

public class Sierpinski {
public static int MAX_LEVEL = 6;
private int level;
private Point2D[] points = new Point2D[3];
private Sierpinski[] childTriangles = null;

private Sierpinski(int level, Point2D[] points) {
this.level = level;
this.points = points;

if (level < MAX_LEVEL) {
childTriangles = createChildren();
}
}

public int getLevel() {
return level;
}

public Point2D[] getPoints() {
return points;
}

private Sierpinski[] createChildren() {
// TODO finish method....
}

public void draw(Graphics2D g2) {
// TODO finish method:
// .... draw this triangle

if (childTriangles != null) {
for (Sierpinski childTriangle : childTriangles) {
childTriangle.draw(g2);
}
}
}
}

关于java - 我如何在java中组织这个多边形列表以便它们易于使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013741/

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