我在嘗試將 3D 網格點指定為單元格的頂點時遇到了障礙。單元格應該只包含 8 個點作為角頂點。
我創建的網格沒有任何問題,但似乎無法弄清楚如何將點排序到相應的單元格。
此草圖說明了如何對點進行索引:

一個有 8 個角點的立方體將對應一個單元格(例如,單元格 0 將包括點 0、1、3、4、6、7、9、10 作為角點)。
代碼應該是這樣的:
public class Cell
{
public int[] Index =new int[8];
}
public void makeCells()
{
numCells = (xSize - 1) * (zSize - 1) * (ySize - 1);
Cells = new Cell[numCells];
for ( int i = 0, j = 0; i < numCells; i )
{
Cells[i] = new Cell();
for ( int k = 0; k <8; k , j )
{
Cells[i].Index[k] = j;
}
}
}
我似乎不知道如何正確增加索引,以便它們與正確的點協調。任何形式的幫助將不勝感激!
uj5u.com熱心網友回復:
觀察每個單元格的最低網格索引是它在最終陣列中的索引,如果以遞增的X->Z->Y纏繞順序計數。
對于 index 處的網格點I,還可以看到以下索引:
- ... X 方向是
I 1 - ... Z 方向是
I xSize(每行的大小) - ... Y 方向是
I xSize*ySize(每個水平層的大小)
(未經測驗)代碼:
cells = new Cell[ xSize*zSize*ySize ];
// Base index accumulator
int cell_idx = 0;
// Horizontal and vertical offsets
int offset_z = xSize;
int offset_y = xSize*ySize;
// offset_x = 1
for (int y = 0, offset_y = 0; y < ySize; y )
for (int z = 0; z < zSize; z )
for (int x = 0; x < xSize; x )
{
Cell c = new Cell();
// Essentially the same as the outer 3 loops
for (int i = 0; i < 2; i )
for (int j = 0; j < 2; j )
for (int k = 0; k < 2; k )
c.Index[i*4 j*2 k] = cell_idx i*offset_y j*offset_z k;
cells[cell_idx ] = c;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312858.html
上一篇:Androidcompose更新Room資料庫中的資料時,不會發生重組
下一篇:給定總量,如何將比率轉換為數字?
