2012-07-23 150 views
1

我有一個帶有索引的數組。其中三個指標組成三角形。現在我帶一個三角形並搜索另一個具有共享邊緣的三角形。這些三角形現在組成了一個對角分割的四邊形。如何(在代碼中)我可以翻轉這個對角邊/三角形,以便連接相反的對角線?我正在尋找的是經常在像攪拌機,瑪雅,3D節目稱爲「翻轉邊緣」的3ds Max等兩個三角形的翻轉邊緣

quadrangle edge flip

我堅持這一點。有任何想法嗎?謝謝。

回答

4

這取決於你如何實現你的結構。例如,如果你有這樣的結構:其中

struct Vertex 
{ 
    double position[3]; 
}; 

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

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

vertices是一個索引到nodes,然後給出兩個三角形:

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 

請注意,每個新的三角形由2個非共享頂點和一個共享頂點組成。

0

如果你有一個數組中的頂點,我假設你通過一些固定的行長度識別不同的行,並根據某種模式製作三角形。我建議只是改變這種模式,你如何分配三個頂點。如果有任何問題,你必須處理沒有配對的三角形