我正在编写一个绘制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()
,但我仍然想弄清楚什么是继续我的计划。
答案 0 :(得分:2)
首先,不建议在clone()之后在Java中使用clone is broken。
其次,通过使用克隆 - 您将克隆数组 - 而不是数组中的项目。有关deep vs. shallow copy的详细信息,请参阅。
答案 1 :(得分:1)
如果Object不是基本类型,Java Object.clone()将传递对原始对象的引用。你需要深入复制。
以下文章将为您提供帮助。