2013-07-11 105 views
0

我想在C++中创建一个3d立方体网格,但我有一个问题:一旦指定了起点(xs,ys,zs),终点(xe,ye,ze)和我想知道每个立方体的八角。 在(0,0,0)和i,j,k中设置原点,沿三轴移动的索引我知道:顶点的3d立方体网格C++

1°角是在(I,J,K) 2°角是在第(i + 1,J,K) 3°角是在(I,J + 1,k)的

等。

我不知道如何获取这个有价值的三元组,并确定在所有元素上的三个“for循环”中的单个点... 请帮我:)

+1

什么是1度转角,2度转角,等等?你只是想识别立方体的八个角落? – Cricketer

+0

是的,我需要确定8个角落,因为那时我需要他们来识别立方体内的四面体...... – user2572206

回答

2

首先定义一个简单的struct point3D :

typedef struct { 

    float x; 
    float y; 
    float z; 
} point3D; 

我写这个生成网格:

//Compute edge sizes 
float x_size = xe - xs; 
float y_size = ye - ys; 
float z_size = ze - zs; 

//Compute steps 
float x_step = x_size/n_step; 
float y_step = y_size/n_step; 
float z_step = z_size/n_step; 

//Points per edge (including ending point) 
int n = n_step + 1; 

//Alloc grid (you can use malloc if you prefer) 
point3D grid[n*n*n]; 

for (int i = 0; i < n; i++) { //move on x axis 

    for (int j = 0; j < n; j++) { //move on y axis 

    for (int k = 0; k < n; k++) { //move on z axis 

     point3D p; 
     p.x = xs + x_step * i; 
     p.y = ys + y_step * j; 
     p.z = zs + z_step * k; 
     grid[i+n*j+n*n*k] = point3D; 
    } 
    } 
} 

要参加8个角点使用:

point3D corner = grid[n_step*x + n*n_step*y + n*n*n_step*z]; 

有:

(x, y, z) 
1: (0, 0, 0) 
2: (0, 0, 1) 
3: (0, 1, 0) 
4: (0, 1, 1) 
5: (1, 0, 0) 
6: (1, 0, 1) 
7: (1, 1, 0) 
8: (1, 1, 1) 
+0

非常感谢:) – user2572206