我正在编写一个绘制 3D 图形的 Java3D
程序。我将图形的点保存在一个数组中,并将其传递给 createMesh()
和 createGraph()
函数。以下是我如何获得图表的点:
double x=xmin;
Point3d[] vertices = new Point3d[graph.length*graph[0].length];
for(int i=0, index=0; i<graph.length; i++, x+=((xmax-xmin)/graph.length))
{
double y = ymin;
for(int j=0; j<graph[i].length; j++, y+=((ymax-ymin)/graph[i].length), index++)
{
double z = Math.sin(Math.pow(x, 2)+Math.pow(y, 2))/(Math.pow(x, 2)+Math.pow(y, 2));
Point3d point = new Point3d(x, z, y);
if(z>zmax)
zmax = z;
if(z<zmin)
zmin = z;
vertices[index] = new Point3d(x, z, y);
}
}
在 createGraph()
方法中,我需要将点的 y 值设置为 0。为了保持原始顶点数组不变,我复制传递给 createGraph 的数组()
方法如下:
private Shape3D createGraph(Point3d[] tempA)
{
Point3d[] vertices = (Point3d[])tempA.clone();
...
}
在 createMesh()
方法中,我没有更改顶点数组的值,所以我没有复制它。我的程序首先调用 createGraph()
并复制数组,然后调用 createMesh()
并读取原始数组。问题是,当我使用原始顶点数组中的点制作网格时,原始数组的 y 值不知何故也为 0。我可以先调用 createMesh()
,但我仍然想弄清楚我的程序发生了什么。
最佳答案
首先不推荐使用clone()在 Java 中自 clone is broken .
其次,通过使用克隆 - 您正在克隆数组 - 而不是数组中的项目。有关更多信息,请阅读 deep vs. shallow copy .
关于java - 奇怪的数组复制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25073497/