首页 > 解决方案 > 如何在 Processing (v. 3.4) 中将元素附加到 3 维数组?

问题描述

我正在创建一个程序来渲染 3D 图形。我有一个 3D 数组“形状”,其中包含要渲染的所有多边形。它是一个多边形数组,其中每个多边形本身就是一个点数组,每个点是一个由 3 个整数值(x、y、z 坐标)组成的数组。我尝试过使用 append() 函数但失败了。我还能如何让它工作?

我试过使用 append() 函数,但这似乎不适用于多维数组。

int[][][] addPolyhedron(int[][][] shapes, int[][][] polyhedron)
{
    for(int i = 0; i < polyhedron.length; i ++)
    {
        shapes = append(shapes, polyhedron[i]);
    {
    return shapes;
}

我希望这可以扩展阵列形状以包括阵列多面体中的所有多边形。但是,我收到一条错误消息,提示“类型不匹配,“java.lang.Object”与“int[][][]”不匹配。提前致谢。

标签: processing

解决方案


在 Java 中,数组(任何维度)是不可扩展的——大小在实例化时定义、分配和固定。您想要添加到(并因此动态调整大小)shapes。虽然 Processing 确实提供了功能,但我认为使用内置的 Java 数据类型append()更合适。ArrayList

您的函数可以重构为如下所示:

ArrayList<Integer[][]> addPolyhedron(ArrayList<Integer[][]> shapes, ArrayList<Integer[][]> polyhedron)
{
    shapes.addAll(polyhedron);
    return shapes;
}

请注意,这int[][]Integer[][]因为 anArrayList不能用原始类型(intboolfloat等)声明。

添加一个单独的程序定义的多边形shapes将像这样完成:

shapes.add(new Integer[][] {{1,2,5},{3,4,5},{6,5,4}}); // adds a triangle to shapes.

shapesArrayList 获取坐标可以这样完成:

shapes.get(0)[1][1]; // returns 4.

推荐阅读