2016-08-30 114 views
0

如何使用openGL檢查多邊形是凹或凸? 我把點作爲.txt文件的輸入,並用這些點繪製一個多邊形,然後出現這個問題..我需要一個算法來檢測多邊形的類型。凹或凸。如何檢查多邊形是凹或凸?使用openGL

void drawPoints() { 
glClear(GL_COLOR_BUFFER_BIT); //Clear display window. 
if (points.size()<2) { 
    glPointSize(3.0); 
    glBegin(GL_POINTS); 
} 
else { 
    glLineWidth(3.0); 
    glBegin(GL_LINE_LOOP); 
} 


    for (int i = 0; i<(int)points.size(); i++) { 
    Point& p_i = points[i]; 
    glVertex2f(p_i.GetX(), p_i.GetY()); 
} 



glEnd(); 
glFlush(); //Process all OpenGL routines as quickly as possible. 

}

回答

2

如何檢查多邊形是凹或凸?

如果在任何兩個頂點之間繪製的任何線條出現在多邊形的(填充部分)之外,則線條的點都不會出現,則會將多邊形定義爲凸出的。這是一個集合的凸性定義的泛化。

那麼你如何測試呢?通常的做法是確定多邊形的凸包(例如用Gift Wrapping algorithm),然後測試多邊形的邊緣是否與其凸包相吻合。

用openGL

沒有。 OpenGL只是繪製的東西。它不適用於處理幾何圖形(超出繪製圖形所需的範圍)。

+0

我會修改最後一段。 OpenGL絕對適用於「Processing Geometry」;這是Shaders的用途。然而,在OP的情況下,確定「這種形狀是凸面還是凹面」是OpenGL的一個糟糕的應用,因爲雖然聰明地使用着色器可以解決這個問題,但是當這樣做的好處幾乎不可能通過簡單地用C++(或任何其他語言)編寫算法來迭代多邊形的頂點並檢查它的凸性,可以用更少的時間和內存來解決它。 – Xirema

+0

@Xirema:除了幾何着色器(在某種程度上)和鑲嵌着色器(在一個非常有限的範圍內),OpenGL着色器完全集中於頂點和基元形式的單數實體,或者計算情況下的大量無形數據着色器。除了一些特殊功能(裁剪和鄰接)之外,典型的OpenGL實現具有關於幾何的零知識。着色器中的任何「幾何知識」不是來自OpenGL實現,而是程序員,寫着色器。 – datenwolf

+0

@Xirema:我知道這對於一個唯一目的是從幾何圖形生成圖像的API來說可能看起來很奇怪,或者很怪異。但是,OpenGL擁有如此廣泛的目標受衆,任何爲其提供幾何「知識」的嘗試都只會受到限制,而不會授予希望使用該API的程序員。幾何知識由程序員或第三方提供是故意的。 – datenwolf