的片当奇数,立方3D阵列(3x3x3的,5×5×,7x7x7等)工作,这将是返回数组的2D切片的最有效方法,给出定位切片的轴和用于确定切片沿该轴的相关位置的值?Java 3D的数组:存储立方体,检索立方体
2
A
回答
1
我认为你有三个选项作出选择,这取决于你想要什么你的输入及切分方法的输出是:
- 切片工作的基本多维Java数组上,产生一个原始的多维Java数组,例如:
int[][] ArrayUtils.slice(int[][][] cube, int axis, int sliceIndex)
- 切片操作上的原始多维Java数组,produc ES与吸气剂例如一个对象:
SomeKindOf2DimArrayClass ArrayUtils.slice(int[][][] cube, int axis, int sliceIndex)
- 切片使用非原始阵列既作为输入和输出,并且是这样的类的方法:
SomeKindOf2DimArrayClass slice(int axis, int sliceIndex)
就你的界面而言。
实现明智的,如果你使用基本数组,那么你没有太多的选择,只能做一些“重任” - 打造为siice二维数组 - 至少第3个轴。对于第一个轴,您只需使用其中一个二维数组(即result = Arrays.copyOf(cube[sliceIndex])
,如果您感觉活跃,甚至只是使用该参考);第二轴,你会如果你使用一个对象有类似
for(int i=0; i<cube.length; i++) {
myAllocated2dArray[i] = Arrays.copyOf(cube[i][sliceindex])
}
,你有很多的选择,从我刚才所描述的是什么@Aquillo在his answer这里建议,为O( 1)使用getter方法的原始数组的空间包装。
你可能会得到关于已通过阅读关于在C language FAQs类似的问题,这里使用的指针(引用)是明确的答复建议的两种实现一些启示:
1
由于这是一个相当有趣的话题对我来说,我一直在寻找过答案。我想你可能会碰到Mark Byers的方法:
除了将它存储在一个三维数组中,Mark在如何使用一维数组中有一个非常好的方法。
一些尝试,我拿出完整的立方体后,希望这套房,为您:
public class Cube {
int w, h, d;
int[] cube;
public Cube(int w, int h, int d) {
this.w = w;
this.h = h;
this.d = d;
System.out.println("cube: w" + w + ", h" + h + ", d" + d + " = " + (w * h * d));
cube = new int[w * h * d];
}
int getCubeValue(int x, int y, int z) {
return cube[x * h * d + y * d + z];
}
void setCubeValue(int x, int y, int z, int value) {
System.out.println("value " + (x * h * d + y * d + z) + ": x" + x + ", y" + y + ", z" + z + " = " + value);
cube[x * h * d + y * d + z] = value;
}
int[] xSlice(int x) {
int[] slice = new int[h * d];
for(int y = 0; y < h; y++) {
for(int z = 0; z < d; z++) {
slice[y * d + z] = getCubeValue(x, y, z);
}
}
return slice;
}
int xSliceValue(int[] slice, int y, int z) {
return slice[y * d + z];
}
int[] ySlice(int y) {
int[] slice = new int[d * w];
for(int z = 0; z < d; z++) {
for(int x = 0; x < w; x++) {
slice[z * w + x] = getCubeValue(x, y, z);
}
}
return slice;
}
int ySliceValue(int[] slice, int x, int z) {
return slice[z * w + x];
}
int[] zSlice(int z) {
int[] slice = new int[w * h];
for(int x = 0; x < w; x++) {
for(int y = 0; y < h; y++) {
slice[x * h + y] = getCubeValue(x, y, z);
}
}
return slice;
}
int zSliceValue(int[] slice, int x, int y) {
return slice[x * h + y];
}
}
说你作出这样new Cube(3, 3, 3)
多维数据集,最后的值将是平易近人的cube.getCubeValue(2, 2, 2)
,因为它开始于零。
相关问题
- 1. java中的简单3D立方体
- 2. python绘制3D立方体
- 3. OpenGL Java 3D立方体旋转
- 4. 我如何存储立方体方法
- 5. 与3D立体
- 6. WPF:带圆角的3D立方体
- 7. 顶点的3d立方体网格C++
- 8. 跟踪3D立方体位置的OpenGL?
- 9. 使用javascript的3D立方体形状
- 10. 确定3D立方体的表面
- 11. 纹理在android中的3d立方体
- 12. 立方体上的OpenGL 3D纹理
- 13. Swift SCNNode 3D立方体旋转到立方体上的一个点
- 14. PCL立方体检测
- 15. 如何用THREE.js(无框/立方体几何)使用javascript构建3D立方体?
- 16. SSAS立方体分组
- 17. Lwjgl 3D立方体透明度问题
- 18. 绘制3D立方体并旋转它
- 19. 3D立方体问题,第2部分
- 20. 识别关于3D立方体
- 21. 旋转3D立方体透视问题
- 22. 控制台3D立方体旋转
- 23. Delphi Firemonkey 3D立方体脸孔
- 24. 制作导航3D立方体
- 25. 在3d中创建一个立方体
- 26. 使用Opengl绘制立方体3D
- 27. css 3D变换立方体透视
- 28. 创建线框3D立方体
- 29. 旋转3D立方体在WPF
- 30. 一个3D立方体折叠选穴
你能更具体地说明“轴”和“切片”是什么意思吗?轴是否与x-y-z方向对齐?如果他们不是,在横截面不是矩形的情况下,你想要返回什么? –
是的,轴将是,例如,将对应于在原始数组中心居中的x/y/z轴的int 0/1/2,则该值可以是与中心0/+ 1/-1/etc,或从侧面。在这种情况下,切片将是一个垂直于指定轴的2d阵列,并由该值偏移。 – Shukaro