2012-07-23 2 views
1

색인이있는 배열이 있습니다. 이 색인 중 세 개가 삼각형을 구성합니다. 이제 저는 삼각형 하나를 가져 와서 공유 된 가장자리를 가진 또 다른 삼각형을 찾습니다. 이 삼각형은 이제 사선으로 대각선으로 분할됩니다. 어떻게 (코드에서)이 대각선 가장자리/삼각형을 뒤집어 대각선을 연결할 수 있습니까? 내가 자주 블렌더, 마야 같은 3D 프로그램에서 "플립 에지"라고 찾고 있어요 3DS 등 최대두 개의 삼각형의 뒤집기

quadrangle edge flip

나는 이것에 붙어있어. 어떤 아이디어? 감사.

답변

4

이것은 구조를 구현 한 방법에 따라 다릅니다. 예를 들어, 이러한 구조가있는 경우 : verticesnodes에 대한 색인, 다음, 주어진 두 개의 삼각형이다

struct Vertex 
{ 
    double position[3]; 
}; 

struct Triangle 
{ 
    unsigned int vertices[3]; 
}; 

Vertex nodes[N_NODES]; 
Triangle triangles[N_TRIANGLES]; 

, 여기서 :

Triangle t1, t2; 

당신이

t1.vertices[i1] = t2.vertices[j1]; 
t1.vertices[i2] = t2.vertices[j2]; 

이있는 경우가있는 의미는 t1.vertices[i1] --- t1.vertices[i2]t2.vertices[j1] --- t1.vertices[j2]의 공유 가장자리이며, i3j3은 세 번째 veric 이 이미지에 표시된대로 각각 t1t2의 ES :

enter image description here

그런 다음 당신은 몇 가지 지표 변화와 플립을 할 수 있습니다. 가장 간단한 방법은 다음과 같습니다.

unsigned int t1_v[3], t2_v[3]; 

t1_v[0] = t1.vertices[i1]; // shared 
t1_v[1] = t1.vertices[i2]; // shared 
t1_v[2] = t1.vertices[i3]; // not shared 

t2_v[0] = t2.vertices[j1]; // shared (unnecessary) 
t2_v[1] = t2.vertices[j2]; // shared (unnecessary) 
t2_v[2] = t2.vertices[j3]; // not shared 

t1.vertices[0] = t1_v[0]; // previously shared 
t1.vertices[1] = t1_v[2]; // previously not shared 
t1.vertices[2] = t2_v[2]; // previously not shared 

t2.vertices[0] = t2_v[0]; // previously shared 
t2.vertices[1] = t2_v[2]; // previously not shared 
t2.vertices[2] = t1_v[2]; // previously not shared 

각 새 삼각형은 공유되지 않은 두 개의 정점과 공유 된 하나의 정점으로 구성됩니다.

0

하나의 배열에 정점이있는 경우 고정 행 길이만큼 다른 행을 인식하고 일부 패턴을 기반으로 삼각형을 만든다고 가정합니다. 세 개의 정점을 어떻게 할당하는지이 패턴을 변경하는 것이 좋습니다. 짝이없는 삼각형이 있으면 처리해야합니다.