的片當奇數,立方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