我有一個帶有索引的數組。其中三個指標組成三角形。現在我帶一個三角形並搜索另一個具有共享邊緣的三角形。這些三角形現在組成了一個對角分割的四邊形。如何(在代碼中)我可以翻轉這個對角邊/三角形,以便連接相反的對角線?我正在尋找的是經常在像攪拌機,瑪雅,3D節目稱爲「翻轉邊緣」的3ds Max等兩個三角形的翻轉邊緣
我堅持這一點。有任何想法嗎?謝謝。
我有一個帶有索引的數組。其中三個指標組成三角形。現在我帶一個三角形並搜索另一個具有共享邊緣的三角形。這些三角形現在組成了一個對角分割的四邊形。如何(在代碼中)我可以翻轉這個對角邊/三角形,以便連接相反的對角線?我正在尋找的是經常在像攪拌機,瑪雅,3D節目稱爲「翻轉邊緣」的3ds Max等兩個三角形的翻轉邊緣
我堅持這一點。有任何想法嗎?謝謝。
這取決於你如何實現你的結構。例如,如果你有這樣的結構:其中
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]
的共享邊緣,假設i3
和j3
是第三個veric分別t1
和t2
ES,因爲這圖像中表示:
然後,你可以做翻轉只是改變了一些指標。最直接的方法是:
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個非共享頂點和一個共享頂點組成。
如果你有一個數組中的頂點,我假設你通過一些固定的行長度識別不同的行,並根據某種模式製作三角形。我建議只是改變這種模式,你如何分配三個頂點。如果有任何問題,你必須處理沒有配對的三角形