2012-07-18 1 views
0

C#에서 행군하는 큐브를 구현하려고하는데 알고리즘을 이해하지 못하는 부분에 와서 구현 방법을 모르겠습니다.Marching Cubes (C++에서 C#)

int Polygonise(GRIDCELL grid, double isolevel, TRIANGLE *triangles)

난 정말 이해가 안 세 번째 인수. 나는 포인터 알고,하지만 당신은 삼각형을 설정할 때 triangles 변수가 TRIANGLE 구조체의 배열 인 것처럼 나중에 너 한테에서, 그것은 나타납니다

int ntriang = 0; 

for (int i=0; triTable[cubeindex,i]!=-1; i+=3) { 
    triangles[ntriang].p[i ] = vertlist[triTable[cubeindex,i ]]; 
    triangles[ntriang].p[i+1] = vertlist[triTable[cubeindex,i+1]]; 
    triangles[ntriang].p[i+2] = vertlist[triTable[cubeindex,i+2]]; 
    ntriang++; 
} 

을 주목 triangles[ntriang]. 우리가 trianglesTRIANGLE *triangles으로 설정하기 전에는 의미가 없습니다. 왜 포인터인지 이해하지 못합니다.

+4

왜 삼각형 [ntriang]이 의미가 없습니까? 'ntriang'을 사용하여 '삼각형'이 가리키는 배열을 색인하기 만하면됩니다. 나머지 표현식은 ntriang-th 위치에서 구조체의 멤버 'p'에 무언가를 할당합니다. – pmr

답변

2

Polygonize의 호출자는 할당 된 배열에 대해 *triangles이 모든 삼각형을 포함 할 수있을만큼 충분히 길 것으로 예상합니다. C#의 해당 함수는 TRIANGLE[] 또는 List<TRIANGLE>()

+0

목록에 포인터를 어떻게 사용합니까? –

+0

목록을 추가해야하고 [] 연산자를 배열로 사용할 수 있습니다. –

1

일 수 있습니다.이 함수는 복셀/셀의 GRID를 가져 와서 삼각형을 출력합니다. 삼각형 목록을 얻을 것이므로 포인터입니다.